Sei sulla pagina 1di 23

Introduzione allutilizzo di MATLAB

A cura delling. R. Ronchini

Versione del Novembre 2002

Contenuto della lezione 1


1. Introduzione
Generalit e definizione di vettori e matrici
Variabili, espressioni numeriche e funzioni base.
Operatore di assegnazione =.
Funzioni di utilizzo generale: help, lookfor, whos, clear, dir, cd, clc
2. Calcolo Matriciale
Generazione di matrici
Utilizzo degli indici
Operatore : (colon)
Funzioni pi comuni : (transpose), sum, det, diag, eig, eye, rank, trace, inv, poly
Concatenazione di matrici e vettori
Eliminazione di righe e colonne
Operazioni tra matrici e vettori, funzioni fondamentali: +, -, .*, ./, .^
Funzioni particolari: espansione scalare e indicizzazione logica
Creazione di matrici multidimensionali: funzioni squeeze, reshape, shiftdim
3. Tracciamento di Grafici
Tracciare il grafico di una funzione, operatore plot
Utilizzo delle finestre e dei comandi integrati
Funzioni correlate: hold, zoom, grid, clf, figure, axis, xlabel, ylabel, title
Visualizzazione multipla, operatore subplot
Cenni sul tracciamento di grafici tridimensionali: funzioni plot3, mesh, surf, shading, colormap
4. Creazione di script MATLAB
Utilizzo delleditor integrato
Creazione ed esecuzione di script MATLAB
Debug dei programmi
5. Il MATLAB come linguaggio di programmazione
Il MATLAB come linguaggio di programmazione
Cenni sulle istruzioni per il controllo del flusso: costrutti if-then-else, switch-case, for-end, while-
end, break
1. Introduzione
MATLAB un ambiente di sviluppo per applicazioni di calcolo numerico. E possibile eseguire istruzioni MATLAB
attraverso due differenti modalit: script e linea di comando.
La modalit script consente di eseguire degli script MATLAB , ossia dei file (con estensione .m) di comandi MATLAB . Per
eseguire lo script dal nome prova.m sufficiente digitare prova (ossia il nome del file privato dellestensione .m) al
prompt della finestra linea di comando . Un file script di fatto un file ascii, quindi possibile crearne di nuovi
utilizzando un qualsiasi editor di testi di Windows (notepad, write, ecc.), anche se comunque consigliato usare leditor
integrato di MATLAB . Questo in grado di offrire numerosi vantaggi, tra i quali un ambiente di debug integrato ed
evidenziazione grafica sintattica.
Il MATLAB considera come struttura dati base la matrice, definita disponendo gli elementi tra parentesi quadre e
separando le righe da punti e virgola.

Ad esempio possibile definire la matrice quadrata A di ordine 2 con gli elementi 1 1 sulla prima riga e 1 1 sulla
seconda come:

A=[1 1;-1 1]
A =
1 1
-1 1

Linterprete MATLAB stampa sempre il risultato delloperazione (in questo caso la definizione della matrice A); possibile
disabilitare questa funzione semplicemente facendo terminare loperazione di assegnazione con il simbolo di punto e
virgola ;.

A=[1 1;-1 1];

E possibile richiamare ciascun singolo elemento di una matrice indicandone tra parentesi lindice di riga e colonna:

A(2,1)
ans =
-1

Analogamente, possi bile definire vettori riga e colonna:

a=[2 0]
a =
2 0
A
A =
1 1
-1 1

b=[-1;3]
b =
-1
3

b(2)
ans =
3

Ovviamente un vettore colonna pu anche essere definito come la trasposizione di un vettore riga; loperatore di
trasposizione in MATLAB lapice .

b=[-1 3]'
b =
-1
3

Attenzione: MATLAB case-sensitive, a e A sono due variabili diverse !

2
a=4
a =
4
A
??? Undefined function or variable 'A'.

MATLAB definisce con i o j lunit immaginaria, con Inf linfinito positivo, con NaN il risultato (numerico) di una
forma indeterminata e con pi la costante pi greco .

2/Inf
ans =
0
Inf*0
ans =
NaN

Il MATLAB mette a disposizione i classici operatori matematici:

2*5.6
ans =
11.2000
sqrt(3)
ans =
1.7321
sin(pi/2)
ans =
1

in particolare, le funzioni di approssimazione:

round(1.8)
ans =
2
round(1.2)
ans =
1
fix(1.8)
ans =
1
ceil(1.1)
ans =
2

