• Aucun résultat trouvé

Dipartimento di Ingegneria dell’Informazione, Universit `a di Siena

N/A
N/A
Protected

Academic year: 2022

Partager "Dipartimento di Ingegneria dell’Informazione, Universit `a di Siena"

Copied!
103
0
0

Texte intégral

(1)

Laboratorio di MATLAB

Fabio Morbidi

Dipartimento di Ingegneria dell’Informazione, Universit `a di Siena

morbidi@dii.unisi.it

www.dii.unisi.it/ ∼ control/teaching

(2)

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.

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

8.2.9 Subsystems . . . 92

8.3 Esercizio 9 - Simulink . . . 93

8.4 Esercizio 10 - Simulink . . . 94

(11)

Start up

MATLAB = Matrix Laboratory

• aprire e chiudere Matlab

• interfaccia grafica

• directory path:

>>cd

>>cd ..

>>cd(’percorso_directory’)

oppure usare current directory browser.

(12)

• 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.

(13)

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 .

(14)

Vettori e Matrici

>>v=[1 2 3]; vettore riga

v =

1 2 3

>>v=[1;2;3]; vettore colonna

v =

1

2

3

(15)

>>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 ...

(16)

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!!!

(17)

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

(18)

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 ...

(19)

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

(20)

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 .

(21)

• 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

(22)

>>A2=[B1;B2]

A2=

1 2 3 4 5 6

sotto-assegnazione:

>>A2(1,:)=[1 1 1]

A2=

1 1 1

4 5 6

(23)

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

(24)

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!!!

(25)

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

(26)

Help

• >>help

• >>help \"nome toolbox"

• >>help ops

• >>help elmat

• >>help elfun

• >>help "nome funzione" ritorna la sintassi esatta.

• help html con browser.

(27)

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 .

(28)

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}

(29)

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;

(30)

>>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

(31)

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

(32)

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.

(33)

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).

(34)

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

(35)

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

(36)

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

(37)

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

(38)

Grafica

- Grafica 2D

- Traiettorie in R 3

- Superfici

(39)

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)

(40)

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’)

(41)

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

(42)

- 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

(43)

- 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

(44)

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 -

-

-

-

(45)

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!

(46)

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 )

(47)

- 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 )

(48)

-

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

surf

(49)

Esercizio 3

1. Definire e plottare la seguente funzione f (x) =

x 2 per x ≤ 1, 1/x per x > 1.

2. Calcolare la derivata di f (x) sia numericamente che in forma analitica e plottarne i valori

3. Utilizzando subplot() plottare nella stessa figura la funzione derivata e la funzione f (x) . Si utilizzino colori e tratti diversi per ogni funzione.

Esercizio 4 Calcolare la funzione f (x, y) : R 2 → R definita come il quadrato della distanza della posizione x, y , dalla circonferenza centrata in un generico X c

di raggio r . Utilizzando surf e mesh tracciare l’andamento grafico di f (x, y) .

(50)

Istruzioni di controllo di flusso

for while if

case

(51)

for

sintassi:

· · ·

for variabile = espressione istruzioni

end

· · ·

(52)

Esempio 1

n=10; x=[];

for i=1:n

x=[x,iˆ2];

end

Esempio 2

passo=0.1;

t=0.1:passo:100;

f=log(t);

plot(t,f,’-m’);

for i=2:length(t)

dfdt(i-1)=(f(i)-f(i-1))/passo;

end

hold on

plot(t(1:length(t)-1),dfdt,’:b’);

(53)

while

sintassi:

· · ·

while relazione istruzioni

end

· · ·

(54)

Esempio 3

n=0;

a=6;

while n<exp(a) n=n+1;

end

Esempio 4

n=6;

A=magic(n);

B=zeros(n);

C=[];

k=6;

while k>0

B(6-k+1,:)=A(k,:);

C=[C A(:,k)];

k=k-1;

end

(55)

if

sintassi:

· · ·

if relazione 1 istruzioni 1

elseif relazione 2 istruzioni 2

else

istruzioni 3 end

· · ·

(56)

Esempio 5

k=input(’Inserisci un numero maggiore di cento :’);

str=ischar(k);

if k>100 & ˜str

disp(’bravo!’);

delta=100-k elseif k>50 & ˜str

disp(’ci sei quasi!’) delta=100-k

elseif k>0 & ˜str

disp(’mica tanto vicino!’);

delta=100-k elseif str

disp(’ho detto NUMEROOOOO’);

else

disp(’allora sei duro!’);

delta=100-k

end

(57)

case

sintassi:

· · ·

switch espressione di switch case case valore 1

istruzioni

case { case valore 2, case valore 4, case valore 3,... }

istruzioni

otherwise istruzioni end

· · ·

(58)

Esempio 6

k=input(’Inserisci un numero da 1 a 3:’);

switch k case 1

disp(’bravo!’);

delta=100-k case {2,3}

disp(’esagerato!’) delta=100-k

otherwise

disp(’Da 1 a 3 !!!’);

delta=100-k

end

(59)

Esercizio 5

1. Generare una matrice random 100 × 100 utilizzando il comando rand

2. Estrarne la diagonale principale utilizzando un doppio ciclo for ed assegnarla ad un vettore v1

3. Estrarne la contro diagonale utilizzando while ed assegnarla ad un vettore v2

4. Plottare i vettori v1 e v2 sulla stessa figura.

(60)

Function

Sono script file con dichiarazione di funzione

Prendono parametri in ingresso e restituiscono parametri in uscita:

function [o1,o2,...]=nome_funzione(i1,i2,...);

...

istruzioni ...

Al nome del file viene associato un comando Matlab

Attenzione alla discrepanza tra nome file e nome function!!

(61)

Esempio 7

function [s,d]=sommadiff(x,y);

s=x+y;

d=x-y;

Se il file viene salvato come sommadiff.m , posso utilizzare tale funzione nel seguente modo:

>>[a,b]=sommadiff(3,5)

>>a=8

>>b=-2

Attenzione: perch `e Matlab riconosca il nome di una function come comando, `e

necessario che il file sia nella current directory

(62)

Esercizio 6

Creare una funzione che dato in ingresso un numero x ∈ N , produce il fattoriale x !

Esercizio 7

Scrivere una funzione che prende in ingresso una matrice M quadrata e restituisce l’inversa di M (naturalmente la funzione Matlab predefinita inv pu `o essere

