Laboratorio di MATLAB
Fabio Morbidi
Dipartimento di Ingegneria dell’Informazione, Universit `a di Siena
morbidi@dii.unisi.it
www.dii.unisi.it/ ∼ control/teaching
Mar 04/07 ore 14.00-18.00 start up, funzioni di base Gio 06/07 ore 14.00-18.00 m-files, grafica
Lun 17/07 ore 9.00-13.00 controllo di flusso, functions, esercitazione 1 Mer 19/07 ore 14.00-18.00 Symbolic toolbox, Control system toolbox Lun 24/07 ore 14.00-18.00 Simulink, esercitazione 2
Mer 26/07 ore 14.00-18.00 Idoneit `a
Testo di riferimento: Guida operativa a MATLAB SIMULINK e Control Toolbox,
A. Cavallo, R. Setola, F. Vasca, Liguori Editore.
1 Start up 2
1.1 Vettori e Matrici . . . . 5
1.2 OPS: Operatori e caratteri speciali . . . . 7
1.2.1 operatori aritmetici . . . . 7
1.2.2 operatori relazionali . . . . 8
1.2.3 operatori logici . . . . 9
1.3 Funzioni matriciali . . . 10
1.3.1 matrici elementari . . . 10
1.3.2 informazioni sulle matrici . . . 10
1.3.3 manipolazione di matrici . . . 11
1.4.1 trigonometriche ed iperboliche . . . 15
1.4.2 Altre funzioni . . . 16
1.5 Help . . . 17
1.6 Esercizio 1 . . . 18
1.7 Tipi di dato multidimensionali . . . 19
1.7.1 cellarray . . . 19
1.7.2 strutture . . . 20
1.8 M-files . . . 22
1.8.1 script files . . . 23
1.8.2 gestione M-files . . . 24
1.8.3 stringhe . . . 25
2 Grafica 29
2.1 Grafica 2D . . . 30
2.1.1 funzioni correlate . . . 31
2.1.2 Traiettorie in R 3 . . . 36
2.1.3 Superfici . . . 37
2.1.4 Esercizio 3 . . . 40
2.1.5 Esercizio 4 . . . 40
3 Istruzioni di controllo di flusso 41 3.1 for . . . 42
3.2 while . . . 44
4 Function 51
4.1 Esercizio 6 . . . 53
4.2 Esercizio 7 . . . 53
5 Symbolic toolbox 54 5.1 funzioni di base . . . 55
5.2 calcolo . . . 57
5.2.1 derivate . . . 57
5.2.2 integrali . . . 59
5.2.3 limiti . . . 60
5.3 algebra lineare . . . 61
5.3.3 autovalori . . . 63
5.4 semplificazione di espressioni algebriche . . . 64
5.5 soluzione di equazioni . . . 66
5.6 grafica . . . 68
5.6.1 ezplot . . . 68
5.6.2 ezsurf, ezmesh . . . 69
5.6.3 ezplot3 . . . 70
5.7 Esercizio 8 . . . 71
6 Control system toolbox 72
6.1 funzioni principali . . . 72
6.1.3 ss . . . 74
6.1.4 pole . . . 74
6.1.5 zero . . . 75
6.1.6 dcgain . . . 76
6.1.7 impulse . . . 77
6.1.8 step . . . 78
6.1.9 c2d . . . 79
6.1.10 d2c . . . 79
6.1.11 ctrb . . . 79
6.1.12 obsv . . . 79
6.1.13 bode . . . 80
7 Altri toolbox di Matlab 81
8 Simulink 83
8.1 Operazioni di base . . . 84
8.2 blocchi standard . . . 85
8.2.1 Sources . . . 86
8.2.2 Sinks . . . 87
8.2.3 Continuous . . . 88
8.2.4 Discrete . . . 89
8.2.5 Math Operation . . . 90
8.2.9 Subsystems . . . 92
8.3 Esercizio 9 - Simulink . . . 93
8.4 Esercizio 10 - Simulink . . . 94
Start up
MATLAB = Matrix Laboratory
• aprire e chiudere Matlab
• interfaccia grafica
• directory path:
>>cd
>>cd ..
>>cd(’percorso_directory’)
oppure usare current directory browser.
• assegnazione di uno scalare
>> a=3;
>> a=3 a =
3
• work space
visualizzazione delle variabili nel workspace:
>>who visualizza tutte le variabili
>>whos visualizza tutte le variabili con descrizione di struttura eliminazione delle variabili dal workspace:
>>clear
>>clear a;
oppure usare workspace browser.
• ans:
ans `e il nome della risposta pi `u recente (most recent answer),
`e quindi una variabile che vive nel work space.
• richiamo comandi:
↑ richiama ultimo comando
s+ ↑ richiama l’ultimo comando che inizia con la stringa s.
oppure usare command history browser.
• salvataggio dati:
save filename var1 var2 ... crea il file filename.mat
contente i dati relativi alle variabili var1 var2 ...
(filename deve essere una stringa).
• caricamento dati:
load ’file_dati.mat’ carica nel workspace tutti i dati
contenuti in file_dati.mat .
Vettori e Matrici
>>v=[1 2 3]; vettore riga
v =
1 2 3
>>v=[1;2;3]; vettore colonna
v =
1
2
3
>>A=[1 2 3;4 5 6;7 8 9]; matrice oppure
>>A=[1 2 3; ← ֓ 4 5 6; ← ֓
7 8 9];
A =
1 2 3
4 5 6
7 8 9
Attenzione: i nomi delle variabili sono case sensitive: si distingue tra lettere maiuscole e minuscole !!
Provare a generare matrici, vettori, scalari ...
OPS: Operatori e caratteri speciali
operatori aritmetici
operatore scalare matrice
+ a + b (A + B) ij = A ij + B ij
− a − b (A − B) ij = A ij − B ij
∗ a ∗ b A ∗ B
/ a/b = a b A/B = A ∗ B − 1
\ a \ b = a b A \ B = A − 1 ∗ B . ∗ non interessante (A. ∗ B) ij = A ij ∗ B ij
./ non interessante (A./B) ij = A B ij
ij
. \ non interessante (A. \ B) ij = B A ij
ij
Attenzione: Prodotti matriciali righe per colonne: dimensioni concordi!!!
operatori relazionali
• non esistono variabili booleane
• 0 : falso
• tutto ci `o che `e 6 = 0 `e vero
operatori == ∼ = > < >= <=
significato = 6 = > < ≥ ≤
• Ogni operatore restituisce 1 se `e vera la relazione, 0 se `e falsa.
• Tra matrici le dimensioni devono essere concordi, (A op B) ij = A ij op B ij .
• Matrici e scalari, (A op b) ij = A ij op b
operatori logici
simbolo & | ∼
significato and or not
• a op b restituisce 1 se `e vero, 0 se `e falso
• Tra matrici le dimensioni devono essere concordi, (A op B) ij = A ij op B ij .
• Matrici e scalari, (A op b) ij = A ij op b
Questi sono solo alcuni operatori: digitare al prompt
help ops
provare ad utilizzare gli operatori ...
Funzioni matriciali
matrici elementari
• A=zeros(m,n) matrice di 0 con m righe e n colonne
• A=ones(m,n) matrice di 1 con m righe e n colonne
• A=eye(n) matrice identit `a di dimensione n × n informazioni sulle matrici
• [m,n]=size(A) ritorna le dimensioni m,n della matrice A ∈ R m × n
• M=length(A) ritorna la dimensione massima di A ∈ R m × n
• isequal(A,B) ritorna 1 se A=B , 0 altrimenti
manipolazione di matrici
• A=diag(v);
A =
v 1 0 · · · 0 0 v 2 · · · 0
. . .
. .
. . . . . . .
0 0 · · · v n
• a=min:passo:max
Definisce un vettore a di n = max-min
passo + 1 elementi
con a(1)=min , a(n)=max .
• sottomatrici
A(v_row,v_col) seleziona la sottomatrice corrispondente agli indici di riga e di colonna definiti rispettivamente nei vettori v_row e v_col .
Ad es. A(1:4,2:3) seleziona la sottomatrice 4 × 2 che ha elementi nelle
righe 1 : 4 e colonne 2 : 3 .
• B=A’ assegna a B il trasposto di A , cio `e B = A T .
• concatenazione orizzontale:
A=[B1,B2,...,Bn] oppure A=[B1 B2 ... Bn] assegna alla matrice A la concatenazione orizzontale delle matrici B1,B2,...,Bn .
• concatenazione verticale:
A=[B1;B2;...;Bn] assegna alla matrice A la concatenazione verticale delle matrici B1,B2,...,Bn .
• esempio:
>>B1=[1 2 3];
>>B2=[4 5 6];
>>A1=[B1 B2]
A1=
1 2 3 4 5 6
>>A2=[B1;B2]
A2=
1 2 3 4 5 6
• sotto-assegnazione:
>>A2(1,:)=[1 1 1]
A2=
1 1 1
4 5 6
variabili speciali
variabile significato
ans risposta pi `u recente
pi π
i unit `a immaginaria
inf infinito
NaN not a number, per operazioni indefinite tipicamente 0 0
molto di pi `u ...
help elmat
funzioni elementari
trigonometriche ed iperboliche sin(x) asin(y) cos(x) acos(y) tan(x) atan(y)
atan2(y,x)
sinh(x) asinh(y) cosh(x) acosh(y) tanh(x) atanh(y)
Attenzione: nelle funzioni trigonometriche x `e espresso in radianti!!!
Altre funzioni
istruzione significato
exp(x) e x log(x) ln(x) log10(x) log 10 (x)
log2(x) log 2 (x)
sqrt(x) √
x xey x × 10 y
xˆy x y
istruzione significato
abs(x) | x | imag(x) Im (x) real(x) Re (x) conj(x) x ¯ sign(x) segno (x) floor(x) ⌊ x ⌋
ceil(x) ⌈ x ⌉
molto di pi `u ...
help elfun
Help
• >>help
• >>help \"nome toolbox"
• >>help ops
• >>help elmat
• >>help elfun
• >>help "nome funzione" ritorna la sintassi esatta.
• help html con browser.
Esercizio 1
1. Definire una matrice A , 3 × 5 di zeri (utilizzando la funzione zeros ). Definire un vettore a di dimensione 1 × 5 e assegnarlo alla prima riga di A . Definire una matrice B come la trasposta di A ed estrarne la sottomatrice C , 3 × 3 composta
dalla 2 ◦ , 3 ◦ e 4 ◦ riga di B .
2. Siano A , B quelle definite al punto 1. Definire una nuova matrice D , 5 × 3 diversa
dalla matrice nulla. Effettuare le tre moltiplicazioni:
M1=D*A M2=A*D
M3= moltiplicazione elemento per elemento tra D e B . Verificare con la funzione size che le dimensioni siano:
M1 → 5 × 5; M2 → 3 × 3; M3 → 5 × 3.
Salvare il workspace con le sole matrici A , B , C , M1 , M2 , M3 .
Tipi di dato multidimensionali
cellarray
• matrici i cui elementi sono array ; ogni elemento puo’ avere dimensioni diverse.
• definizione di un cell array :
C={A1 A2;B1 B2} assegna alla variabile C un cellarray di 2 × 2 elementi
corrispondenti alle matrici A1,A2,B1,B2
• indicizazzione:
D=C{i,j} assegna alla variabile D l’elemento ( i,j ) di C
• concatenazione orizzontale e verticale:
D=[C {A3;B3}] assegna alla variabile D la concatenazione orizzontale di
C con il cellarray {A3;B3}
D=[C;{A3 B3}] assegna alla variabile D la concatenazione verticale di C
con il cellarray {A3 B3}
strutture
• matrici i cui elementi sono accessibili attraverso campi testuali; ogni campo pu `o essere di tipo diverso e con dimensioni diverse
• definizione di una struttura vuota (non obbligatoria):
S=struct(’nome’,{},’cognome’,{},’matricola’,{});
assegna alla variabile S una struttura vuota caratterizzata dai tre campi:
nome cognome matricola
• assegnazione di valori ai campi:
>>S.nome=’mario’;
>>S.cognome=’rossi’;
>>S.matricola=652;
>>S S =
nome: ’mario’
cognome: ’rossi’
matricola: 652
• restituzione valori:
la notazione Struttura.campo restituisce il valore della struttura per il campo specificato:
>>a=S.matricola
a= 652
M-files
- Matlab pu `o eseguire sequenze di comandi da file. Questi file sono chiamati M-file perch ´e hanno estensione ’.m ’.
- La maggior parte del codice che produrrete sar `a creato e gestito tramite M-files.
- due tipi di M-files:
– script files
– function files
script files
- Uno script file consiste di una sequenza di comandi Matlab.
- Se creo un file prova.m , e lo eseguo come un comando al prompt invocando:
>>prova (N.B. il nome del file senza l’estensione)
saranno eseguite tutte le istruzioni contenute nel file prova.m .
- Le variabili generate da uno script file sono globali e quindi andranno a finire direttamente nel workspace della corrente sessione di Matlab, con le naturali conseguenze.
- Un M-files pu `o richiamare un’altro M-files, oppure pu `o richiamare se stesso in
modo ricorsivo.
gestione M-files
stringhe : s=’hello world’; quello che sta tra gli apici definisce la stringa che viene assegnata ad s .
>>s
s = hello world
disp : i comandi disp(’hello world’) , disp(s);
producono lo stesso risultato:
hello world
cio `e mostrano a schermo una stringa.
error : il comando error(s); mostra a schermo la stringa s ed interrompe l’esecuzione dell’M-file.
input : il comando d=input(s); mostra a schermo la stringa s ed aspetta la digitazione di un valore fino a che non viene premuto il tasto invio ← ֓ . Tale
valore viene assegnato alla variabile d (cfr. scanf del linguaggio C).
stringhe
- S=’sequenza di caratteri’ definisce un vettore di caratteri assegnato alla variabile S .
- funzioni correlate:
– S=char(X);
ritorna una stringa di caratteri associati ai valori di X , in codifica ASCII.
Es. >>char(123) {
– X=double(S);
ritorna i valori numerici associati alla stringa S, in codifica ASCII Es. >>double(’{’)
123
– S=[S1 S2 ... Sn];
concatenazione orizzontale di n stringhe
– S=strcat(S1,S2,...,Sn);
concatenazione orizzontale di n stringhe
– S=strvcat(S1,S2,...,Sn);
concatenazione verticale di n stringhe
– S={S1 S2 ... Sn};
crea un vettore le cui componenti sono n stringhe
– ischar(S);
restituisce 1 se S `e una stringa, 0 altrimenti
– iscellstr(S);
restituisce 1 se S `e un vettore di stringhe, 0 altrimenti – S=sprintf(format,A);
genera stringhe (cfr. printf del linguaggio C).
Es. 1 :
>> s = sprintf(’La matrice ha dimensioni %dx%d.’,2,3) s = La matrice ha dimensioni 2x3
Es. 2 :
>> s = sprintf(’%s\n’,’hello’,’word’) s =
hello
word
Esercizio 2
Creare uno script file che richiede:
1. Digitazione in ingresso di nome e cognome (usare la function input )
2. Concatenare nome e cognome verticalmente e orizzontalmente nelle quattro combinazioni possibili assegnandole a quattro diverse variabili
3. Generare i vettori dei codici ASCII relativi alle lettere del nome e cognome 4. Utilizzando la function predefinita flipdim(v,2) rigirare questi ultimi e
utilizzando char calcolarne le stringhe associate s1 e s2.
5. In uscita il file deve fare il display di due frasi :
il mio nome = s1
il mio cognome = s2
6. fare in oltre la media dei codici dei caratteri nome e cognome e generare la
Grafica
- Grafica 2D
- Traiettorie in R 3
- Superfici
Grafica 2D
Si rappresentano funzioni di una variabile: y = f (x)
Es. Funzioni del tipo: c(x) = cos(x) e s(x) = sin(x)
definizione di un vettore x :
>>x=0:0.2:4*pi;
generazione delle due funzioni calcolate su x e plot:
>>c=cos(x);
>>s=sin(x);
>>figure;
>>plot(x,c);
>>figure;
>>plot(x,s);
0 2 4 6 8 10 12
−1
−0.8
−0.6
−0.4
−0.2 0 0.2 0.4 0.6 0.8 1
x
cos(x)
funzioni correlate
- h=figure genera una nuova istanza dell’oggetto figura ed assegna alla variabile h un handle a tale figura.
- close all chiude tutte le figure aperte
- plot(x,y) plotta su grafico O xy tutte le coppie (x i , y i ) congiungendo i punti successivi con una linea.
- plot(x,y,’tratto|simbolo|colore’) definisce il tipo di tratto che congiunge punti successivi, il simbolo associato ad ogni punto, il colore.
Es. plot(x,y,’--*k’)
carattere tratto
- linea
- - tratteggio
: puntini
-. tratto punto
carattere simbolo
+ crocetta
o cerchietto
* asterisco
x ×
d rombo
s quadrato
carattere colore
r rosso
g verde
b blue
c celeste
m magenta
y giallo
k nero
w bianco
molto di pi `u ...
vedi help plot
- hold on abilita la sovrapposizione di pi `u grafici all’interno della stessa figura - hold off disabilita la sovrapposizione di pi `u grafici all’interno della stessa
figura (una nuova istanza di plot elimina tutto quello che era stato tracciato precedentemente sulla figura di riferimento).
- legend(S1,S2,...) aggiunge la legenda in base al numero di tracce:
ad ogni traccia associa la stringa S i corrispondente
- title(’Stitle’) associa la stringa Stitle al titolo della figura - xlabel(Sx) associa la stringa Sx all’asse x
- ylabel(Sy) associa la stringa Sy all’asse y
- axis([xmin xmax ymin ymax]) setta i limiti degli assi - axis equal setta le stesse unit `a di misura e gli stessi
aspect ratio sugli assi
- axis square rende la regione di rappresentazione quadrata - grid on aggiunge una griglia alla figura
- subplot(m,n,p) crea m × n finestre nella stessa figura e attiva la p -esima
da sinistra in alto
0 2 4 6 8 10 12
−4
−3
−2
−1 0 1 2 3 4
sin(x) con axis equal
0 5 10 15
1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1
cos(x) con axis square
- - - - -
0 2 4 6 8 10 12
5 4 3 2 1
0 1 2 3 4 5
tan(x) con uso di axis([ ])
_ _ _ _
_ 40 2 4 6 8 10 12
3 2 1 0 1 2 3 4
uso di legend e xlabel e ylabel
asse x
y
tan(x) cos(x ) sin(x )
asse -
-
-
-
Traiettorie in R 3
Plot di funzioni f : R → R 3 .
plot3(fx,fy,fz) visualizza le terne (f x , f y , f z ) nel sistema O xyz
−1 −0.5 0 0.5 1
−1 0 1
0 2 4 6 8
>>t=0:0.01:2*pi;
>>fx=sin(5*t);
>>fy=cos(5*t);
>>fz=t;
>>plot3(fx,fy,fz);
Attenzione: Dimensioni sempre
concordi!
Superfici
−20
−10 0 10 20
−20 0
20
−0.5 0 0.5 1
- Plot di funzioni f (x, y) : R 2 → R
- surf(X,Y,Z) genera superfici - mesh(X,Y,Z) genera griglie
superficiali
- Osservazione: f (x, y) deve essere
definita ∀ (x, y) ∈ D om(f )
- Si definiscano due vettori:
x=0:0.2:2*pi;
y=0:0.2:4*pi;
- Una funzione generale z = f (x, y) assume valori su tutte le possibili coppie
(x, y) da cui `e evidente che dim(z) = dim(x) × dim(y)
- [X,Y]=meshgrid(x,y); genera le matrici:
X contiene copie per righe di x tante volte quanto `e la dimensione di y Y contiene copie per colonne di y tante volte quanto `e la dimensione di x
- A questo punto `e possibile definire Z :
Z=f(X,Y); (senza nessun problema di dimensioni:
prodotto cartesiano di X ed Y )
-
Esempio :
>>x=-2*pi:pi/15:2*pi;
>>y=-2*pi:pi/15:2*pi;
>>[X Y]=meshgrid(x,y);
>>Z=sin(X).*cos(Y);
>>mesh(X,Y,Z);
>>surf(X,Y,Z);
colormap definisce la colorazione del surf o del
mesh .
−5
0
5
−5 0 5
−1 0 1
mesh
−5
0
5
−5 0 5
−1 0 1