Una operazione priva delloperatore di assegnazione assegna per default il risultato alla variabile di sistema ans

sqrt(3)
ans =
1.7321
r3=sqrt(3)
r3 =
1.7321

Listruzione help consente di ottenere una sintetica descrizione di una istruzione MATLAB , ad esempio

help plot

PLOT Linear plot.


PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix,
then the vector is plotted versus the rows or columns of the matrix,
whichever line up. If X is a scalar and Y is a vector, length(Y)
disconnected points are plotted.

PLOT(Y) plots the columns of Y versus their index.


If Y is complex, PLOT(Y) is equivalent to PLOT(real(Y),imag(Y)).
In all other uses of PLOT, the imaginary part is ignored.

3
()

Il solo comando help permette di avere informazioni sui principali moduli installati sui quali sar poi possibile avere
ulteriori informazioni.

help

HELP topics:

MATLAB\general - General purpose commands.


MATLAB\ops - Operators and special characters.
MATLAB\lang - Programming language constructs.
MATLAB\elmat - Elementary matrices and matrix manipulation.
MATLAB\elfun - Elementary math functions.
MATLAB\specfun - Specialized math functions.
MATLAB\matfun - Matrix functions - numerical linear algebra.
MATLAB\datafun - Data analysis and Fourier transforms.
MATLAB\polyfun - Interpolation and polynomials.
MATLAB\funfun - Function functions and ODE solvers.
MATLAB\sparfun - Sparse matrices.
MATLAB\graph2d - Two dimensional graphs.
MATLAB\graph3d - Three dimensional graphs.
MATLAB\specgraph - Specialized graphs.
MATLAB\graphics - Handle Graphics.
MATLAB\uitools - Graphical user interface tools.
MATLAB\strfun - Character strings.
MATLAB\iofun - File input/output.
MATLAB\timefun - Time and dates.
MATLAB\datatypes - Data types and structures.
MATLAB\winfun - Windows Operating System Interface Files (DDE/ActiveX)
MATLAB\demos - Examples and demonstrations.
toolbox\pde - Partial Differential Equation Toolbox.
toolbox\stats - Statistics Toolbox.
images\images - Image Processing Toolbox.
images\imdemos - Image Processing Toolbox --- demos and sample images
signal\signal - Signal Processing Toolbox.
signal\siggui - Signal Processing Toolbox GUI
signal\sigdemos - Signal Processing Toolbox Demonstrations
toolbox\splines - Spline Toolbox.
toolbox\optim - Optimization Toolbox.
toolbox\robust - Robust Control Toolbox.
toolbox\ident - System Identification Toolbox.
toolbox\control - Control System Toolbox.
control\ctrlguis - Control System Toolbox -- GUI support functions.
control\obsolete - Control System Toolbox -- obsolete commands.
stateflow\stateflow - (No table of contents file)
simulink\simulink - Simulink
simulink\blocks - Simulink block library.
simulink\simdemos - Simulink 3 demonstrations and samples.
simulink\dee - Differential Equation Editor
toolbox\tour - MATLAB Tour
MATLAB11\work - (No table of contents file)
toolbox\local - Preferences.

For more help on directory/topic, type "help topic".

Quindi, per conoscere quelle che sono le funzioni matematiche elementari del MATLAB basta digitare

help elfun

Elementary math functions.

Trigonometric.
sin - Sine.
sinh - Hyperbolic sine.

4
asin - Inverse sine.
asinh - Inverse hyperbolic sine.
cos - Cosine.
cosh - Hyperbolic cosine.
acos - Inverse cosine.
acosh - Inverse hyperbolic cosine.
tan - Tangent.
tanh - Hyperbolic tangent.
atan - Inverse tangent.
atan2 - Four quadrant inverse tangent.
atanh - Inverse hyperbolic tangent.
sec - Secant.
sech - Hyperbolic secant.
asec - Inverse secant.
asech - Inverse hyperbolic secant.
csc - Cosecant.
csch - Hyperbolic cosecant.
acsc - Inverse cosecant.
acsch - Inverse hyperbolic cosecant.
cot - Cotangent.
coth - Hyperbolic cotangent.
acot - Inverse cotangent.
acoth - Inverse hyperbolic cotangent.