utilizzata solo per controllare i risultati). La seguente formula indica come calcolare ogni elemento della matrice inversa:

M 1 (i, j ) = ( − 1) i+j

det(M ) det(M ji )

dove M ji `e la matrice M decurtata della j -esima riga e della i -esima colonna.

(63)

Symbolic toolbox

Il Symbolic toolbox fornisce gli strumenti per gestire il calcolo simbolico in ambiente Matlab

Calcolo:

- derivate - integrali - limiti

Algebra Lineare:

- inversa

- determinante - autovalori

Semplificazioni di espressioni algebriche Soluzioni di equazioni

Grafica

(64)

funzioni di base

• Dichiarazione di variabili simboliche:

>>syms x y z

crea nel workspace le variabili simboliche x y z

Passaggio da double a variabile simbolica:

>>sym(nome_variabile)

trasforma un double in una variabile simbolica (istanza di un oggetto simbolico).

>>A=zeros(4);

>>B=sym(A) B=

[ 0, 0, 0, 0]

[ 0, 0, 0, 0]

[ 0, 0, 0, 0]

[ 0, 0, 0, 0]

(65)

Passaggio da variabile simbolica a double :

se l’oggetto simbolico `e composto solo da numeri si usa il comando double .

>>C=double(B) C =

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0

Funzioni:

>>syms x y

>>f=1/exp(sin(xˆ2+yˆ2))

