MATLAB
MATLAB
MATLAB ®
Università degli
Studi di UDINE
MECCANICA APPLICATA
ALLE MACCHINE
MAT(rix) LAB(oratory)
Originariamente MATLAB è stato sviluppato come
interattivo di facile uso, per il calcolo
ambiente interattivo,
matriciale tecnico e scientifico ad alto livello.
Nel tempo MATLAB è stato completato con l’aggiunta
di funzioni che permettono complesse simulazioni ed
analisi numeriche, e l’interfacciamento con prototipi.
Attualmente MATLAB è utilizzato anche come:
1) calcolatrice elettronica evoluta;
2) ambiente grafico bi- e tri-dimensionale;
3) linguaggio di programmazione.
2
MATLAB
Introduzione
MATLAB è un linguaggio di programmazione
ad alto rendimento per la computazione
tecnica e scientifica, basato sull’utilizzo di
dati di tipo matriciale.
5
MATLAB
C/Matlab
#include <stdio.h>
#define n 2
#define m 3
#define p 4
int i = 0; int j = 0; int k = 0;
double a[n][m]={ {1,2,3}, {4,5,6} };
double b[m][p]={ {1,2,3,4}, {5,6,7,8},
{9,1,2,3} }; » a=[1 2 3; 4 5 6];
double c[n][p]={ {0,0,0,0}, {0,0,0,0} }; » b=[1 2 3 4;5 6 7 8;9 1 2 3];
void main()
{ » c=a*b
for(i = 0; i < n; i ++)
for( j = 0; j < p; j ++)
for( k = 0; k < m; k ++ )
c[i][j] += a[i][k] * b[k][j];
for(i = 0; i < n; i ++)
{
for( j = 0; j < p; j ++)
printf("%.2lf ",c[i][j]);
printf("\n");
}
}
6
MATLAB
Piattaforme
MATLAB funziona su diverse piattaforme:
• Personal Computer con S.O. Windows
• Sistemi con S.O. Unix o Linux,
• Computer Macintosh
L’interazione dell’utente con MATLAB è la
medesima, indifferentemente dall’hardware
e dal sistema operativo della piattaforma.
7
MATLAB
Toolbox
MATLAB è integrato da una famiglia di soluzioni
application-specific denominate toolbox.
9
MATLAB
Comandi d’avvio
z La linea di comando di MATLAB è indicata dal
simbolo >>, che è il prompt dal quale possono
essere richiamati tutti i comandi da eseguire in
maniera interattiva.
z I comandi possono essere dati da tastiera o
letti da un file. Il comando viene interpretato
nel momento in cui viene premuto l’Invio.
z Per terminare la sessione di lavoro basta
digitare il comando exit oppure quit
10
MATLAB
Layout standard del
desktop di MATLAB
Finestra di comando: si possono
Prompt digitare comandi diretti ed ottenere
le risposte, nella stessa finestra,
premendo il tasto di invio.
Possibile uso come calcolatrice
Cartella di lavoro
13
MATLAB
Le variabili
9 L’assegnazione di uno scalare viene effettuata ponendo il nome
della variabile uguale al valore prescelto. Es. t=25
14
MATLAB
Le variabili
Alcune variabili sono predefinite, ad esempio
pi (3.141592…..)
i, j (unità immaginaria )
eps (precisione di macchina)
realmax (massimo numero di macchina positivo)
realmin (minimo numero di macchina positivo)
Inf (Infinito: numero maggiore di realmax)
NaN (Not a Number: risultato di operazioni non
definite, tipicamente di 0/0)
18
MATLAB
Immissione di matrici
Convenzioni di base:
9 Separare gli elementi di una riga con spazi vuoti o virgole (le
virgole sono, di fatto, superflue)
19
MATLAB
Immissione di matrici
Per assegnare ad A la matrice di Dürer basta digitare:
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
20
MATLAB
Immissione di vettori
Poiché un vettore è una particolare matrice, l’assegnazione
dei vettori può essere effettuata seguendo le medesime
modalità già illustrate.
z Vettore riga: v = [1 2 3]
linspace(inizio,fine,numero di punti)
Esempio:
>> a = linspace(1,5,5)
a =
1 2 3 4 5
22
MATLAB
Immissione di matrici
¾ Nel caso in cui l’espressione digitata contenga un numero troppo grande di
caratteri per restare su di un’unica riga di comando è possibile utilizzare un
carattere di continuazione dato da tre punti consecutivi …
Es.1
>> A = [16 3 ...
2 13; 5 10 11 ...
Es.2
>> 1 + 1/4 + ...
1/8
ans = 1.375
23
MATLAB
Esempio: funzione sum()
Digitando
sum(A)
MATLAB risponde con
ans =
34 34 34 34
La funzione sum() produce un vettore riga che contiene
le somme delle colonne di una matrice (Es. A);
A'
ans =
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1
25
MATLAB
Esempio di concatenazione di
comandi
sum(A')'
ans =
34
34
34
34
26
MATLAB
Esempio: funzione diag()
Se si desidera effettuare la somma degli elementi della diagonale
principale è possibile ultilizzare la funzione diag() che estrae gli
elementi della diagonale principale da una matrice. Ad esempio,
diag(A)
produce:
ans =
16
10
7
1
Quindi,
sum(diag(A))
produce:
ans =
34
27
MATLAB
Esempio: funzione size()
Il comando size() fornisce la dimensione di una matrice:
28
MATLAB
Immissione di matrici
z Si possono anche creare vettori o matrici di stringhe.
z Stringa può essere, ad esempio, un vettore riga (di stringhe):
29
MATLAB
Accesso agli elementi di una
matrice
L'elemento in riga i e colonna j di A è denotato con A(i,j).
Es:
A(4,2)
indica l’elemento di valore 15
t = A(4,5)
Index exceeds matrix dimensions
X = A;
X(4,5) = 17
X =
16 3 2 13 0
5 10 11 8 0
9 6 7 12 0
4 15 14 1 17
31
MATLAB
L'operatore : (due punti)
L’operatore due punti,:, è uno dei più importanti operatori di MATLAB.
32
MATLAB
L'operatore : (due punti)
Esempi
L'espressione:
1:10
è un vettore riga che contiene i numeri interi da 1 a 10
1 2 3 4 5 6 7 8 9 10
0:pi/4:pi
è
0 0.7854 1.5708 2.3562 3.1416
33
MATLAB
L'operatore : (due punti)
L’operatore due punti può essere utilizzato per assegnare o
richiamare porzioni di una matrice.
Ad esempio
A(1:k,j)
sum(A(1:4,4))
34
MATLAB
L'operatore : (due punti) e la
keyword end
L’operatore due punti può essere anche utilizzato per
assegnare tutti gli elementi in una riga o colonna di
una matrice.
sum(A(:,end))
eye
genera la matrice identità (quadrata) di ordine assegnato
>> eye(4)
zeros
genera una matrice con tutti elementi uguali a zero
>> zeros(4,2)
ones
genera una matrice con tutti elementi uguali a 1
>> ones(2,3)
rand
genera una matrice di numeri casuali tra 0 e 1
>> rand(3,4)
36
MATLAB
Esercizio
Inserire la matrice A
123456
111111
202020
654321
Assegnare:
• alla variabile a l’elemento (3,4)
• alla varibile r la terza riga
• alla variabile c la seconda colonna
• alla variabile sm la sottomatrice segnata.
37
MATLAB
Soluzione
>> A=[1 2 3 4 5 6; 1 1 1 1 1 1;…
2 0 2 0 2 0;6 5 4 3 2 1]
oppure:
A=[1:6;ones(1,6);2 0 2 0 2 0;6:-1:1]
>> a=A(3,4)
>> r=A(3, :)
>> c=A(:,2)
>> sm=A(:,2:3)
38
MATLAB
Operazioni aritmetiche
Le operazioni aritmetiche basilari definite in
MATLAB sono le seguenti :
1) addizione +
2) sottrazione –
3) moltiplicazione *
4) divisione /
5) elevamento a potenza ^
39
MATLAB
Esempi addizione
A + A'
ans =
32 8 11 17
8 20 17 23 Vengono sommati gli
11 17 14 26 elementi omonimi
17 23 26 2
A + 2
ans =
18 5 4 15
7 12 13 10 Lo scalare viene sommato a
11 8 9 14 tutti gli elementi
6 17 16 3
40
MATLAB
Moltiplicazione
Il simbolo della moltiplicazione, *, denota la moltiplicazione fra matrici (o
vettori) come prodotto tra righe e colonne.
A'*A
ans =
378 212 206 360
212 370 368 206
206 368 370 212
360 206 212 378
41
MATLAB
Operazioni sui singoli elementi
delle matrici: operatori .*, ./, .^
Le operazioni aritmetiche * / ^ precedute dal carattere punto . agiscono
elemento per elemento. Queste operazioni non hanno analogo nel calcolo
matriciale, ma sono molto utili.
» A = [ 1 2 ; 3 4];
» B = [ 1 2 ; -1 1];
» C = A ./ B
C =
1 1
-3 4
» C = A.*B
C =
1 4
-3 4
» C = A.^ B
C =
1.0000 4.0000
0.3333 4.0000
42
MATLAB
Esempio operatore .*
A.*A
ans =
256 9 4 169
25 100 121 64
81 36 49 144
16 225 196 1
N.B. A .* A ≠ A * A = A ^ 2
Per poter eseguire questo tipo di operazioni (.*, ./, .^) gli operandi
devono avere le stesse dimensioni.
L’unica eccezione a questa regola è data dal caso in cui uno dei due
operandi sia uno scalare. In questo caso è infatti possibile eseguire una
qualunque operazione, puntuale e non, in quanto lo scalare viene trattato
come una variabile dello stesso tipo e delle stesse dimensioni dell’altro
operando, avente tutte le componenti costanti.
43
MATLAB
Concatenazione
Per concatenazione si intende il processo di congiunzione di matrici per fare
matrici di dimensioni più grandi.
44
MATLAB
Esercizio
z Costruire la matrice 8 x 7
1000011
0100011
0010011
0001011
0000111
1110011
1110000
1110000
45
MATLAB
Soluzione
>> a=[
[eye(5);[ones(3,3),zeros(3,2)]],
[ones(6,2);zeros(2,2)]
]
>> SM=a(3:7,4:7)
46
MATLAB
Cancellazione di righe o colonne
Si possono cancellare righe e colonne da una matrice utilizzando le parentesi
quadrate.
Ad esempio,sia:
X = A;
Per cancellare la seconda colonna di X, usiamo:
X(:,2) = []
Questo cambia X in
X =
16 2 13
5 11 8
9 7 12
4 14 1
» B = [1 2 ; 3 4];
» det(B)
ans =
-2
Le ultime istruzioni mostrano che, le operazioni tra vettori (così come quelle
tra matrici) sono valide solo se le dimensioni sono consistenti.
consistenti
50
MATLAB
Moltiplicazione di vettori
Prodotto interno (prodotto scalare)
>> s=[1:4];
>> d=[1;2;3;4];
>> s*d
ans= 30
51
MATLAB
Operazioni sui singoli elementi
dei vettori
z Il prodotto degli elementi di un vettore (o degli elementi sulle
colonne di una matrice) può essere effettuato utilizzando la
funzione prod().
z Operazioni aritmetiche .* ./ .^
» u = 1 : 4 ;
» v = [3 2 6 -1];
» w = u .* v
w =
3 4 18 -4
» w = u ./ v
w =
0.3333 1.0000 0.5000 -4.0000
» w = u .^ v
w =
1.0000 4.0000 729.0000 0.2500
52
MATLAB
Esempio
Sia n il seguente vettore colonna:
n = (0:9)';
Sia inoltre
pows = [n n.^2 2.^n]
La variabile pows forma una tabella di quadrati e potenze di due.
pows =
0 0 1
1 1 2
2 4 4
3 9 8
4 16 16
5 25 32
6 36 64
7 49 128
8 64 256
9 81 512
53
MATLAB
Soluzione di un sistema
algebrico: operatore \
z Dato un sistema algebrico posto nella forma [A] * {x} = {b}, la
soluzione {x} può essere ricavata utilizzando l’operatore \
(backslash): x = A \ b
z Es.
A=[2 5 6;6 4 -12;1 0 4]
b=[32;6;1] ⎧2 x + 5 y + 6 z = 32
>> x=A\b ⎪
x = ⎨6 x + 4 y − 12 z = 6
⎪x + 4z = 1
-1.7907 ⎩
6.2791
0.6977
54
MATLAB
Modifica del formato di output
z MATLAB lavora generalmente con quindici cifre
significative.
z Secondo l’impostazione standard di MATLAB, a livello di
output una variabile intera viene visualizzata in un
formato privo di punto decimale, mentre una variabile
reale non intera viene visualizzata utilizzando quattro
cifre decimali (format short).
z Se si vuole modificare il formato di output occorre
digitare il comando format.
z Per visualizzare il maggior numero possibile di cifre
decimali, è necessario attivare il comando format long.
55
MATLAB
Modifica del formato di output
Esempio:
>>1/13
ans =
0.0769 (5 cifre)
>>format long
>>1/7
ans =
0.07692307692308 (15 cifre)
Per riabilitare il formato standard occorre digitare format o format short.
0.1 2.3 2.1 1.7 3.1 2.0 0.9 0.8 3.6 2.5
57
MATLAB
Soluzione
>> v=[0.1 2.3 2.1 1.7 3.1 2.0 0.9 0.8 3.6 2.5]
>> format short e
>> m=sum(v)/length(v)
>> m=mean(v)
m =
1.9100e+000
58
MATLAB
Funzioni trigonometriche
predefinite
MATLAB, essendo un linguaggio di programmazione di tipo
tecnico-scientifico, contiene molte importanti funzioni matematiche
predefinite, come ad esempio le seguenti funzioni trigonometriche:
5 sin(x) seno di x
5 cos(x) coseno di x
5 asin(x) arcoseno di x
5 acos(x) arcocoseno di x
5 tan(x) tangente di x
5 atan(x) arcotangente di x
5 atan2(y,x) funzione arcotangente a doppio argomento di y e x
N.B. In generale, quando si scrive y = sin(x), si intende che al
numero x si fa corrispondere il numero y. Poiché in MATLAB x ed
y possono essere matrici (o vettori), l’espressione y = sin(x) ha il
senso seguente: ad ogni componente della matrice x viene fatta
corrispondere una componente della matrice y secondo la
relazione y = sin(x).
59
MATLAB
Altre importanti funzioni
matematiche predefinite
5 exp(x) esponenziale di x
5 log(x) logaritmo naturale di x
5 sqrt(x) radice quadrata di x
5 abs(x) valore assoluto di x
5 sign(x) funzione segno di x
5 factorial(x) fattoriale di x
5 floor(x) arrotonda all’intero più vicino a x per difetto
5 ceil(x) arrotonda all’intero più vicino a x per eccesso
5 round(x) arrotonda all’intero più vicino a x
Per una lista più completa si può digitare help elfun alla riga di
comando
60
MATLAB
Generazione di matrici
Come già illustrato, MATLAB fornisce quattro funzioni che
generano matrici di base: eye(), ones(), rand(), e zeros()
Z = zeros(2,4)
Z =
0 0 0 0
0 0 0 0
F = 5*ones(3,3)
F =
5 5 5
5 5 5
5 5 5
61
MATLAB
Generazione di matrici
N = fix(10*rand(1,10))
N =
4 9 4 4 8 5 2 6 8 0
R = randn(4,4)
R =
1.0668 0.2944 -0.6918 -1.4410
0.0593 -1.3362 0.8580 0.5711
-0.0956 0.7143 1.2540 -0.3999
-0.8323 1.6236 -1.5937 0.6900
62
MATLAB
Generazione di matrici mediante
il comando Load
63
MATLAB
Generazione di matrici mediante
il comando Load
Se, per esempio, al di fuori di MATLAB si crea un file di testo,
chiamato [Link], che contiene queste quattro linee:
Attraverso il comando
load [Link]
Esempio:
per creare la matrice di Dürer si può creare un M-file che contiene le cinque
linee:
A = [...
16.0 3.0 2.0 13.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0];
Dopo aver salvato il file con un nome (es. magik.m), digitando il nome del file
senza estensione (magik) alla riga di comando, esso viene letto ed interpretato.
Di conseguenza viene creata in workspace la variabile A contenente la matrice
d'esempio.
65
MATLAB
Uso di MATLAB come linguaggio
di programmazione
z MATLAB può essere utilizzato come un linguaggio di
programmazione alla stregua del Basic, del Fortran, del
Pascal o del C.
67
MATLAB
Operatori relazionali
Esempio:
>>x=1:5;
>>y=5:-1:1;
>>z=x>y
z =
0 0 0 1 1
68
MATLAB
Operatori logici
70
MATLAB
Esempio if
Nel vettore ris viene memorizzata una stringa che riporta il
risultato del confronto tra le variabili A e B.
if A > B
ris=‘A maggiore di B'
elseif A < B
ris=‘A minore di B'
elseif A == B
ris=‘A uguale a B'
else
error(‘Situazione non prevista')
end
71
MATLAB
Istruzioni condizionali: switch
switch variabile
case valore1
istruzioni
case {valore2, valore3,...}
istruzioni
otherwise,
istruzioni
end
method = 'Bilinear';
switch lower(method)
case {'linear','bilinear'}
ris='Method is linear'
case 'cubic'
ris='Method is cubic'
case 'nearest'
ris='Method is nearest'
otherwise
ris='Unknown method.'
end
73
MATLAB
Ciclo incondizionato for
controllato da un contatore
for variable = inizio:incremento:fine,
istruzione
...
istruzione
end
74
MATLAB
Esempio for
for i = 1:4,
for j = 1:3,
due cicli nidificati utilizzati per
A(i,j) = 1/(i+j-1); costruire la matrice A
end
end
>>A
A =
75
MATLAB
Ciclo condizionato while
while condizione
istruzione
...
istruzione
end
z Si può scrivere:
x=[1:20];
somma=0;
m=20;
i=1;
while i<=m
if x(i)<=1 | x(i)> 5
somma=somma+x(i);
end
i=i+1;
end
77
MATLAB
Uscita incondizionata break
78
MATLAB
m-file (script) e funzioni
Esistono due categorie di programmi eseguibili in MATLAB:
>> nomefile
%
% Calcolo del quadrato della funzione seno
% nell'intervallo [-pi, pi]
%
x=[-pi:0.01:pi];
y=sin(x).^2;
82
MATLAB
function-file
Se si vogliono evitare gli inconvenienti di allocazione di memoria dati dagli
m-file, e se si vuole suddividere un programma in più sotto-programmi è
conveniente considerare i function-file (o “function”).
Un function-file è caratterizzato da una lista di parametri di input
(opzionale) ed una lista di parametri di output (anch’essa opzionale).
A differenza dello script, la prima riga di una function deve avere
obbligatoriamente la seguente struttura:
Il file deve essere salvato con un nome uguale a quello della funzione
(nome_funzione) e con estensione .m.
85
MATLAB
Esercizio di function-file
DH_eulero_zyz.m
function R = Rx(theta)
% Funzione per il calcolo della
% matrice di rotazione attorno a x
R = [1,0,0
0,cos(theta),-sin(theta)
0,sin(theta),cos(theta)];
86
MATLAB
Esercizio di function-file
DH_eulero_zyz.m
function R = Ry(beta)
% Funzione per il calcolo della
% matrice di rotazione attorno a y
R = [cos(beta),0,sin(beta)
0,1, 0
-sin(beta),0,cos(beta)];
87
MATLAB
Esercizio di function-file
DH_eulero_zyz.m
function R = Rz(alfa)
% Funzione per il calcolo della
% matrice di rotazione attorno a z
R = [cos(alfa),-sin(alfa),0
sin(alfa),cos(alfa),0
0,0,1];
88
MATLAB
Esercizio di function-file
DH_eulero_zyz.m
function [T,T1] = DH_eulero_zyz(fi,theta,psi)
T = [cos(fi)*cos(theta)*cos(psi) - sin(fi)*sin(psi),…
-cos(fi)*cos(theta)*sin(psi) - sin(fi)*cos(psi),…
sin(theta)*cos(fi);
sin(fi)*cos(theta)*cos(psi) + cos(fi)*sin(psi),…
-sin(fi)*cos(theta)*sin(psi) + cos(fi)*cos(psi),…
sin(theta)*sin(fi);
-sin(theta)*cos(psi), sin(theta)*sin(psi), cos(theta)];
T1=Rz(fi)*Ry(theta)*Rz(psi);
89
MATLAB
Esercizio di function-file
DH_eulero_rpy.m
function [T,T1] = DH_eulero_rpy(fi,theta,psi)
T = [cos(fi)*cos(theta),cos(fi)*sin(theta)*sin(psi)…
- sin(fi)*cos(psi), …
sin(theta)*cos(fi)*cos(psi)+sin(fi)*sin(psi);
sin(fi)*cos(theta),sin(fi)*sin(theta)*sin(psi) +…
cos(fi)*cos(psi), sin(theta)*sin(fi)*cos(psi)-cos(fi)*sin(psi);
-sin(theta), cos(theta)*sin(psi), cos(theta)*cos(psi)];
T1=Rz(fi)*Ry(theta)*Rx(psi)
90
MATLAB
Esercizio di function-file
eulero_zyz.m
function [fi,theta,psi] = eulero_zyz(R)
91
MATLAB
Esercizio di
function-file
eulero_zyz.m
92
MATLAB
Esercizio di
function-file
eulero_rpy.m
93
MATLAB
Comandi di ingresso/uscita:
input()
z Se in un programma si vuole che l’utente introduca da tastiera
il valore di una variabile si deve utilizzare la funzione input()
Esempio: l’istruzione
a1 = input(’a1=?: ’);
produce alla riga di comando:
a1 = ?
Perché il programma proceda, l’utente deve inserire un valore
numerico e premere Invio.
>> st='pippo';
>> disp(st)
pippo
>> disp('pippo')
pippo
95
MATLAB
Comandi di ingresso/uscita:
fprintf()
z fprintf è l’acronimo di file print formatted. La funzione fprintf() consente
di salvare dei dati formattati su un archivio di testo.
z Prima di scrivere su un file è necessario aprirlo in scrittura ed
assegnargli un identificativo interno. A tal fine si utilizza la funzione
fopen() con la sintassi:
ident_file=fopen(‘nome_file’,’wt’);
fprintf(ident_file,formato,variabile);
fclose (ident_file);
Identificativo variabile
del file Tabulazione “new line” (matrice)
fprintf(file_id,'%4.3f\t %6.4f\n',OUT);
97
MATLAB
Comandi di ingresso/uscita:
fprintf(). Esempio
x=linspace(0,2*pi,100)
OUT=[x;cos(x)];
file_id=fopen('[Link]','wt');
fprintf(file_id,'%4.3f\t %6.4f\n',OUT);
fclose(file_id);
0.000 1.0000
0.063 0.9980
0.127 0.9920
0.190 0.9819
......... ..........
......... ..........
......... ..........
6.156 0.9920
6.220 0.9980
6.283 1.0000
98
MATLAB
Comandi di ingresso/uscita:
fprintf(). Esempio
for x = 1:6
y = sqrt(x);
v = log(x);
fprintf(’ num= %2i \t rad= %8.5f \t ln= %9.7e \n’,x,y,v)
end
Il risultato è
num = 1 rad = 1.00000 ln = 0.0000000e+00
num = 2 rad = 1.41421 ln = 6.9314718e-01
.......................................................................
num = 5 rad = 2.23607 ln = 1.6094379e+00
num = 6 rad = 2.44949 ln = 1.7917595e+00
var=fscanf(ident_file,formato,dimensione);
ident_file=fopen(‘nome_file’,’r’);
file_id=fopen('[Link]','r');
IN=fscanf(file_id,'%f %f',[2 inf]);
fclose(file_id);
Numero Numero
IN = colonne righe
Columns 1 through 4
Il risultato è una matrice IN che risulta trasposta (2×n) rispetto alla matrice salvata
nel file [Link] (n×2).
101
MATLAB
Grafici: funzione plot()
z La funzione plot() consente di produrre grafici bidimensionali.
102
MATLAB
Grafici: esempio
L’elevato numero di
punti da l’impressione
di una linea continua
t = 0:pi/100:2*pi;
y = sin(t);
plot(t,y)
103
MATLAB
Grafici: funzione fplot()
z Il medesimo risultato poteva essere ottenuto anche utilizzando
la funzione fplot() e scrivendo una sola riga di codice!
z Esempio:
fplot('sin(x)',[0 2*pi])
104
MATLAB
Grafici multipli
Diverse coppie di coordinate passate ad argomento della funzione plot()
consentono di creare grafici multipli con una singola chiamata.
plot(x1,y1,x2,y2,...,xn,yn)
106
MATLAB
Grafici: opzioni
Per ogni grafico è possibile specificare il colore e lo stile della
linea nonché il marcatore da utilizzare mediante la seguente
sintassi:
plot(x,y,'opzioni')
107
MATLAB
Grafici: opzioni
z I possibili tipi di colore sono:
'c', 'm', 'y', 'r', 'g', 'b', 'w', e 'k':
corrispondono, rispettivamente ad azzurro, magenta, giallo,
rosso, verde, blu, bianco, e nero.
108
MATLAB
Grafici: opzioni
Esempio 1
0.4
>> plot(x,y,'k:o')
0.2
-0.2
-0.4
-0.6
-0.8
-1
-4 -3 -2 -1 0 1 2 3 4
109
MATLAB
Figure(), close(), close all
L’invocazione della funzione plot() comporta l’apertura automatica di
una nuova finestra grafica qualora non ve ne siano già di aperte.
figure(n)
Tale istruzione può essere anche applicata ad una finestra grafica già
aperta, per renderla finestra corrente.
hold on
MATLAB non rimuove il/i grafico/i esistente/i ed aggiunge i nuovi grafici alla finestra
corrente riscaldandone eventualmente gli assi per consentire una corretta
visualizzazione.
Il comando hold on viene disabilitato con il comando hold off: digitando hold off si
ritorna all’impostazione originale in cui la finestra grafica viene ripristinata ad ogni
nuovo grafico.
Per esempio:
t = 0:pi/100:2*pi;
y = sin(t);
plot(t,y,'*')
z=cos(t);
hold on
plot(t,z,'r:o')
111
MATLAB
Grafici: comandi hold on/off
112
MATLAB
Grafici: funzione subplot()
La funzione subplot() permette di disegnare grafici separati in una stessa finestra grafica.
La sintassi
subplot(m,n,p)
trasforma la finestra della figura in una matrice mxn di sottofinestre e seleziona la p-esima
sottofinestra come finestra corrente. Le sottofinestre sono numerati per righe: a partire da
sinistra verso destra e dall’alto verso il basso.
Esempio:
t = 0:pi/10:2*pi;
y = sin(t);
subplot(2,2,1)
plot(t,y)
y1=cos(t);
subplot(2,2,2)
plot(t,y1)
y2=tan(t);
subplot(2,2,3)
plot(t,y2)
y3=atan(t);
subplot(2,2,4)
plot(t,y3)
113
MATLAB
Grafici: funzione subplot()
1 2
3 4
114
MATLAB
Grafici: funzione axis()
La funzione axis() ha numerose opzioni per personalizzare la definizione
degli intervalli di variazione delle variabili in ascissa ed ordinata.
Per personalizzare i limite degli assi si digita:
axis([xmin xmax ymin ymax])
axis square
impone che i due assi abbiano la stessa lunghezza
axis equal
impone che gli incrementi per ogni marchio su x e y siano uguali.
axis auto
scala gli assi in maniera automatica.
115
MATLAB
Grafici: comando grid
z Spesso è conveniente tracciare una griglia che aiuta nella lettura dei
grafici
z Una griglia tratteggiata viene aggiunta alla finestra grafica utilizzando il
comando
1
0.6
0.4
-0.4
-0.8
grid off -1
-4 -3 -2 -1 0 1 2 3 4
116
MATLAB
Titoli, didascalie e testi
z La funzione title(’stringa’) consente di assegnare un titolo ad una figura
z Le funzioni xlabel(’stringa’), ylabel(’stringa’), e zlabel(’stringa’) permettono di
aggiungere didascalie agli assi x, y, z di una figura.
z La funzione text(x,y,’stringa’) permette di inserire la stringa nella posizione (x,y)
di una figura.
z L'esempio seguente usa \leq per <=, \pi per π, e \it per il font corsivo.
t = -pi:pi/100:pi;
y = sin(t);
plot(t,y)
axis([-pi pi -1 1])
xlabel('-\pi \leq \it \leq \pi')
ylabel('sin(t)')
title('Grafico della funzione sin')
text(1,-1/3,'\it{Funzione dispari}')
117
MATLAB
Titoli, didascalie e testi
118
MATLAB
Simboli
LaTex
119
MATLAB
Simboli
LaTex
120
MATLAB
Ottimizzazione del codice
I comandi tic e toc consentono di conoscere il numero dei secondi richiesto da un
determinato calcolo. La sintassi di tali comandi è:
tic;
calcolo;
toc
tic attiva il timer, toc lo arresta e restituisce l’“elapsed_time”, ovvero il tempo (in
secondi) trascorso dal momento in cui tic è stato attivato.
Esempio:
>>A=rand(100);
>>tic; inv(A); toc
elapsed_time =
0.3710
122
MATLAB
Supponiamo quindi di aver creato un M-file f.m che contiene la function di cui
vogliamo il grafico:
function f=f(x)
% Calcola la funzione exp(x)*cos(4*x)
f=exp(x).*cos(4*x);
Poiché il nome della function deve essere passato come stringa di caratteri, la
chiamata a plot_funz per disegnare il grafico di f(x) sull’intervallo [0,5] sarà:
>> plot_funz('f',0,5)
>> plot_funz(@f,0,5)
123
MATLAB
All’interno della function plot_funz, è necessario valutare la funzione passata
come argomento sui valori x delle ascisse.
Per far questo devo usare la function feval:
f=feval(funz,x);
124
MATLAB
Listato di plot_funz
function plot_funz(funz,a,b)
% PLOT_FUNZ(FUNZ,A,B): disegna il grafico della funzione
% FUNZ sull'intervallo [a,b], usando 201 punti.
% FUNZ deve essere una stringa di caratteri
h=(b-a)/200;
x=a:h:b;
f = feval(funz,x); %Valuta funz nei valori x
plot(x,f)
125
MATLAB
Oggetti grafici
z Linea:
handle = line(‘XData’,[xi xf], ‘YData’,[yi yf],…
’Zdata’,[zi zf],’Proprietà’,’Attributo’);
z Superficie: esempi
• [X,Y,Z] = sphere(n)
• [X,Y,Z] = cylinder(r,n)
• handle = surf(X,Y,Z)
z Rettangolo:
handle=rectangle('Position',[x,y,w,h])
126
MATLAB
Animazioni – drawnow e EraseMode
127
MATLAB
Animazioni - movie
Alloco memoria
h=line([0 1],[0 0]);
per i frames
set(h,'Color','r'); nella matrice M
axis([-1 1 -1 1]);
axis square
128
MATLAB
Variabili simboliche
Con il comando sym/syms è possibile costruire variabili ed espressioni
simboliche.
z Supponiamo di voler studiare una generica funzione f= 'a*x^2 + b*x + c.
z Dapprima si definiscono le variabili simboliche:
a = sym('a')
b = sym('b')
c = sym('c')
x = sym('x')
z O più semplicemente:
syms a b c x
129
MATLAB
Menu
In MATLAB è facile creare programmi con interfaccia grafica
professionale (WINDOWS-like). L’istruzione menu è di immediata
comprensione.
z = menu('Scegli il tipo di operazione', ...
'Assegna operandi', ...
'Addizione', ...
'Sottrazione', ...
'Moltiplicazione', ...
'Divisione', ...
'Quit Program');
disp('')
130
MATLAB
GUI: graphical user interface
Comando:
guide
131
MATLAB