Exponential.
exp - Exponential.
log - Natural logarithm.
log10 - Common (base 10) logarithm.
log2 - Base 2 logarithm and dissect floating point number.
pow2 - Base 2 power and scale floating point number.
sqrt - Square root.
nextpow2 - Next higher power of 2.

Complex.
abs - Absolute value.
angle - Phase angle.
complex - Construct complex data from real and imaginary parts.
conj - Complex conjugate.
imag - Complex imaginary part.
real - Complex real part.
unwrap - Unwrap phase angle.
isreal - True for real array.
cplxpair - Sort numbers into complex conjugate pairs.

Rounding and remainder.


fix - Round towards zero.
floor - Round towards minus infinity.
ceil - Round towards plus infinity.
round - Round towards nearest integer.
mod - Modulus (signed remainder after division).
rem - Remainder after division.
sign - Signum.

Il comando lookfor permette la ricerca a tutto campo di un particolare termine, ad esempio volendo cercare la funzione
che calcola gli autovalori di una matrice (autovalore = eigenvalue) possibile digitare:

lookfor eigenvalues
CONDEIG Condition number with respect to eigenvalues.
EIG Eigenvalues and eigenvectors.
EXPM3 Matrix exponential via eigenvalues and eigenvectors.
QZ QZ factorization for generalized eigenvalues.
EIGS Find a few eigenvalues and eigenvectors.
A2ODE Stiff problem, linear with real eigenvalues (A2 of EHL).
A3ODE Stiff problem, linear with real eigenvalues (A3 of EHL).
B5ODE Stiff problem, linear with complex eigenvalues (B5 of EHL).
D1ODE Stiff problem, nonlinear with real eigenvalues (D1 of EHL).
EIGSHOW Graphical demonstration of eigenvalues and singular values.

5
PDEEIGX Exact calculation of eigenvalues for a 2-by-2 matrix.
EIGFUN Function to return sorted eigenvalues (used in GOALDEMO).
DSORT Sort complex discrete eigenvalues in descending order.
ESORT Sort complex continuous eigenvalues in descending order.
QZEIG Computes the generalized eigenvalues of the pencil (A,E)
HANOWA Matrix whose eigenvalues lie on a vertical line.
LESP Tridiagonal matrix with real, sensitive eigenvalues.
TRIDIEIG Find a few eigenvalues of a tridiagonal matrix.

In particolare, il comando che ci interessa proprio eig !


Impararemo successivamente come usarlo.

Listruzione whos visualizza le variabili in memoria e le loro propriet:

whos
Name Size Bytes Class

A 2x2 32 double array


a 1x2 16 double array
ans 1x1 8 double array
b 2x1 16 double array
r3 1x1 8 double array

Grand total is 10 elements using 80 bytes

Le variabili vengono aggiunte in memoria man mano che sono definite, possono essere eventualmente rimosse tramite la
funzione clear. Se vogliamo rimuovere la matrice A:

clear A

whos
Name Size Bytes Class

a 1x2 16 double array


ans 1x1 8 double array
b 2x1 16 double array
r3 1x1 8 double array

Grand total is 10 elements using 80 bytes

clear a
whos
Name Size Bytes Class

A 2x2 32 double array


ans 1x1 8 double array
b 2x1 16 double array
r3 1x1 8 double array

Grand total is 8 elements using 64 bytes

Listruzione clear all pulisce tutta la memoria.

clear all
whos

Le funzioni dir e cd sono analoghe a quelle del DOS; in pi, quando vi sono parametri che contengono spazi, vanno
necessariamente rappresentate mediante la sintassi funzionale:

cd

c:\windows

cd c:\prova

6
dir

. .. Nuova cartella dati.txt

cd('Nuova cartella')
dir

. ..

Il comando clc pulisce la finestra di dialogo.

7
2. Calcolo Matriciale
Abbiamo gi visto come creare matrici in MATLAB . Definiamo M come la seguente matrice quadrata di ordine 3:

M=[1 0 -1;0 2 1;0 0 3]


M =
1 0 -1
0 2 1
0 0 3

E ovviamente possibile creare in MATLAB anche matrici rettangolari di dimensioni qualunque, o, come vedremo pi
tardi, anche matrici multidimensionali.

Lavorando sugli indici possibile operare lestrazione di una sottomatrice di M:

M(1:2,2:3)
ans =
0 -1
2 1

la sottomatrice ottenuta considerando le prime due righe e le ultime due colonne di M.