La variabile f `e ora un oggetto simbolico che rappresenta f (x) = sin(x2+y2) 1

(66)

calcolo

derivate

Si utilizza il comando:

diff(fun,var_di_der,ord_der) : Esempio 1

>>syms x a

>>s=sin(a*x);

>>dsdx=diff(s,x,1) ans =

cos(a*x)*a

>>dsdx=diff(s) ans =

cos(a*x)*a

(67)

Esempio 2

>>f=1/exp(sin(xˆ2+yˆ2))

>> diff(f,x,4) ans =

16/exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)ˆ4*xˆ4+96/

exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)ˆ2*xˆ4*sin(xˆ2+yˆ2) -48/exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)ˆ3*xˆ2+48/

exp(sin(xˆ2+yˆ2))*sin(xˆ2+yˆ2)ˆ2*xˆ4-

144/exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)*xˆ2*sin(xˆ2+yˆ2) -64/exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)ˆ2*xˆ4+12/

exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)ˆ2-16/

exp(sin(xˆ2+yˆ2))*sin(xˆ2+yˆ2)*xˆ4+48/

exp(sin(xˆ2+yˆ2))*cos(xˆ2+yˆ2)*xˆ2+12/

exp(sin(xˆ2+yˆ2))*sin(xˆ2+yˆ2)

(68)

integrali

- Calcolo di I (x) = Z

f (x) dx : fint=int(var_fun,var);

Cerca di trovare quella variabile fint t.c. diff(fint,x) = var_fun

- Calcolo di c =

Z b a

f (x) dx :

c=int(var_fun,var,a,b); calcola l’integrale definito.

Esempio 1

>>syms x a

>>s=sin(a*x);

>> int(s,x,0,2*pi/a) ans =

0

Esempio 2

>>syms x a

>>s=sin(a*x);

>>int(s,x) ans =

-1/a*cos(a*x)

(69)

limiti

Per calcolare lim

x → x +/ 0

f (x) si utilizza:

k=limit(var_fun,var,val,dir); calcola il limite della funzione

varfun per la variabile var che tende al valore val da destra se

dir=’right’ , da sinistra se dir=’left’

Esempio

>>syms x

>> limit(diff(abs(x)),x,0,’left’) ans =

-1

>> limit(diff(abs(x)),x,0,’right’) ans =

1

(70)

algebra lineare

inversa

Data una matrice simbolica A quadrata, voglio determinare B = A 1 : B=inv(A_symb);

Esempio

>> syms a b c d

>> A=[a b;c d]

A =

[ a, b]

[ c, d]

>> B=inv(A) B =

[ d/(a*d-b*c), -b/(a*d-b*c)]

[ -c/(a*d-b*c), a/(a*d-b*c)]

(71)

determinante

Data una matrice simbolica A quadrata voglio calcolare il suo determinante:

d=det(A);

Esempio

>>syms a b c d e f g h i

>>A=[a b c;d e f; g h i]

A =

[ a, b, c]

[ d, e, f]

[ g, h, i]

>> det(A) ans =

i*a*e-a*f*h-i*d*b+d*c*h+g*b*f-g*c*e

(72)

autovalori

Data una matrice simbolica A quadrata voglio calcolare i suoi autovalori:

eig(A);

Esempio

>> syms a b c d

>> A=[a b;c d];

>> v=eig(A)

v = [ 1/2*a+1/2*d+1/2*(aˆ2-2*a*d+dˆ2+4*b*c)ˆ(1/2)]

[ 1/2*a+1/2*d-1/2*(aˆ2-2*a*d+dˆ2+4*b*c)ˆ(1/2)]

(73)

semplificazione di espressioni algebriche

• f=simple(var_fun) : ricerca la forma pi `u semplice di una espressione simbolica.

• f=simplify(var_fun) : semplificazione standard.

• f=subs(var_fun,{var1 var2 ...},{val1 val2 ...})

