Sei sulla pagina 1di 63

Introduzione a MATLAB

Stefano Berrone
tel. 011 564 7503
sberrone@calvino.polito.it
http://calvino.polito.it/sberrone
Dipartimento di Matematica
Politecnico di Torino

Corso di Calcolo Numerico


Corsi di Laurea in
Ingegneria dellOrganizzazione dImpresa
Ingegneria Logistica e della Produzione
a.a. 2005/2006
Bibliografia: Berrone, Pieraccini, Esercizi svolti di Calcolo Numerico con Introduzione a MATLAB,
CLUT, 2004

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Cos`
e Matlab?
Matlab `e un linguaggio di programmazione interpretato e non di tipo compilato.
Nei linguaggi interpretati le istruzioni vengono immesse direttamente al prompt (in Matlab
rappresentato dalla stringa > >) ed eseguite una ad una dallinterprete dei comandi.
Esempio.
> > 3+4
ans =
7

(+ tasto invio)

Vantaggi:

elevato livello di interazione tra utente e interprete dei comandi


notevole semplicit`a di programmazione.
Svantaggi:

In generale, minore efficienza rispetto ad un linguaggio compilato.

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Comandi
Nel seguito indicheremo con il generico termine comando diverse operazioni, come ad esempio:

lassegnazione di un valore ad una variabile,


la valutazione di unespressione (eventualmente preceduta da unassegnazione),
lesecuzione di una function esistente o creata dallutente,
lesecuzione di uno script...

Per il momento supporremo di immettere i comandi direttamente al prompt.


Poi, programmazione strutturata in file.

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Variabili
Nomi di variabile ammissibili: sequenze di caratteri lunghe da 1 a 32 caratteri, contenenti lettere, numeri
(ma mai un numero in prima posizione) e il carattere (underscore).
Matlab `e case sensitive, ovvero distingue fra maiuscole e minuscole indipindentemente dal sistema
operativo con cui si usa (Linux, Windows...).
Esempio. AB, aB, ab e Ab rappresentano quattro variabili diverse.
N.B. Tutte le funzioni predefinite di Matlab vanno usate con i caratteri minuscoli (nonostante il fatto
che nellhelp in linea i nomi di funzione siano tutti scritti in caratteri maiuscoli).
Tipi di variabile
Tra le variabili numeriche, Matlab usa solamente variabili reali in doppia precisione; non usa variabili
intere, ne logiche (ci`o non significa che non gestisce operazioni di tipo logico).
` possibile definire variabili di tipo stringa (vettori di caratteri).
E

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Assegnazioni
Sintassi di una istruzione di assegnazione:
> > nomevariabile = espressione
Esempio.
> > a = 1;
N.B. Le variabili non richiedono una dichiarazione prima dellassegnazione.
Se una assegnazione non `e seguita dal carattere ; Matlab mostra immediatamente come output il
risultato dellespressione o dellassegnazione:
> > a = 1
a =
1
Per definire una variabile di tipo stringa si assegna come contenuto una qualsiasi stringa racchiusa fra
apici:
> > var = pluto;

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Costanti predefinite
In Matlab sono a disposizione dellutente alcune variabili speciali e costanti predefinite:

ans `e la variabile a cui viene assegnata la most recent ANSwer, ovvero il risultato di espressioni
valutate al prompt senza che siano precedute da unistruzione di assegnazione;
eps contiene lepsilon di macchina; nel caso di arrotondamento la precisione di macchina `e 0.5*eps;
realmax contiene il pi`
u grande numero di macchina positivo;
realmin contiene il pi`
u piccolo numero di macchina positivo rappresentabile in forma normalizzata
(con denormalizzazione si possono rappresentare anche valori fino a realmin252);
pi contiene il valore approssimato di ;
i,j rappresentano entrambi lunit`a immaginaria;
inf rappresenta il valore speciale infinito; `e il risultato ad esempio della divisione 1/0;
NaN rappresenta il valore speciale Not a Number; `e il risultato, ad esempio, della divisione 0/0.
N.B. Le costanti predefinite possono essere usate dallutente come variabili, ignorando il loro valore e
significato, e usandole in una qualsiasi istruzione di assegnazione (ad esempio, le variabili i e j possono
essere tranquillamente usate in un ciclo for): il contenuto predefinito sar`a recuperato riavviando una
nuova sessione di lavoro.

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Errori e warning
Distinzione come in molti altri linguaggi fra errori e messaggi di warning.
Quando si commette un errore (ad esempio, se si tenta di fare riferimento ad una variabile non definita)
lesecuzione si blocca.
Esiste un certo numero di operazioni per le quali viene prodotto sul display un messaggio di warning
mentre lesecuzione prosegue.
N.B. A causa della presenza delle costanti predefinite inf e NaN lutente deve porre estrema attenzione
nellassicurarsi che le operazioni che vengono effettuate siano ben definite. A volte un errore pu`
o
compensarsi con altre operazioni senza che lutente se ne renda conto!
Esempio.
> > 1/0 risultato inf (con warning)
> > 1/inf risultato 0.
> > 1/(1/0) risultato 0! (preceduto da un messaggio di warning per la divisione 1/0).

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Si tenga presente che Matlab lavora anche nel campo complesso.


Il tentativo di calcolare sqrt(-1) (vale a dire
warning, ma semplicemente la risposta 0+i.

1) non genera ne messaggi derrore, ne messaggi di

Devessere cura dellutente inserire controlli per assicurarsi di lavorare sempre in campo reale (se `e
questo che si desidera).

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Interagire con lambiente di calcolo


Una variabile attiva `e una variabile che `e stata assegnata e che risulta essere ancora memorizzata.
Linsieme delle variabili attive costituisce il workspace di Matlab.
` possibile in ogni momento controllare il contenuto del workspace con uno dei comandi seguenti:
E
> > who (mostra lelenco delle variabili)
> > whos (ne indica anche la dimensione e il tipo).
Esempio.
> > a = 1;
> > b = 6;
> > whos
Name
a
b

Size
1x1
1x1

Bytes
8
8

Class
double array
double array

Grand total is 2 elements using 16 bytes

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Il contenuto del workspace pu`


o essere salvato su un file in qualsiasi momento della sessione di lavoro
usando il comando save:
> > save nomefile
apre un file binario di nome nomefile.mat in cui vengono salvate le variabili attive; se il nome del file
non viene specificato, il nome di default usato `e matlab.mat.
Per salvare solo alcune variabili, ad esempio le variabili var1 e var2, si pu`
o usare la sintassi
> > save nomefile var1 var2
Per recuperare, allinterno di una sessione di lavoro, il contenuto delle variabili salvate in un file con
estensione .mat, `e sufficiente digitare il comando
> > load nomefile
Per cancellare completamente il contenuto del workspace si pu`
o usare il comando
> > clear
Per eliminare solo alcune variabili si usa il comando clear seguito dalle variabili che si desidera cancellare:
> > clear var1
9

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Il flusso di comandi digitato durante una sessione di lavoro pu`


o essere salvato su un file di testo usando
il comando diary. Per la precisione, con il comando
> > diary nomefile
viene aperto il file di testo nomefile.dat su cui vengono trascritti tutti i comandi lanciati al prompt e
le relative risposte eventualmente fornite dal programma.
Con il comando
> > diary off
viene interrotto il salvataggio del flusso di comandi, il file viene chiuso e salvato.

10

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

help !
Uno tra i comandi pi`
u utili di Matlab `e senzaltro il comando help.
Se `e noto il nome di un comando, listruzione
> > help nomecomando
fornisce il cosiddetto help in linea del comando: la sintassi duso, gli effetti, varie opzioni di utilizzo ed
eventuali comandi correlati.
Listruzione
> > doc nomecomando
fornisce in generale dettagli ancora maggiori, attingendo alla documentazione di Matlab.
Il comando help pu`o essere usato anche in modo pi`
u generale. I comandi di Matlab sono raggruppati
per topic (argomenti). Lanciando al prompt il comando help da solo, si ottiene come output la lista
dei vari argomenti.

11

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

>> help
HELP topics:
matlab/general
matlab/ops
matlab/lang
matlab/elmat
matlab/elfun
matlab/specfun
matlab/matfun
matlab/datafun
matlab/audio
matlab/polyfun
matlab/funfun
matlab/sparfun
matlab/graph2d
matlab/graph3d
matlab/specgraph
...

General purpose commands.


Operators and special characters.
Programming language constructs.
Elementary matrices and matrix manipulation.
Elementary math functions.
Specialized math functions.
Matrix functions - numerical linear algebra.
Data analysis and Fourier transforms.
Audio support.
Interpolation and polynomials.
Function functions and ODE solvers.
Sparse matrices.
Two dimensional graphs.
Three dimensional graphs.
Specialized graphs.

12

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Una volta noto il nome degli argomenti, con il comando


> > help nome argomento
si ottiene la lista dei comandi collegati a quellargomento.
>> help general
General purpose commands.
MATLAB Toolbox
Version 6.1 (R12.1)

18-May-2001

General information
helpbrowser - Bring up the help browser.
doc
- Complete on-line help, displayed in the help browser.
help
- M-file help, displayed at the command line.
helpwin
- M-file help, displayed in the help browser.
lookfor
- Search all M-files for keyword.
syntax
- Help on MATLAB command syntax.
support
- Open MathWorks Technical Support Web Page.
demo
- Run demonstrations.
ver
- MATLAB, SIMULINK, and toolbox version information.
13

Dipartimento di Matematica - Politecnico di Torino

version
whatsnew

Calcolo Numerico - Introduzione a MATLAB

- MATLAB version information.


- Access Release Notes.

Managing the workspace.


who
- List current variables.
whos
- List current variables, long form.
workspace
- Display Workspace Browser, a GUI for managing the workspace.
clear
- Clear variables and functions from memory.
pack
- Consolidate workspace memory.
load
- Load workspace variables from disk.
save
- Save workspace variables to disk.
quit
- Quit MATLAB session.
Lhelp dei comandi di Matlab `e costituito da una prima riga seguita dalla descrizione completa:
> > help norm
NORM
Matrix or vector norm.
For matrices...
NORM(X) is the largest singular value of X, max(svd(X)).
NORM(X,2) is the same as NORM(X).
...
14

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Con il comando
> > lookfor stringa
Matlab cerca loccorrenza di stringa nella prima riga dellhelp di ogni funzione.

15

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Con il comando format si pu`


o scegliere la modalit`a di visualizzazione dei numeri.
>> help format
FORMAT Set output format.
All computations in MATLAB are done in double precision.
FORMAT may be used to switch between different output
display formats as follows:
FORMAT
Default. Same as SHORT.
FORMAT SHORT
Scaled fixed point format with 5 digits.
FORMAT LONG
Scaled fixed point format with 15 digits.
FORMAT SHORT E Floating point format with 5 digits.
FORMAT LONG E Floating point format with 15 digits.
...
Esempio.
> > pi
ans =
3.1416
> > format long
16

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

> > pi
ans =
3.14159265358979
> > format short e
> > pi
ans =
3.1416e+00

Per poter eseguire dal prompt di Matlab una istruzione del sistema operativo in uso, `e sufficiente
digitarla preceduta da un punto esclamativo !.
Il simbolo % serve a commentare tutto quanto si trova alla sua destra sulla stessa riga.
y = sin(x); % questo e un commento

Tre punti consecutivi (...) rappresentano un simbolo di continuazione, per proseguire unistruzione
lunga alla riga successiva.
> > y = sin(x)+cos(x)-log(x)...
-exp(x);

17

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Matlab = MATrix LABoratory


Una delle prerogative di Matlab consiste nella possibilit`a di eseguire tutte le operazioni fondamentali
(e non) direttamente su matrici e vettori senza la necessit`a di implementarle attraverso cicli for che ne
scandiscano tutti gli elementi.
Inoltre `e dotato di moltissime routine specializzate per il calcolo scientifico e in particolare per lalgebra
lineare.
Nel seguito useremo il termine array per riferirci indifferentemente ad un vettore o ad una
matrice.Loggetto su cui lavora Matlab `e un array.
Parlare in termini di array consente di trattare in modo unificato diversi argomenti che seguono.
Scalare array 1x1
Vettore array 1xn (vettore riga) o nx1 (vettore colonna).

18

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Costruzione di array - Assegnazione per elementi


Contrariamente a quanto accade in molti linguaggi di programmazione, non `e necessario dimensionare
a priori gli array: la loro dimensione sar`a automaticamente stabilita nel corso dellassegnazione e potr`a
essere in seguito eventualmente aumentata aggiungendo altre righe e/o colonne.
Il modo pi`
u semplice di costruire un array consiste nellassegnazione per elementi:si elencano gli elementi
uno per uno racchiudendoli fra parentesi quadre e separandoli con uno spazio o una virgola:
> > nomevettore = [elemento1 elemento2 ...

elementon]

> > x = [1 2 4];


> > y = [2,3,4];

I vari elementi possono essere valori costanti, nomi di variabile gi`a assegnati o espressioni.
>
>
>
x

> a = 2;
> b = 3;
> x = [1 a 1 b]
=
1
2
1
3
19

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Per assegnare ad una variabile un vettore colonna si pu`


o far seguire unassegnazione come la precedente
dal carattere apice, che rappresenta loperatore di trasposizione (help transpose):
> > x = [1 a 1 b]
x =
1
2
1
3
Altrimenti, un vettore colonna pu`
o essere assegnato direttamente usando una sintassi del tipo
> > nomevettore = [elemento1; elemento2; ...

elementon]

(il carattere ; indica il termine di una riga di un array; si pu`


o anche usare il tasto invio).
> > z = [a; a; b]
z =
2
2
3

20

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

N.B. Nellassegnazione di un array il carattere spazio `e sempre interpretato come il separatore tra due
elementi. Si osservino ad esempio le seguenti istruzioni:
> >
x =
1
> >
y =
1
> >
z =
1

x = [1 2 3+4]
2

y = [1,2,3+4]
2

z = [1,2,3 +4]
2

Per fare riferimento alla componente di indice i di un vettore si usa la sintassi nomevettore(i). In
Matlab non sono ammessi indici nulli o negativi, per fare riferimento alle componenti di un array.

21

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Assegnazione per elementi di matrici


Lo stesso principio vale per assegnare delle matrici: caratteri su una stessa riga si separano con uno
spazio o una virgola; le righe si terminano con un carattere ; o andando a capo.

Esempio.
> > A = [ 1 2; 3 4]
assegna

A=

1
3

2
4

> > B = [ 1 , 1, 2; pi pi 7]
assegna

B =

2
7

22

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

` possibile assegnare matrici rettangolari con un numero arbitrario di righe e di colonne; lunico vincolo
E
`e ovviamente costituito dal fatto che ogni riga (e ogni colonna) deve avere la stessa lunghezza.
Esempio. > > B = [ 1 2; 3] Errore!
Per indicare lelemento ij di una matrice, si usa la sintassi nomematrice(i,j).
trasposizione pu`o ovviamente essere usato anche per matrici.

Loperatore di

Esempio.
> > A = [1 1;2 2]
A =
1
1
2
2
> > B = A
B =
1
2
1
2
Il comando B = transpose(A) ha lo stesso effetto.

23

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Costruzione di array - Assegnazione a blocchi


Lassegnazione a blocchi `e analoga a quella per elementi: ogni elemento pu`
o a sua volta essere
un array, anziche un valore scalare. Nel rispetto delle dimensioni complessive dellarray, si possono
combinare a piacimento scalari, vettori e matrici.Per separare i blocchi su una stessa riga si usa sempre
una virgola o uno spazio, per separare blocchi su righe diverse si usa un punto e virgola o si va a capo.
Esempio. Siano assegnati nel workspace i vettori x = [1 2] e y = [3 4].

z = [x y x] genera il vettore z = (1, 2, 3, 4, 1, 2)


B = [x; x] genera la matrice

1 2
B =
1 2
C = [y B; 5 6 7] genera la matrice
0
1
3 1 2
C =@ 4 1 2 A
5 6 7
u = [y x] `e errata!
u = [B; z] `e errata!

24

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

N.B. Poiche non `e necessario dimensionare a priori gli array (Matlab effettua allocazione dinamica
della memoria), non esiste nessuna contraddizione nelle seguenti due istruzioni, eseguite nellordine:
> > A = 1;
> > A(2,2) = 3;
Ad A verr`a assegnata la matrice

1 0
A=
.
0 3
Se le istruzioni sono immesse nellordine inverso, con la prima si assegna alla variabile A la seguente
matrice:

0 0
A=
0 3
mentre con la seconda si cancella completamente il vecchio contenuto di A e le viene assegnato il
valore scalare 1.
N.B. Se ad un array gi`a allocato si vuole assegnare un array di dimensioni inferiori `e opportuno usare
prima il comando clear.

25

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Costruzione di array - Routine predefinite


Com`e possibile generare array particolari, anche di grandi dimensioni?
Esistono molte routine predefinite.Partiamo dai vettori.

colon Genera vettori di valori equispaziati compresi fra due valori estremi assegnati. La forma
abbreviata usa il simbolo : (due punti).
> > a:b
genera il vettore (a, a + 1, a + 2, ..., a + m), dove m `e la parte intera di b a. Se a > b, il
comando genera un vettore vuoto.
Esempio.
> > x = 3:6
x =
3
4
5
> > y = -4:2
y =
-4 -3 -2

-1

26

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Pi`
u in generale, si pu`o specificare la spaziatura da usare tra i valori:
> > a:d:b
genera il vettore (a, a + d, a + 2d, ..., a + md), con m parte intera di (b a)/d; d pu`
o essere
arbitrario (< 0, non intero); se a > b e d > 0 o se a < b e d < 0 viene generato un vettore
vuoto.
Esempio.
> > x
x =
3
> > y
y =
3
> > z
z =
20
> > w
w =
0.0

= 3:2:9
5
7
= 3:2:10

5
7
9
= 20:-5:0
15 10
5
= 0:0.1:0.5
0.1

0.2

0.3

0.4

0.5

27

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Le due istruzioni precedenti possono anche essere scritte colon(a,b) e colon(a,d,b),


rispettivamente.
N.B. Sono molte le routine di Matlab che accettano in entrata un numero di argomenti variabile.

linspace Genera un vettore di valori equispaziati compresi fra due estremi assegnati; la differenza
con colon `e che a linspace non si specifica il passo ma il numero totale di punti che si desidera.
> > linspace(a,b,n)
genera un vettore di n valori equispaziati compresi fra a e b, estremi inclusi.
Esempio.
> > x = linspace(-2,4,7)
x =
-2 -1 0 1 2 3 4
Se n viene omesso il valore di default usato `e 100.

28

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Routine predefinite per assegnazione di matrici


eye(n) genera la matrice identit`a di ordine n
> > B = eye(2)
B =
1
0
0
1

zeros(m,n) genera una matrice di m righe e n colonne i cui elementi sono tutti uguali a 0
> > B = zeros(2,3)
B =
0
0
0
0
0
0

ones(m,n) come zeros, ma tutti gli elementi della matrice sono uguali a 1
rand(m,n) genera una matrice di numeri pseudo-casuali con distribuzione uniforme; senza argomenti
in entrata genera un solo numero pseudo-casuale
29

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

N.B. A zeros, ones, rand si pu`


o passare un solo argomento; in questo caso si genera una matrice
quadrata che ha per ordine largomento in ingresso e non un vettore; per ottenere un vettore di n
componenti occorre ad esempio usare il comando zeros(1,n) o zeros(n,1).
Un array pu`o ovviamente venire assegnato anche elemento per elemento, utilizzando uno o pi`
u cicli for
come nella maggior parte dei linguaggi di programmazione.

30

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Sottomatrici
Una volta che un array `e assegnato nel workspace, `e possibile fare riferimento ad una qualunque sua
sottomatrice in modo estremamente agevole.
Per estrarre da un array A di m righe e n colonne soltanto certi elementi che formano una sottomatrice,
`e sufficiente usare la sintassi seguente:
> > A(ir,ic)
dove ir ed ic sono due vettori contenenti gli indici che corrispondono, rispettivamente, alle righe e alle
colonne da selezionare per estrarre la sottomatrice.
Esempi.

Per estrarre la sottomatrice di testa di ordine 2 di A A([1 2],[1 2]) o A(1:2,1:2)


Per estrarre una sottomatrice costituita dalle prime tre colonne di A ma contenente tutte le righe
A(1:m,1:3) o A(:,1:3).
Per rappresentare solo la riga i-esima di A A(i,1:n) o A(i,:)
B = A([2 2 2 5],:) costruisce una matrice B di 4 righe e n colonne avente le prime tre righe tutte
uguali alla seconda riga di A e la quarta riga uguale alla quinta di A.
31

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Un tipo di notazione analogo vale per i vettori.


Sia v un vettore (riga o colonna, indifferentemente) di n elementi.
Esempi.

w = v(1:5) crea un vettore w di cinque elementi uguali ai primi 5 elementi di v.


z = v(n-4:n) crea un vettore z i cui elementi saranno gli ultimi 5 elementi di v.
Se v `e un vettore riga (colonna), anche w e z saranno vettori riga (colonna).

32

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Operazioni su array - Operatori algebrici


` possibile effettuare in modo trasparente tutte le usuali operazioni elementari ben definite tra matrici,
E
vettori e scalari:

prodotto righe per colonne;


prodotto di uno scalare per un array;
somma di array.
Sia un qualunque operatore binario per il quale loperazione A B fra due array A e B `e definita.
La sintassi per effettuare loperazione in Matlab `e semplicemente
>> A B
Esempi
A*B Se il numero di colonne di A `e uguale al numero di righe di B , fornisce il prodotto righe per
colonne C = AB ;come caso particolare, si osservi che se x e y sono due vettori colonna, x*y
fornisce il prodotto scalare xT y .
33

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

a*B,B*a Se a `e uno scalare e B un array di qualsiasi dimensione, fornisce larray C avente le stesse
dimensioni di B e ottenuto moltiplicando ogni elemento di B per a: cij = a bij .Un discorso
analogo vale per loperazione B/a.
A^m Se A `e una matrice quadrata e m un intero, fornisce il prodotto righe per colonne di A per se
stessa m volte.
AB Se A e B sono due array della stessa dimensione, fornisce la loro somma/differenza A B .
aB,Ba Se a `e uno scalare e B un array di qualsiasi dimensione, fornisce larray C con le stesse
dimensioni di B ottenuto sommando/sottraendo ad a ogni elemento di B : cij = a bij .
Ogni tentativo di usare in modo inappropriato gli operatori (ad esempio, se le dimensioni degli operandi
non sono compatibili) produce un messaggio di errore.
In aggiunta agli operatori precedenti, menzioniamo lutilissimo operatore \ (help slash).
Esercizio Studiare lhelp per capirne il funzionamento.

34

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Operazioni elemento per elemento


Ognuno degli operatori +, -, *, / pu`
o essere usato applicandolo anche elemento per elemento ad
array delle stesse dimensioni usando la cosiddetta sintassi del punto.
Se `e uno degli operatori binari sopra citati e A e B sono due array con uguali dimensioni, con la
sintassi
> > A . B
si crea un terzo array, con le stesse dimensioni di A e di B , il cui elemento di posizione ij `e dato
dallespressione
aij bij .

35

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Esempio. Se A e B contengono rispettivamente le seguenti matrici

A=

2
4

3
5

B =

1
0

0
1

sono ben definite le operazioni


e

> > C = A*B

C =

2
4

3
5

> > D = A.*B

D=

2
0

0
5

Certe operazioni (come la somma e la sottrazione) sono in realt`a gi`a applicate elemento per elemento;
luso della sintassi del punto `e in tal caso ridondante, anche se non errato.
Esempio.

le espressioni A.+B e A.-B hanno lo stesso significato di A+B e A-B, rispettivamente;


se a `e uno scalare e B un array di dimensioni arbitrarie, le espressioni a.+B e a.*B sono equivalenti,
rispettivamente, ad a+B e a*B.
36

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Anche loperatore ^ pu`o essere applicato elemento per elemento ad un array eventualmente rettangolare
usando ancora la sintassi del punto: dati un array A di dimensioni arbitrarie e uno scalare m, con
> > A.^m
si genera una matrice con le stesse dimensioni di A il cui elemento di posizione ij `e dato dallespressione
m

aij .

Esempio. Sia A una variabile a cui `e assegnata la matrice

A=
B = A^2 errore
B = A.^2

B =

1
4

1
16

2
5

4
25

3
6

9
36

37

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Funzioni elementari
La maggior parte delle funzioni elementari (funzioni trigonometriche, funzione esponenziale, logaritmo
naturale, in base 2 e in base 10...) sono gi`a predefinite in Matlab (help elfun).
Caratteristica comune delle funzioni elementari `e che possono essere applicate direttamente ad un array
di qualunque dimensione. Il risultato in uscita `e un array con le stesse dimensioni di quello fornito in
ingresso, ottenuto applicando la funzione elemento per elemento allarray di partenza.
Esempio.
> > x = 1:10;
> > y = cos(x);
y conterr`a un vettore riga di 10 elementi il cui elemento i-esimo sar`a yi = cos xi, i = 1, ..., 10.
> > x = rand(4,7);
> > y = exp(x);
y conterr`a un array di 4 righe e 7 colonne in cui yij = exij , i = 1, ..., 4, j = 1, ..., 7.

38

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Strumenti per lalgebra lineare


Matlab ha a disposizione una notevole libreria di funzioni per effettuare molte operazioni di uso comune
su matrici ( help matfun):

calcolo del determinante e della traccia


calcolo degli autovalori
calcolo di alcune norme di vettori e matrici (norma 1, 2, , Frobenius)
calcolo del numero di condizionamento
calcolo di alcune fattorizzazioni (P A = LU , Cholesky, QR...)
...
Le funzioni richiedono in ingresso uno o pi`
u argomenti e restituiscono in uscita uno o pi`
u argomenti.
Possono essere usate richiamandole dal prompt o inserendole in unespressione o assegnandone il risultato
ad una variabile.
Esempio. La funzione det calcola il determinante di una matrice quadrata. Sia A una variabile attiva
in cui `e memorizzata una matrice quadrata
> > det(A)

> > d = det(A)

> > x = det(A)2-5*det(A)+1


39

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Esempio. Il raggio spettrale (A) di una matrice quadrata A di ordine n `e definito come segue:

(A) = max |i(A)|.


1in

Vogliamo calcolare (A). Esistono le seguenti funzioni predefinite:

eig: calcola gli autovalori di una matrice (eig(A)); restituisce in uscita un vettore contenente gli
autovalori;
max: passandogli in ingresso un vettore, calcola il valore della componente massima del vettore;
abs: passando in ingresso un array, calcola il modulo di ogni elemento; restituisce in uscita i valori
calcolati in un array con le stesse dimensioni di quello passato in ingresso.
> > x = eig(A);
> > y = abs(x);
> > rho = max(y);

o in modo ancora pi`


u compatto con lunica istruzione
> > rho = max(abs(eig(A)));
40

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Argomenti in ingresso e uscita


Una function pu`o prevedere pi`
u argomenti in uscita. In una istruzione di assegnazione questi dovranno
essere racchiusi fra parentesi quadre.
Esempio. La funzione lu calcola la fattorizzazione P A = LU di una matrice A assegnata. Si ottiene
in uscita i fattori L e U e la matrice di permutazione P. La chiamata:
> > [L,U,P] = lu(A)
N.B. Molte funzioni predefinite di Matlab possono fornire risposte differenti a seconda di come
vengono richiamate dallutente.
Esempio. La funzione eig calcola e resituisce gli autovalori... come li restituisce? Fa altro?

e = eig(A) la variabile in uscita e sar`a un vettore contenente gli autovalori di A;


[V,D] = eig(A) la variabile D sar`a una matrice diagonale con gli autovalori sulla diagonale, la
variabile V sar`a una matrice le cui colonne saranno gli autovettori.

HELP

Morale:
(che non `e un grido di disperazione ma un aiuto fondamentale...)

41

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Costrutti sintattici - Ciclo for


Sintassi semplificata:
for variabile = inizio:incremento:fine
blocco istruzioni
end
Lincremento pu`o essere omesso, in tal caso il valore di default `e 1.
Esempio.
> > S = 0;
for i = 1:100
S = S+i;
end
Per interrompere forzatamente un ciclo for prima del termine, si pu`
o usare il comando break.
Se il comando `e usato allinterno di due cicli annidati, il comando interrompe il ciclo pi`
u interno.
N.B. Il precedente `e in realt`a un uso semplificato del ciclo for.

42

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

La sintassi corretta `e
for variabile = espressione
blocco istruzioni
end
dove espressione `e in generale un array. Leffetto del costrutto `e di assegnare, ad ogni ripetizione del
ciclo, a variabile una delle colonne di espressione e di ripetere quindi il blocco di istruzioni tante
volte quante sono le colonne di espressione.
Le due sintassi non sono in contraddizione, la prima `e un caso particolare di questa, basta ricordare
che 1:100 genera un vettore riga contenente i numeri da 1 a 100 intervallati di 1!
Esempio. Ricordando che listruzione 0:2:m genera un vettore riga contenente valori compresi fra 0 e
m intervallati di due unit`a, il seguente ciclo ripeter`a il blocco di istruzioni per j = 0, 2, 4, ..., m:
> > for j = 0:2:m
.
.
.
end

43

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Un uso meno familiare `e il seguente.


Esempio.
> > S = 0;
for i = [1 15 100]
S = S+i;
end
Essendo [1 15 100] un vettore riga, la variabile i assumer`a successivamente i valori 1, 15, 100 e quindi
il blocco di istruzioni sar`a ripetuto tre volte; al termine del ciclo la variabile S varr`a 116.
Se invece consideriamo il ciclo seguente
> > S = 0;
for i = [ 1 15 100]
S = S+i;
end
questa volta lespressione [1 15 100] `e costituita da un vettore colonna; alla variabile i viene assegnato
quindi una sola volta il vettore colonna [1 15 100] e il blocco di istruzioni verr`a eseguito una volta;
la variabile S al termine conterr`a il vettore [1 15 100].
44

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

La logica in Matlab
Premessa: Matlab non ha variabili di tipo logico.
Matlab gestisce espressioni di tipo logico usando le variabili numeriche.
Il valore falso `e rappresentato dal numero 0, mentre qualsiasi numero non nullo (generalmente 1)
rappresenta il valore vero.
` possibile effettuare confronti fra espressioni attraverso i seguenti operatori relazionali (help relop).
E
Simbolo

Nome

Descrizione

==
=
<
>
<=
>=

eq
ne
lt
gt
le
ge

uguale
diverso
minore
maggiore
minore o uguale
maggiore o uguale

45

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Il risultato di un confronto fra due valori `e quindi a sua volta un valore numerico.
Esempio. Lespressione 1==2 ha valore 0. Lespressione 1<2 ha valore 1.
Gli operatori relazionali si applicano anche ad array con le stesse dimensioni. Il confronto viene effettuato
elemento per elemento. Il risultato sar`a un terzo array con le stesse dimensioni dei due su cui si `e
operato il confronto, in cui ogni elemento sar`a dato dallesito del confronto corrispondente.
Esempio. Assegnati i vettori x=[1 2 3] e y =[3 3 3], il risultato dellespressione
> > x==y
non `e 0, ma `e il vettore [0 0 1].
Se gli operatori vengono usati fra uno scalare a ed un array B, il risultato sar`a un array con le stesse
dimensioni di B, contente il risultato del confronto fra a e ciascun elemento di B.
Esempio. Se x `e definito come nellesempio precedente, lespressione
> > 2.7>x
avr`a valore [1 1 0].

46

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Connettivi logici
(help relop).
Simbolo

Nome

Descrizione

&
|

xor

and
or
not
xor

and
or
negazione
or esclusivo

any applicato ad un vettore restituisce il valore vero se almeno uno degli elementi del vettore `e uguale
a zero. Applicato ad una matrice, opera sulle colonne della matrice (ovvero effettua il confronto
colonna per colonna, restituendo un vettore riga con i corrispondenti risultati).
all come any, ma controlla che tutti gli elementi del vettore siano uguali a zero.

47

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Costrutto if
if espressione 1
blocco 1
elseif espressione 2
blocco 2
.
.
.
elseif espressione n-1
blocco n-1
else
blocco n
end
I blocchi elseif possono anche non essere presenti, cos` come pu`
o mancare anche il blocco else.

48

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Istruzione while
while espressione
blocco di istruzioni
end
Il blocco di istruzioni viene eseguito finche la condizione `e vera, ovvero fintanto che lespressione ha
valore diverso da 0.
Anche in questo caso si pu`o usare il comando break per interrompere forzatamente il ciclo while
(quindi per uscire dal ciclo anche se espressione continua ad essere vera).

49

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

M-files
Per ora abbiamo supposto di inserire le istruzioni al prompt.
Come strutturare le istruzioni in file?
I file di istruzioni Matlab vengono chiamati generalmente m-files. Sono di due tipi: script e function.
script
Uno script `e un file di testo contenente una sequenza di comandi.
Lestensione del file deve essere .m, mentre per il nome valgono le stesse regole viste per i nomi di
variabile.
Il file deve essere salvato nella directory di lavoro.
Per usare lo script `e sufficiente digitare al prompt il nome del file, omettendo lestensione .m.
N.B. Le istruzioni contenute nello script devono essere tali e quali quelle che digiteremmo al prompt.
Ogni variabile a cui si fa riferimento nello script deve essere gi`
a attiva prima di eseguirlo.

50

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Function
La prima riga di una function ha la seguente struttura:
function [y1,y2,...,yn] = nomefunzione(x1,x2,...,xm)
y1,y2,...,yn: variabili in uscita
x1,x2,...,xm: variabili in ingresso.
` opportuno (obbligatorio, in versioni vecchie di Matlab) salvare ogni function su un file distinto,
E
sempre con estensione .m. Il nome della function deve coincidere con il nome dellm-file (estensione
esclusa).
Dopo lintestazione `e utile inserire delle righe di commento (%). I commenti inseriti immediatamente
dopo lintestazione faranno parte dellhelp in linea di Matlab.
La function al suo interno pu`
o usare anche variabili di appoggio non elencate nellintestazione. Ogni
variabile che non compaia nellelenco dei parametri in ingresso sar`a solo locale.

51

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Una function si pu`o usare dal prompt, allinterno di uno script o di unaltra function. Chiamata:
> > [y1,y2,...]

= nomefunzione(x1,x2,...)

Alle variabili y1, y2,... verranno assegnati i valori in uscita e tali valori saranno visibili nel workspace.
I parametri in uscita possono anche essere omessi, in tutto o in parte:
>>
>>
>>
>>

[y1,y2] = nomefunzione(x1,x2,...);
y1 = nomefunzione(x1,x2,...);
nomefunzione(x1,x2,...);
nomefunzione(x1,x2,...)

Esempio. In Matlab sono disponibili le seguenti funzioni predefinite: log(x) (logaritmo naturale),
log2(x) (logaritmo in base 2), log10(x) (logaritmo in base 10). Si vuole scrivere una function che
permetta di calcolare loga x per un qualsiasi a > 0, a 6= 1, e x > 0 sfruttando la formula
logc x
loga x =
logc a

52

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

function [y,mess] = mylog(a,x)


%
% Uso:
[y,mess] = mylog(a,x)
%
% Input: a (base del logaritmo)
%
x (argomento del logaritmo)
% Output: y = log_a(x) se loperazione e ben definita,
%
ERRORE altrimenti
%
mess = OK se loperazione e ben definita,
%
ERRORE altrimenti
% Se x>0 e a>0, a~=1 calcola il logaritmo in base a di x,
% ne assegna il valore ad y e assegna a mess la stringa OK.
% Altrimenti, assegna sia a mess che a y il messaggio ERRORE.
%
if x>0 & a>0 & a~=1
y = log(x)/log(a);
mess = OK;
else
y = ERRORE;
mess=ERRORE;
end

53

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Possiamo usare mylog richiamandola in uno dei seguenti modi:


> > mylog(3,27)
> > y = mylog(3,27)
> > [y, mess] = mylog(3,27)
` possibile definire funzioni a cui si possa fornire un numero variabile di argomenti in ingresso e/o in
E
uscita, comportandosi diversamente a seconda di quanti sono i valori specificati in ingresso e/o uscita
(come linspace(0,1) e linspace(0,1,25)).
nargin `e una variabile locale sempre definita in ogni function. Viene posta automaticamente uguale al
numero di parametri in ingresso con cui si `e effettuata la chiamata alla funzione.
nargout `e una variabile locale posta uguale al numero di parametri in uscita con cui `e stata richiamata
la funzione.
Se si `e definita una function di nome pippo, il comando nargin(pippo) restituisce il numero di
argomenti dichiarati in ingresso, nargout(pippo) restituisce il numero di argomenti dichiarati in
uscita.

54

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Funzioni definite dallutente


Come definire una funzione f (x) da valutare allinterno di espressioni?
Esempio. f (x) = x3 log x
inline Definizione:
f = inline(x.^3-log(x))
Uso:
> > f(7), > > y=f(7)
eval Definizione:
f = x.^3-log(x)
Uso:
> > x = 7; eval(f)
feval Definizione: la funzione f viene definita in una function di nome funz.m:
function [y] = funz(x)
y = x.^3 - log(x);
Uso: tramite il comando feval
> > y = feval(funz,4)

55

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

function come argomento in ingresso


Come passare una function come argomento in ingresso ad unaltra function?
Esempio. Si vuole scrivere una function di nome integra che approssimi con una formula di quadratura
lintegrale definito di una funzione f su un intervallo [a, b], passando in ingresso a, b, f .
1. Definiamo la funzione f in una function funz.m.
2. Definiamo la function integra mettendo tra gli argomenti in ingresso un parametro formale
(nomefunzione):
function [I] = integra(a,b,nomefunzione)
3. Nel corpo di integra, useremo il comando feval per valutare nomefunzione in corrispondenza di
un valore assegnato:
feval(nomefunzione,a)
4. Per richiamare la funzione integra passando come argomento in ingresso funz, useremo una delle
sintassi seguenti:
> > integra(0,2,funz)
> > integra(0,2,@funz)

56

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Grafica
Matlab `e uno strumento versatile per tracciare molti tipi di grafici differenti (curve in 2D, curve in 3D,
superfici in 3D, curve di livello, grafici di tipo statistico...).
figure Apre una nuova finestra.
hold on Permette di tracciare due grafici sovrapposti sulla stessa figura (hold off annulla).
plot Se y `e un vettore, plot(y) traccia in un grafico i punti di coordinate (i, yi), unendoli con una
linea spezzata.
Se abbiamo anche a disposizione il vettore x delle ascisse xi corrispondenti, plot(x,y) traccia i
punti (xi, yi) uniti con una spezzata.
plot(x,y,s) sceglie il colore, tipo di riga, indicatore...
ttraverso la stringa s (es.
plot(x,y,r:o)).
plot(x1,y1,s1,x2,y2,s2,...) traccia pi`
u grafici nella stessa finestra.
subplot Permette di tracciare pi`
u grafici in aree separate di una sola finestra.
loglog,semilogx,semilogy Come plot, ma usano scale (semi-)logaritmiche.
ezplot Si passa in ingresso lespressione della funzione di cui si vuol tracciare il grafico sotto forma di
stringa:
ezplot(log(x))
ezplot(log(x),[2 4]) specifica lintervallo di variabilit`a della x (default: (2, 2)).
57

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

plot3 Traccia curve: se x, y, z sono tre vettori della stessa lunghezza, plot3(x,y,z) traccia il grafico
ottenuto congiungendo i punti (xi, yi, zi).
ezplot3 Versione facilitata di plot3:
si passano in ingresso le equazioni parametriche
(x(t), y(t), z(t)) della curva, es. ezplot3(cos(t),sin(t),t). Il dominio di default `e
t [0, 2] e pu`o essere cambiato.
ezmesh, ezsurf Tracciano superfici in 3D passando in ingresso una stringa che contiene una funzione
in due variabili.
mesh, surf Tracciano superfici note per punti.
xlabel, ylabel, title, legend... vasta gamma di possibilit`a di intervento per migliorare laspetto
delle figure.

58

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Input & Output


input permette di immettere un valore da tastiera assegnandolo ad una variabile:
> > var = input(Messaggio da mostrare sul display);

disp mostra largomento (una variabile o una stringa) sul display


> > disp(argomento)
La funzione richiede un solo argomento in ingresso.

sprintf consente di produrre output formattato attraverso una stringa di formattazione.


specificatori di formato sono gli stessi del linguaggio C per le funzioni printf e scanf.

Gli

Esempio.
>> k = 3;
>> s = sprintf(Variabili:\tk=%d,\tpi=%.2f,\teps=%E\n,k,pi,eps);
>> disp(s)
Variabili:
k=3,
pi=3.14,
eps=2.220446E-16

fopen, fclose, fprintf, fscanf: aprono e chiudono file, scrivono e leggono dati formattati su e
da file.

59

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Flops e tempi di calcolo


Per misurare il tempo necessario ad eseguire un certo blocco di istruzioni:
tic;
blocco di istruzioni
toc;

tic;
blocco di istruzioni
t = toc;
Nelle versioni di Matlab precedenti alla 6 era possibile usare anche il comando flops, che contava le
operazioni floating point effettuate.

60

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

Le strutture
` possibile raggruppare variabili di tipo diverso in un unico oggetto detto struttura.
E
Esempio.
>>
>>
>>
>>
>>

parametri.delta_x = 0.01;
parametri.delta_t = 0.001;
parametri.c1 = 3.4;
parametri.alpha = 1;
parametri.choice = test number 1;

Il nome della struttura `e parametri.


Si accede ai vari campi con loperatore punto esattamente come per lassegnazione:
>> parametri.alpha
ans =
1
61

Dipartimento di Matematica - Politecnico di Torino

Calcolo Numerico - Introduzione a MATLAB

` possibile creare vettori di strutture.


E
>> parametri(1).alpha = 2;
>> parametri(1).delta_x = 0.01;
>> parametri(2).c1 = 0.5;
Il contenuto del secondo elemento del vettore parametri sar`a:
>> parametri(2)
ans =
alpha: []
delta_x: []
c1: 0.5

I campi non assegnati ma presenti nella struttura vengono visualizzati come matrici vuote ([]).

62