Come abbiamo gi visto, loperatore colon (:) serve a definire intervalli. Pu essere utile per creare un vettore scegliendo
gli estremi ed il passo. Ad esempio, il vettore le cui componenti sono i valori compresi tra 0 e 2 con passo 0.1 definito
come:

a=[0:0.1:2]
a =
Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
Columns 8 through 14
0.7000 0.8000 0.9000 1.0000 1.1000 1.2000 1.3000
Columns 15 through 21
1.4000 1.5000 1.6000 1.7000 1.8000 1.9000 2.0000

Quindi il vettore cos definito contiene tutti i reali tra 0 e 2 con passo 0.1.

Per operare unestrazione del sottovettore di indici 2-6, necessario scrivere:

a(2:6)
ans =
0.1000 0.2000 0.3000 0.4000 0.5000

Per ordinare il vettore in ordine decrescente necessario specificare un passo negativo:

b=[2:-0.1:0]
b =
Columns 1 through 7
2.0000 1.9000 1.8000 1.7000 1.6000 1.5000 1.4000
Columns 8 through 14
1.3000 1.2000 1.1000 1.0000 0.9000 0.8000 0.7000
Columns 15 through 21
0.6000 0.5000 0.4000 0.3000 0.2000 0.1000 0

Sono diversi e molto utili gli operatori matriciali che il MATLAB mette a disposizione:, ne elenchiamo alcuni.

Trasposizione (lo abbiamo gi visto precedentemente).


Definiamo la matrice B.

B=[1 0 -1;0 1 1;0 0 1]


B =
1 0 -1
0 1 1
0 0 1

8
Calcoliamone la trasposta Bt.

Bt=B'
Bt =
1 0 0
0 1 0
-1 1 1

Somma degli elementi di un vettore (o di una matrice), funzione sum.

v=[1 0 -1 2 1 4 2]
v =
1 0 -1 2 1 4 2
sum(v)
ans =
9

La funzione sum pu essere impiegata anche nel caso di matrici, specificando se la somma va estesa alle righe o alle
colonne della matrice. Chiaramente tale operatore, se applicato ad una matrice, restituisce un vettore.

sum(B,2)
ans =
0
2
1

Estrazione degli elementi della diagonale.


Definiamo A come:

A=[1 0 -1;1 2 -1;2 0 -2]


A =
1 0 -1
1 2 -1
2 0 -2

Gli elementi sulla diagonale di A sono:

diag(A)
ans =
1
2
-2

Calcolo degli autovalori


Gli autovalori di A, appena definita, si calcolano immediatamente con la funzione eig:

eig(A)
ans =
2
0
-1

Generazione di matrici particolari.


La matrice identica di ordine i si definisce con eye:
eye(5)
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

Analogamente le matrici nulle con zeros:

9
zeros(3,2)
ans =
0 0
0 0
0 0

Numeri (o matrici di numeri) random possono essere generati con le funzioni rand (distribuzione uniforme) e randn
(distribuzione normale). Ad esempio la matrice R 3x6 di numeri casuali distribuiti normalmente pu essere definita
come:

R=randn(3,6)
R =
-0.4326 0.2877 1.1892 0.1746 -0.5883 0.1139
-1.6656 -1.1465 -0.0376 -0.1867 2.1832 1.0668
0.1253 1.1909 0.3273 0.7258 -0.1364 0.0593

Rango e traccia della matrice A sopra definita possono essere calcolati come:

Calcolo del rango, funzione rank.


rank(A)
ans =
2

Traccia, funzione trace.


trace(A)
ans =
1

Matrice inversa.
Loperatore di inversione di una matrice inv:

B=[1 0 -1;0 1 1;0 0 2]


B =
1 0 -1
0 1 1
0 0 2

inv(B)
ans =
1.0000 0 0.5000
0 1.0000 -0.5000
0 0 0.5000

Polinomio caratteristico
Come vedremo meglio successivamente, MATLAB consente la definizione di polinomi, per applicazioni generiche e per le
procedure di interpolazione.
MATLAB definisce un polinomio racchiudendo in un vettore i coefficienti in ordine di potenza decrescente; un polinomio
di ordine N quindi rappresentato da un vettore di ordine N+1, lultimo elemento del vettore rappresenta il termine
noto del polinomio. Ad esempio s4-2s3+4s2-5s+1 rappresentato dal vettore [1 2 4 5 1].
Il polinomio caratteristico di una matrice pu essere calcolato con la funzione poly:

A
A =
1 0 -1
1 2 -1
2 0 -2