sostituisce alle variabili var1,var2,... dell’espressione var_fun

i valori corrispondenti val1,val2,...

Esempio

>> syms a b c d

>> A=[a b 0;c d 0;0 0 3]

A =

[ a, b, 0]

[ c, d, 0]

(74)

>>v=subs(eig(A),{b,c},{0,0}) v =

[ 3]

[1/2*a+1/2*d+1/2*(aˆ2-2*a*d+dˆ2)ˆ(1/2)]

[1/2*a+1/2*d-1/2*(aˆ2-2*a*d+dˆ2)ˆ(1/2)]

>>simple(v) ans =

[ 3]

[ a]

[ d]

(75)

soluzione di equazioni

z=solve(var_fun,var)

Determina le radici dell’equazione var_fun = 0 rispetto alla variabile var . Esempio 1

>> syms x a b c

>> f=a*xˆ2+b*x+c f =

a*xˆ2+b*x+c

>> solve(f,x) ans =

[ 1/2/a*(-b+(bˆ2-4*c*a)ˆ(1/2))]

[ 1/2/a*(-b-(bˆ2-4*c*a)ˆ(1/2))]

(76)

Esempio 2

>> syms x a

>> f2=log(x)-1/5*xˆ2-a f2 =

log(x)-1/5*xˆ2-a

>> solve(f2,x) ans =

1/2*(-2*lambertw(-2/5*exp(2*a)))ˆ(1/2)*5ˆ(1/2)

(77)

grafica

ezplot

ezplot : disegna funzioni di una variabile f (x) : R → R ezplot(var_fun,[min_val max_val])

disegna la funzione var_fun nel dominio [min_val max_val]

Esempio

>> syms x

>> f=5*sin(x)ˆ2+xˆ2;

>> ezplot(f,[-pi pi])

(78)

ezsurf, ezmesh

ezsurf(var_fun,[x_min x_max y_min y_max]) : traccia superfici per funzioni f (x, y) : R 2 → R sul dominio

[x_min x_max y_min y_max]

ezmesh(var_fun,[x_min x_max y_min y_max]) traccia griglie superficiali per funzioni f (x, y) : R 2 → R sul dominio

[x_min x_max y_min y_max]

Esempio

>>syms x y

>>ezsurf(sin(x+y),[-2*pi 2*pi -2*pi 2*pi])

>>ezmesh(sin(x+y))

(79)

ezplot3

ezplot3(var_x,var_y,var_z,[t_min t_max]) : traccia traiettorie f (t) : R → R 3

Esempio 1

>> syms t

>> ezplot3(sin(t),t,cos(t),[-5*pi 5*pi])

Esempio 2

>> syms t

>> ezplot3(t,sin(t),cos(t)ˆ2,[-3*pi 3*pi])

(80)

Esercizio 8

1. definire la funzione f (x, y, z ) = e sin(x+y) + z 2 come oggetto simbolico 2. Calcolare il gradiente ∇ f (x, y, z) ed la matrice Hessiana H (f (x, y, z ))

3. plottare f (x, y) = f (x, y, z) | z=3

4. plottare f (y, z ) = f (x, y, z) | x=2y

5. plottare f (x, y) = f (x, y, z)

x=y 2 ; z= √

x

(81)

Control system toolbox

funzioni principali

tf sintassi: sys=tf(num,den);

sys : oggetto Transfer Function

num : vettore contenente i coefficienti del polinomio al numeratore in ordine decrescente rispetto alle potenze di s

den : vettore contente i coefficienti del polinomio al denominatore in ordine decrescente rispetto alle potenze di s

G(s) = 2s − 2 s 2 + 4s + 3

>>G=tf([2 -2],[1 4 3]);

G.num{1} , G.den{1} restituiscono [0 2 -2] , [1 4 3] .

(82)

zpk sintassi: sys=zpk(z,p,k) sys : oggetto Transfer Function

z : vettore contente gli zeri z 1 , z 2 , . . . , z n z della funzione di trasferimento

p : vettore contenente i poli p 1 , p 2 , . . . , p n p della funzione di trasferimento

k : guadagno della funzione di trasferimento

G(s) = k (s − z 1 ) · · · (s − z n z ) (s − p 1 ) · · · (s − p n p )

>>G=zpk(1,[-3 -1],2);

G.z{1} , G.p{1} , G.k{1} restituiscono gli zeri, i poli, il guadagno.

(83)

ss sintassi: sys=ss(A,B,C,D)

Crea un modello continuo in spazio di stato sys con matrici A,B,C,D pole sintassi: p=pole(sys)

sys : oggetto Transfer Function

p : vettore contenente i poli della funzione di trasferimento

>> p=pole(G) p =

-3

-1

(84)

zero

sintassi: z=zero(sys)

sintassi: [z,k]=zero(sys) sys : oggetto Transfer Function

z : vettore contenente gli zeri della funzione di trasferimento

k : guadagno del sistema

>> [z,k]=zero(G) z =

1 k =

2

(85)

dcgain sintassi: dc=dcgain(sys)

sys : oggetto Transfer Function

dc : guadagno in continua ( dc = G(0) )

>> dc=dcgain(G) dc =

0.6667

(86)

impulse

sintassi: impulse(sys)

sintassi: impulse(sys,t) sys : oggetto Transfer Function

t : vettore che specifica l’orizzonte temporale

impulse visualizza l’andamento temporale della risposta impulsiva

g(t) G(s)

u(t) = δ(t) U (s) = 1

y (t) = L 1 (G(s)) Y (s) = G(s)U (s)

>> impulse(G,0:0.05:10)

N.B. La risposta impulsiva `e l’antitrasformata della funzione di trasferimento

(87)

step

sintassi: step(sys)

sintassi: step(sys,t)

sys : oggetto Transfer Function

t : vettore che specifica l’orizzonte temporale

step visualizza l’andamento temporale della risposta impulsiva

g(t) G(s)

u(t) =

0 t < 0

1 t ≥ 0 U (s) = 1 s y (t) = L 1 G(s) s

Y (s) = G(s)U (s)

>> impulse(G,0:0.05:10)

(88)

c2d

sintassi: sys_d=c2d(sys_c,Ts)

Converte un sistema tempo-continuo sys_c in uno tempo-discreto sys_d

con tempo di campionamento Ts d2c

sintassi: sys_c=d2c(sys_d)

Converte un sistema tempo-discreto sys_d in uno tempo-continuo sys_c ctrb

sintassi: C=ctrb(A,B)

Calcola la matrice di controllabilit `a C = [B AB A 2 B ... A n 1 B]

obsv

sintassi: O=obsv(C,A)

Calcola la matrice di osservabilit `a O = [C ; CA; CA 2 ; ... ; CA n 1 ]

(89)

bode

sintassi: bode(sys)

Genera il diagramma di Bode del modulo e della fase della funzione sys

>> bode(G) nyquist

sintassi: nyquist(sys)

Genera il diagramma di Nyquist della funzione sys

>> nyquist(G)

ltiview

sintassi: ltiview

GUI (Graphical User Interface) interattiva per analizzare le risposte

nel tempo ed in frequenza dei sistemi LTI (lineari tempo invarianti)

(90)

Altri toolbox di Matlab

- Optimization toolbox: funzioni per l’ottimizzazione ( help optim ) - Statistics Toolbox: funzioni per la statistica ( help stats )

- System Identification Toolbox: funzioni per l’identificazione dei sistemi dinamici ( help ident )

- Signal Processing Toolbox: funzioni per l’elaborazione dei segnali ( help signal )

- Communications Toolbox: funzioni per le telecomunicazioni ( help comm ) - Image Processing Toolbox: funzioni per l’elaborazione delle immagini

( help images )

- Virtual Reality Toolbox: funzioni per l’implementazione della realt `a virtuale