poly(A)
ans =
1 -1 -2 0

Applicato ad un vettore, la funzione poly restituisce i coefficienti del polinomio le cui radici sono le componenti del
suddetto vettore. Nellesempio che segue, 2 0 e 1 sono gli autovalori della matrice A.

poly([2 0 -1])

10
ans =
1 -1 -2 0

Concatenazione
Matrici e vettori possono essere concatenati usando opportunamente gli funzioni di concatenazione , e ; come illustrato
nei seguenti esempi:

definendo i vettori a e b come:

a=[1 0 -1]
a =
1 0 -1
b=[2 2 4]
b =
2 2 4

possibile definire il vettore c come la concatenazione di due righe:

c=[a b]
c =
1 0 -1 2 2 4
d=[a;b]
d =
1 0 -1
2 2 4

Analogamente, le matrici A e B ed il vettore a

A=[1 2;3 4]
A =
1 2
3 4
B=[1;1]
B =
1
1

possono essere coerentemente concatenati in modo da ottenere la matrice W

W=[A,B;a]
W =
1 2 1
3 4 1
1 0 -1

Cancellazione di righe o colonne.


Analogamente possibile eliminare righe o colonne. La maniera pi semplice in tale senso quella di assegnare alla riga
o colonna da eliminare il vettore vuoto [].

Ad esempio, se vogliamo cancellare la seconda colonna della matrice A:

A=[1 0 -1;1 2 -1;2 0 -2]


A =
1 0 -1
1 2 -1
2 0 -2
A(:,2)=[]
A =
1 -1
1 -1
2 -2

Operazioni tra matrici.


Inoltre, tra matrici consistenti possibile adoperare gli operatori matematici estesi:

11
Somma di matrici

A=[1 0 -1;1 2 -1;2 0 -2]


A =
1 0 -1
1 2 -1
2 0 -2
B=[1 0 -1;0 1 1;0 0 1]
B =
1 0 -1
0 1 1
0 0 1

Prodotto di matrici

A+B*A
ans =
0 0 0
4 4 -4
4 0 -4

Trasposizione. Si applica un apice dopo la matrice.

A=[2 0 1;1 1 1]
A =
2 0 1
1 1 1
B=[4 0 1]'
B =
4
0
1
A*B
ans =
9
5

Attenzione !!! E importante fare attenzione alla consi stenza delle matrici impiegate nelle espressioni matematiche. Ad
esempio, il seguente prodotto produrr un errore run-time perch si cerca di forzare il prodotto tra due grandezze
inconsistenti, in particolare due vettori colonna:

a=[4 1 1]'
a =
4
1
1
b=[2 3 0]'
b =
2
3
0
a*b
??? Error using ==> *
Inner matrix dimensions must agree.

Se lintenzione era quella di calcolare il prodotto scalare tra i due vettori, ci si sicuramente dimenticati di applicare
loperatore di trasposizione ad uno dei due vettori:

a*b'
ans =
8 12 0
2 3 0
2 3 0
a'*b

12
ans =
11

Se si vuole calcolare il prodotto tra componenti necessario usare uno degli operatori vettoriali, si riconoscono pech
preceduti dal punto (.*, ./, .^). Ad esempio, il prodotto componente per componente tra a e b diventa:

a.*b
ans =
8
3
0

Evidentemente, gli operatori vettoriali vanno applicati tra variabili dello stesso tipo e dimensione, restituendo analoghi
dati. Applicando loperatore ./ a due matrici 3x3 si ottiene, quindi, sempre una matrice 3x3:

[1 2 3;4 1 0;0 0 1]./[1 1 2;-1 4 2;1 6 6]


ans =
1.0000 2.0000 1.5000
-4.0000 0.2500 0
0 0 0.1667

Espansione scalare.
Tale funzione permette di assegnare in maniera estremamente semplice uno stesso valore scalare ad una matrice senza
ricorrere ad una assegnazione consistente:

A=[1 4 5;2 1 0;1 1 0]


A =
1 4 5
2 1 0
1 1 0
A(2:3,2:3)=100
A =
1 4 5
2 100 100
1 100 100

Indicizzazione logica. Tale funzione consente di restringere loperazione di assegnazione agli elementi della matrice che
soddisfano una specificata condizione:
Definiamo, innanzitutto, il vettore di numeri random x come:

x=randn(1,20)
x =
Columns 1 through 7
-0.4326 -1.6656 0.1253 0.2877 -1.1465 1.1909 1.1892
Columns 8 through 14
-0.0376 0.3273 0.1746 -0.1867 0.7258 -0.5883 2.1832
Columns 15 through 20
-0.1364 0.1139 1.0668 0.0593 -0.0956 -0.8323

possibile restringere il vettore x ai soli elementi positivi, semplicemente scrivendo

x(x>0)
ans =
Columns 1 through 7
0.1253 0.2877 1.1909 1.1892 0.3273 0.1746 0.7258
Columns 8 through 11
2.1832 0.1139 1.0668 0.0593

Matrici multidimensionali. Di fatto, tali strutture dati vengono essenzialmente trattate come le classiche strutture dati
bidimensionali, anche se allutilizzatore MATLAB esperto non passer inosservato come le strutture multidimensionali
appaiano, sotto certi aspetti, un po estranee alle classiche strutture dati. Ci dovuto al fatto che le strutture dati n-
dimensionali (con n>2) sono state introdotte solo di recente in MATLAB (nella versione 5.0, 1998), dovendo riadattare
tutto il sistema di calcolo a questa nuova introduzione.

13
Una matrice di numeri random distribuiti normalmente di dimensioni (3,4,5) pu essere definita come:

N=rand(3,4,5)

N(:,:,1) =
0.9501 0.4860 0.4565 0.4447
0.2311 0.8913 0.0185 0.6154
0.6068 0.7621 0.8214 0.7919
N(:,:,2) =
0.9218 0.4057 0.4103 0.3529
0.7382 0.9355 0.8936 0.8132
0.1763 0.9169 0.0579 0.0099
N(:,:,3) =
0.1389 0.6038 0.0153 0.9318
0.2028 0.2722 0.7468 0.4660
0.1987 0.1988 0.4451 0.4186
N(:,:,4) =
0.8462 0.6721 0.6813 0.5028
0.5252 0.8381 0.3795 0.7095
0.2026 0.0196 0.8318 0.4289
N(:,:,5) =
0.3046 0.6822 0.1509 0.8600
0.1897 0.3028 0.6979 0.8537
0.1934 0.5417 0.3784 0.5936

Anche per una matrice 3D possibile applicare loperatore colon:

N(:,:,2)
ans =
0.9218 0.4057 0.4103 0.3529
0.7382 0.9355 0.8936 0.8132
0.1763 0.9169 0.0579 0.0099

Loperatore size specifica lestensione della matrice lungo le dimensioni che la caratterizzano.

size(N)
ans =
3 4 5

Analogamente alle matrici a due dimensioni, possibile adoperare la propriet di espansione scalare:

N(:,:,3)=0
N(:,:,1) =
0.9501 0.4860 0.4565 0.4447
0.2311 0.8913 0.0185 0.6154
0.6068 0.7621 0.8214 0.7919
N(:,:,2) =
0.9218 0.4057 0.4103 0.3529
0.7382 0.9355 0.8936 0.8132
0.1763 0.9169 0.0579 0.0099
N(:,:,3) =
0 0 0 0
0 0 0 0
0 0 0 0
N(:,:,4) =
0.8462 0.6721 0.6813 0.5028
0.5252 0.8381 0.3795 0.7095
0.2026 0.0196 0.8318 0.4289
N(:,:,5) =
0.3046 0.6822 0.1509 0.8600
0.1897 0.3028 0.6979 0.8537
0.1934 0.5417 0.3784 0.5936

Sono essenziali gli operatori squeeze, reshape e shiftdim.

La funzione squeeze rimuove le dimensioni superflue (pari ad 1), qualora ce ne siano. Ad esempio nella seguente
definizione di R, la seconda dimensione superflua, e pu essere rimossa:

14
R=rand(2,1,2)
R(:,:,1) =
0.8385
0.5681
R(:,:,2) =
0.3704
0.7027
whos
Name Size Bytes Class

R 2x1x2 32 double array

Grand total is 4 elements using 32 bytes

S=squeeze(R)
S =
0.8385 0.3704
0.5681 0.7027
whos
Name Size Bytes Class

R 2x1x2 32 double array


S 2x2 32 double array

Grand total is 8 elements using 64 bytes

La funzione reshape dispone gli elementi di una matrice in una iso-dimensionale (coerente) con diverse estensioni:

A=[1 3 5 1;0 1 2 2;4 1 1 3;0 1 1 2]