( help vr )

(91)

- Neural Network Toolbox: funzioni per la gestione delle reti neurali ( help nnet )

- Partial Differential Equation Toolbox: funzioni per la risoluzione di equazioni alle derivate parziali ( help pde )

- Database Toolbox: funzioni per la gestione dei database ( help database )

- Molti altri toolbox .... vedi:

http://www.mathworks.com/products/product_listing

per una lista completa

(92)

Simulink

Simulink `e un pacchetto software di Matlab che permette di simulare ed analizzare sistemi le cui uscite variano in funzione del tempo.

Simulink si basa su una procedura in due passi:

Creazione di un modello grafico del sistema tramite utilizzo dell’editor di modelli Simulink. In questa fase l’utente specifica le relazioni matematiche che

intercorrono tra gli ingressi e le uscite del sistema.

• Simulazione delle propret `a del sistema in un intervallo temporale fissato

dall’utente.

(93)

Operazioni di base

- Creazione di un nuovo modello

- Aggiunta dei blocchi necessari (drag & drop) - Collegamento dei blocchi (drag & drop)

- Settaggio del tempo di simulazione - Salvataggio del modello

- Lancio della simulazione

(94)

blocchi standard

Sources

Sinks

Continuous

Discrete

• Math Operations

• Signal Routing

• User-Defined Functions

Subsystems

(95)

Sources

- Constant : genera un segnale costante con valore regolabile.

- Ramp : genera il segnale rampa con pendenza regolabile.

- Random Number : genera un segnale random con distribuzione normale e varianza regolabile.

- Sine : genera il segnale A sin(ω t + φ) con ampiezza e frequenza regolabili.

- Step : genera il segnale gradino con valore iniziale, finale ed istante di attivazione regolabili.

- Clock : genera in uscita il tempo di simulazione.

- From Workspace. : genera in uscita un segnale a partire da una variabile definita nel workspace: var_in=[sig_time signal] , dove

sig_time e signal sono due vettori colonna.

(96)

Esempio

>>t=1:0.01:10;

>>var_in=[t’ sin(t)’];

Sinks

- Scope : visualizza l’andamento temporale del segnale in ingresso.

- To File : dato un segnale in ingresso genera un file ’.mat’ costituito da due vettori: il vettore dei tempi di simulazione ed il segnale.

- To Workspace : dato un segnale in ingresso genera in uscita una variabile di tipo struttura od array contenente il segnale ed eventualmente il tempo di simulazione.

- XY Graph : genera la traiettoria di un punto in R 2 .

(97)

Continuous

- Derivative : calcola la derivata del segnale di ingresso.

- Integrator : calcola l’integrale del segnale di ingresso.

- Transfer Fcn : simula il sistema specificato tramite la funzione di trasferimento N (s)/D(s) .

- Zero-Pole : simula il sistema specificato tramite una funzione di trasferimento definita a partire da zeri e poli.

- State-Space : simula il sistema specificato tramite la sua rappresentazione di stato.

- Transport Delay : applica un ritardo specificato al segnale di ingresso.

(98)

Discrete

- Unit delay : ritarda il segnale tempo-discreto in ingresso di un istante di campionamento.

- Discrete Integrator : genera l’integrale tempo-discreto del segnale di ingresso.

- Discrete Fcn : simula il sistema tempo-discreto specificato tramite una funzione di trasferimento N D(z) (z) .

- Discrete Z-P : simula il sistema tempo-discreto specificato tramite una funzione di trasferimento definita a partire da zeri e poli.

- Discrete S-S : simula il sistema tempo-discreto specificato tramite la sua

rappresentazione di stato.

(99)

Math Operation

- Abs : genera in uscita il valore assoluto del segnale in ingresso.

- Gain : genera in uscita il segnale di ingresso moltiplicato per un parametro (guadagno) k regolabile.