A =
1 3 5 1
0 1 2 2
4 1 1 3
0 1 1 2
B=reshape(A,2,8)
B =
1 4 3 1 5 1 1 3
0 0 1 1 2 1 2 2

la funzione shiftdim trasla verso destra di una quantit specificata le dimensioni della variabile:

a=rand(2,1,3);
whos
Name Size Bytes Class

a 2x1x3 48 double array

Grand total is 6 elements using 48 bytes

b=shiftdim(a,1);
whos
Name Size Bytes Class

a 2x1x3 48 double array


b 1x3x2 48 double array

Grand total is 12 elements using 96 bytes

15
3. Tracciamento di Grafici
La funzione pi importante indubbiamente la plot, questa prende come parametri i vettori delle componenti lungo
lascissa e lungo lordinata. Definendo il vettore delle ascisse come

x=[0:0.01:2*pi];

vogliamo plottare l a funzione y=sin(x)+cos(2*x) nel range appena definito. Definiamo la funzione y come il vettore

y=sin(x)+cos(2*x);
plot(x,y);

1.5

0.5

-0.5

-1

-1.5

-2
0 1 2 3 4 5 6 7

La funzione plot in grado di tracciare le curve usando svariati simboli, ad esempio quadrati:

x=[0:0.1:2*pi];
y=sin(x)+cos(2*x);
plot(x,y,'s');

La lista completa dei simboli che possono essere utilizzati, dei colori disponibili e dei tipi di tratto, pu essere ottenuta
digitando help plot:

y yellow . point - solid


m magenta o circle : dotted
c cyan x x-mark -. dashdot
r red + plus -- dashed
g green * star
b blue s square
w white d diamond
k black v triangle (down)
^ triangle (up)
< triangle (left)
> triangle (right)
p pentagram
h hexagram

16
1.5

0.5

-0.5

-1

-1.5

-2
0 1 2 3 4 5 6 7

E possible tracciare grafici a barre:


x=-2.9:0.2:2.9;
bar(x,exp(-x.*x));

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
-3 -2 -1 0 1 2 3

Grafici di vario tipo:

x=0:0.25:10;
stairs(x,sin(x));
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 1 2 3 4 5 6 7 8 9 10

x=0:0.1:4;
y=sin(x.^2).*exp(-x);
stem(x,y)

17
0.35

0.3

0.25

0.2

0.15

0.1

0.05

-0.05

-0.1

-0.15
0 0.5 1 1.5 2 2.5 3 3.5 4

Insieme alla funzione plot e alla variet di parametri impiegabili che la caratterizzano possibile utilizzare una serie di
funzioni di fondamentale ausilio nel tracciamento di grafici. La funzione hold, se attivata dal parametro on, consente il
tracciamento di pi grafici nella stessa finestra:

x=[0:0.1:2*pi];
y=sin(x)+cos(2*x);
plot(x,y);
hold on
plot(x,y,'s');
1.5

0.5

-0.5

-1

-1.5

-2
0 1 2 3 4 5 6 7

La funzione zoom (attivabile anche dallicona sulla finestra stessa) permette lingrandimento di regioni del grafico.
Lattivazione della funzione grid traccia un reticolato sul grafico.

grid on
1.5

0.5

-0.5

-1

-1.5

-2
0 1 2 3 4 5 6 7

Il comando clf pulisce la finestra corrente, mentre figure ne apre una nuova. Listruzione axis, oltre a definire la
scalatura degli assi, permette di definire lapparenza della figura. Le istruzioni xlabel, ylabel e title etichettano gli assi e
la figura:

xlabel('Asse x')

18
ylabel('Asse y')
title('Titolo della Figura')
Titolo della Figura
1.5

0.5

0
Asse y

-0.5

-1

-1.5

-2
0 1 2 3 4 5 6 7
Asse x

Grafici tridimensionali sono tipicamente tracciati per mezzo delle istruzioni plot3, mesh e surf.
La plot3 consente di tracciare curve definite parametricamente:

t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t);

40

30

20

10

0
1
0.5 1
0 0.5
0
-0.5
-0.5
-1 -1

Listruzione mesh traccia il grafico di una funzione a due variabili, ossia disegna superfici. Ha come parametro
essenziale la matrice dei valori assunti dalla funzione.

Z=peaks;
mesh(Z)

Tramite colormap possono essere impiegate differenti mappe di colori.

colormap hot