- Sum : genera come segnale di uscita la somma dei segnali ingressi, con numero di ingressi e segni regolabile.

- Trigonometric : genera come segnale di uscita la funzione trigonometrica del segnale di ingresso specificata.

- Math Function : genera in uscita una delle funzioni elementari predefinite in Matlab, calcolata sul segnale di ingresso.

- Matrix Concaten. : genera in uscita la concatenazione di pi `u segnali in ingresso.

- Matrix Gain : genera in uscita il segnale in ingresso moltiplicato per una data

matrice.

(100)

Signal Routing

- Mux : genera in uscita un segnale multiplo (bus), costituito dall’unione di pi `u segnali di ingresso.

- Demux : genera pi `u segnali in uscita a partire da un segnale multiplo (bus) in ingresso.

User-Defined Functions

- Fcn : genera in uscita una qualsiasi funzione del segnale di ingresso ( u ) definita

dall’utente.

- Matlab Fcn : genera in uscita una qualsiasi funzione Matlab predefinita del

segnale di ingresso ( u ).

(101)

Discontinuities

- Saturation : limita il segnale di ingresso in un intervallo fissato dall’utente.

Subsystems

- Subsystem : permette all’utente di costruire sotto blocchi simulink (utile con

schemi simulink complessi).

(102)

Esercizio 9 - Simulink

1. Creare uno schema a blocchi che:

• genera una rampa di pendenza 5, con display

• alla rampa somma uno scalare k variabile nel workspace e ne fa display congiuntamente con la precedente

2. Generare uno schema a blocchi che:

• genera il segnale y(t) = sin(2t) su un orizzonte t ∈ [0, 4π]

• genera il segnale z 1 (t) = dt d y(t)

• genera il segnale z 2 (t) = y(t + π 2 )

• genera il segnale z 3 (t) = Z

y (t)dt

(103)

Esercizio 10 - Simulink

Si consideri un’asticella rotante alla cui estremit `a `e posta una massa m = 2 Kg.

La lunghezza ℓ dell’asticella `e soggetta alla seguente dinamica:

ℓ ¨ = − k

m ℓ + k

m ℓ 0 .

con ℓ 0 = 2 m e k = 3 N/m.

Le condizioni iniziali sono ℓ(0) = 0 ˙ e ℓ(0) = 1 m.

L’asticella ruota con frequenza ω = 2.5 rad/sec.

E richiesto di: `

• costruire un modello simulink di tale sistema in cui venga fatto il display

dell’andamento temporale della lunghezza dell’asticella e della posizione x ed y

della massa.

• Dare una rappresentazione grafica della traiettoria della massa in R 2 .

Références

Documents relatifs

e che se nella (1.1) è possibile separare gli indici di uno spazio in spazi diversi, le identità di struttura di talé spazio vengono separate nelle identità

terio per l’assoluta continuità di una variabile aleatoria e per la deter- minazione della densità della stessa utile, in quei casi ove sia calco- labile la

Nella nota presente si dimostra come sia possibile costruire la serie di Fourier di una distribuzione quasi peri odica a partire da una funzione, quasi periodica,

a c 1), e se S’= T, T quasi periodica, S è quasi periodica non appena è limitata; viceversa: se ogni integrale limitato di ogni distribuzione quasi periodica a

L’accès aux archives de la revue « Rendiconti del Seminario Matematico della Università di Padova » ( http://rendiconti.math.unipd.it/ ) implique l’accord avec les

bilita dal Prof. Signorini, considero una classe più vasta di moti di tra- scinamento e, con riguardo a tale classe, determino quel moto ri- spetto al quale la

un n-gruppo additivo commutativo e un semigruppo molti- plicativo con la moltiplicazione distributiva rispetto all’addi-.. zione n-aria

piccola, sia AB un segmento della retta y contenente tut- te le proiezioni ortogonali su tale retta delle sezioni comprese nella striscia considerata; dico