19
Alternativamente a mesh pu essere impiegata surf, questultima non colora semplicemente il reticolo ma lintera
superficie.

surf(Z)

Listruzione shading, usando i diversi parametri, permette di migliorare ulteriormente lesposizione della superficie
tracciata:

shading interp

20
4. Creazione di script MATLAB
Uno script un insieme di istruzioni MATLAB racchiuse in un file avente estensione .m. Lestensione .m obbligatoria,
perch identifica univocamente i file script MATLAB . MATLAB rappresenta un ambiente di sviluppo estremamente
versatile e facile da usare; ad esempio, le variabili non possono essere dichiarate esplioitamente dallutente, vengono
bens dichiarate automaticamente nellistante in cui vengono usate per la prima volta.
Solo nelle versioni pi recenti stata introdotta la possibilit di poter scegliere la rappresentazione numerica del tipo di
dato. Alternativamente a quella di default double (8 byte), sono a disposizione dellutente i seguenti tipi:

double - Convert to double precision.


sparse - Create sparse matrix.
char - Create character array (string).
cell - Create cell array.
struct - Create or convert to structure array.
single - Convert to single precision.
uint8 - Convert to unsigned 8-bit integer.
uint16 - Convert to unsigned 16-bit integer.
uint32 - Convert to unsigned 32-bit integer.
int8 - Convert to signed 8-bit integer.
int16 - Convert to signed 16-bit integer.
int32 - Convert to signed 32-bit integer.

Chiaramente, scegliendo intelligentemente la rappresentazione delle proprie variabili possibile risparmiare una grande
quantit di memoria. Ad esempio, la rappresentazione sparsa consente di tenere in memoria soltanto gli elementi non
nulli di una matrice, il risparmio che si ottiene evidente quando nella matrice in questione gli elementi non nulli sono
in minoranza.

A=zeros(1000,1000);
B=uint8(zeros(1000,1000));
C=sparse(A);
whos
Name Size Bytes Class

A 1000x1000 8000000 double array


B 1000x1000 1000000 uint8 array
C 1000x1000 4016 sparse array

Grand total is 2000001 elements using 9004016 bytes

Uno script di matlab di fatto un file ascii, pu quindi essere creato con un qualunque editor di testi. E per pi comodo
impiegare leditor integrato di matlab, il quale, oltre ad evidenziare le parole chiave matlab, fornisce anche utili
strumenti per eseguire il debug del programma.

21
Un semplicissimo esempio di script matlab riportato in figura seguente, il programma traccia il grafico della funzione
coseno.

Per eseguirlo sufficiente spostarsi nella cartella in cui stato salvato (usando il comando cd) e poi digitare il nome del
file senza estensione.

prova_1
0.9998
0.9994
0.9986
0.9976
0.9962
0.9945
0.9925
0.9903
0.9877
0.9848
0.9816
...

22
5. Il MATLAB come linguaggio di programmazione
MATLAB dispone di un concreto numero di istruzioni che permettono di assimilarlo ad un tipico linguaggio di
programmazione. Abbiamo gi sottolineato come le variabili in MATLAB siano definite automaticamente nel momento in
cui vengono utilizzate, mentre pi comuni appaiono le istruzioni per il controllo del flusso.
La pi diffusa listruzione di condizionamento if else/elseif end, la sua sintassi simile a quella dei classici linguaggi
(attenzione: la parola chiave then in matlab non viene usata), ed sempre chiusa dallistruzione end, a meno che
listruzione condizionata non sia unica.

>> if 1==1 disp('E'' proprio 1 !!!');end


E' proprio 1 !!!

Anche listruzione di ciclo for ha una sintassi estremamente semplice, gli estremi ed il passo sono esclusivamente
specificati dal vettore che segue listruzione stessa. Anche listruzione for deve essere sempre conclusa da una end.

>> for t=[1:0.3:4],


f=t^2
end

f =
1
f =
1.69000000000000
f =
2.56000000000000

f =
11.56000000000000
f =
13.69000000000000
f =
16
>>

Analogamente lavora listruzione di ciclo while/end. E comunque forzare luscita da un ciclo tramite listruzione break.
Molto utile pu risultare lespressione di condizionamento multiplo switch/case/otherwise/end, questa consente di
scegliere una tra diverse alternative. Attraverso lopzione otherwise possibile comprendere la casistica di opzioni che
non ricadono in quelle specificate. Ulteriori informazioni possono essere ottenute digitando help lang.

23