Laboratorio di MATLAB - dii.unisi.itcontrol/MatLab/slideMatlab.pdf · operatori logici simbolo & j...

111
DII – Universit ` a di Siena Laboratorio di MATLAB Nicola Ceccarelli Dipartimento di Ingegneria dell’Informazione, Universit ` a di Siena, Italy [email protected] www.dii.unisi.it/control/teaching Luglio 2005

Transcript of Laboratorio di MATLAB - dii.unisi.itcontrol/MatLab/slideMatlab.pdf · operatori logici simbolo & j...

DII – Universita di Siena

Laboratorio diMATLAB

Nicola Ceccarelli

Dipartimento di Ingegneria dell’Informazione,

Universita di Siena, Italy

[email protected]

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

Luglio 2005

Programma Lab. Matlab

Lun 04/07 ore 11-13 MATLAB di base: start up, funzioni di base

Mer 06/07 ore 14-18 MATLAB di base: M-files,grafica

Ven 08/07 ore 14-18 MATLAB di base: strutture, Functions

Lun 11/07 ore 14-18 toolbox: Symbolic, Esercitazione

Mer 13/07 ore 14-18 Simulink

Ven 15/07 ore 14-18 Esercitazione

Lun 25/07 ore 14-16 16-18 Idoneita

Contents

1 Start up 1

1.1 Vettori & Matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2 OPS: Operatori e caratteri speciali . . . . . . . . . . . . . . . . . . 6

1.2.1 operatori aritmetici . . . . . . . . . . . . . . . . . . . . . . 6

1.2.2 operatori relazionali . . . . . . . . . . . . . . . . . . . . . . 7

1.2.3 operatori logici . . . . . . . . . . . . . . . . . . . . . . . . 8

1.3 Funzioni matriciali . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.3.1 matrici elementari . . . . . . . . . . . . . . . . . . . . . . . 9

1.3.2 informazioni sulle matrici . . . . . . . . . . . . . . . . . . . 10

1.3.3 manipolazione di matrici . . . . . . . . . . . . . . . . . . . . 11

1.3.4 variabili speciali . . . . . . . . . . . . . . . . . . . . . . . . 14

1.4 funzioni elementari . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.4.1 funzioni trigonometriche . . . . . . . . . . . . . . . . . . . . 15

1.4.2 funzioni esponenziali . . . . . . . . . . . . . . . . . . . . . 16

1.4.3 funzioni varie . . . . . . . . . . . . . . . . . . . . . . . . . 17

1.5 Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1.6 Esercizio1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.7 tipi di dato multidimensionali . . . . . . . . . . . . . . . . . . . . . 20

1.7.1 cellarray . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

1.7.2 strutture . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

1.8 M-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

1.8.1 script file . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

1.8.2 gestione M-files . . . . . . . . . . . . . . . . . . . . . . . . 26

1.8.3 String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

1.9 Esercizio2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2 Grafica 32

2.1 Grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2.1.1 funzioni correlate . . . . . . . . . . . . . . . . . . . . . . . 34

2.1.2 Traiettorie in R3 . . . . . . . . . . . . . . . . . . . . . . . . 39

2.1.3 Superfici . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

2.1.4 Esercizio3 . . . . . . . . . . . . . . . . . . . . . . . . . . 43

2.1.5 Esercizio4 . . . . . . . . . . . . . . . . . . . . . . . . . . 44

3 Istruzioni di controllo di flusso 45

3.1 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

3.2 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

3.3 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

3.4 case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

3.5 Esercizio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

4 function 55

4.1 Esercizio 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

4.2 Esercizio 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5 Symbolic toolbox 59

5.1 Start-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5.2 calcolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.2.1 derivate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.2.2 integrali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

5.2.3 limiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.3 algebra lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5.3.1 inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5.3.2 determinante . . . . . . . . . . . . . . . . . . . . . . . . . 70

5.3.3 autovalori . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

5.4 semplificazione di espressioni algebriche . . . . . . . . . . . . . . . 73

5.5 soluzioni di equazioni . . . . . . . . . . . . . . . . . . . . . . . . . 75

5.6 grafica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

5.6.1 ezplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

5.6.2 ezsurf,ezmesh . . . . . . . . . . . . . . . . . . . . . . . . 78

5.6.3 ezplot3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

5.7 Esercizio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

6 Simulink 81

6.1 start up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

6.2 blocchi standard . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

6.2.1 Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

6.2.2 Sinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

6.2.3 Continuous . . . . . . . . . . . . . . . . . . . . . . . . . . 86

6.2.4 Discrete . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

6.2.5 Math Operation . . . . . . . . . . . . . . . . . . . . . . . . 88

6.2.6 Signal Routing . . . . . . . . . . . . . . . . . . . . . . . . 89

6.2.7 User Defined . . . . . . . . . . . . . . . . . . . . . . . . . 90

6.2.8 Subsystems . . . . . . . . . . . . . . . . . . . . . . . . . 90

6.3 Esercizio1 Simulink . . . . . . . . . . . . . . . . . . . . . . . . . 91

6.4 Esercizio2 Simulink . . . . . . . . . . . . . . . . . . . . . . . . . 92

7 Introduzione al Control toolbox 93

7.1 functions principali . . . . . . . . . . . . . . . . . . . . . . . . . . 93

7.1.1 tf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

7.1.2 zpk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

7.1.3 pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

7.1.4 zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

7.1.5 dcgain . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

7.1.6 impulse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

7.1.7 step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

7.1.8 ltiview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

DII 1

Start up

MATLAB = Matrix Laboratory

• aprire e chiudere Matlab

• interfaccia grafica

• directory path:

>>cd

>>cd ..

>>cd percorso_directory

>>cd(’percorso_directory’)

oppure usare current directory browser.

Laboratorio MATLAB

DII 2

• 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 piu recente (most recent answer), e quindi una

variabile che vive nel work space.

Laboratorio MATLAB

DII 3

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

Laboratorio MATLAB

DII 4

Vettori & Matrici

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

v =

1 2 3

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

v =

1

2

3

Laboratorio MATLAB

DII 5

>>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: nomi delle variabili case sensitive, si distingue tra maiuscole e

minuscole!!

Provare a generare matrici vettori scalari ...

Laboratorio MATLAB

DII 6

OPS: Operatori e caratteri speciali

operatori aritmetici

operatore scalare matrice

+ a + b (A + B)ij = Aij + Bij

− a− b (A−B)ij = Aij −Bij

∗ a ∗ b A ∗B

/ a/b = ab

A/B = A ∗B−1

\ a\b = ba

A\B = A−1 ∗B

.∗ non interessante (A. ∗B)ij = Aij ∗Bij

./ non interessante (A./B)ij =Aij

Bij

.\ non interessante (A.\B)ij =Bij

Aij

Attenzione: prodotti matriciali righe per colonne dimensioni concordi!!!

Laboratorio MATLAB

DII 7

operatori relazionali

• non esistono variabili booleane

• 0:falso

• tutto cioche e 6= 0 e vero

operatori == ∼= > < >= <=

significato uguale 6= - - - -

• ogni operatore restituisce 1 se e vera la relazione 0 se e falsa.

• tra matrici necessarie dimensioni concordi, (AopB)ij = AijopBij .

• matrici e scalari, (Aopb)ij = Aijopb

Laboratorio MATLAB

DII 8

operatori logici

simbolo & | ∼significato and or not

• aopb restituisce 1 se e vero 0 se e falso

• tra matrici necessarie dimensioni concordi, (AopB)ij = AijopBij .

• matrici e scalari, (Aopb)ij = Aijopb

questi sono solo alcuni operatori, ce ne sono molti di piu digitare al prompt

help ops

provare ad utilizzare gli operatori ...

Laboratorio MATLAB

DII 9

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 identita di dimensione nxn

Laboratorio MATLAB

DII 10

informazioni sulle matrici

• [m,n]=size(A) ritorna le dimensioni m,n della matrice A

• M=length(A) ritorna la dimensione massima di A

• isequal(A,B) ritorna 1 se A=B, 0 altrimenti

Laboratorio MATLAB

DII 11

manipolazione di matrici

• A=diag(v);

A =

v1 0 · · · 0

0 v2 · · · 0...

.... . .

...

0 0 · · · vn

• a=min:passo:max

questa notazione definisce un vettore di n = max−minpasso

+ 1 elementi con

x(1)=min x(n)=max.

• sottomatrici

A(v_row,v_col) seleziona la sotto matrice corrispondente agli indici di

riga e di colonna definiti rispettivamente nei vettori v_row e v_col.

A(1:4,2:3) seleziona la sottomatrice 4× 2 che ha elementi nelle righe

1 : 4 e colonne 2 : 3

Laboratorio MATLAB

DII 12

• B=A’ assegna a B il trasposto di A (B = AT )

• 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=[3 2 1];

>>A1=[B1 B2]

A1=

1 2 3 3 2 1

Laboratorio MATLAB

DII 13

>>A2=[B1;B2]

A2=

1 2 3

3 2 1

• sotto-assegnazione:

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

A2=

1 1 1

3 2 1

Laboratorio MATLAB

DII 14

variabili speciali

variabile valore

ans risposta piu recente

pi π

i unita immaginaria

inf infinito

NaN not a number, per operazioni indefinite (tipicamente 00 )

molto di piu... (help elmat)

provare ...

Laboratorio MATLAB

DII 15

funzioni elementari

funzioni trigonometriche

sin(x) asin(y)

cos(x) acos(y)

tan(x) atan(y)

atan2(y, x)

attenzione: x deve essere espresso in radianti!!!

Laboratorio MATLAB

DII 16

funzioni esponenziali

istruzione valore

exp(x) ex

log(x) log(x)

log10(x) log10(x)

log2(x) log2(x)

sqrt(x)√

x

xey x ∗ 10y

xˆy xy

Laboratorio MATLAB

DII 17

funzioni varie

istruzione valore

abs(x) |x|imag(x) Im(x)

real(x) Re(x)

sign(x) segno(x)

molto di piu (vedere help elfun)

provare....

Laboratorio MATLAB

DII 18

Help

• >>help

• >>help \"nome toolbox"

• >>help ops

• >>help elmat

• >>help elfun

• >>help "nome function" ritorna la sintassi esatta

• help html con browser.

Laboratorio MATLAB

DII 19

Esercizio1

1. Definire una matrice A 3x5 di zeri (utilizzando la function zeros), definire ora un

vettore a di dimensioni 1x5 e assegnarlo alla prima riga di A. Definire una

matrice B come la trasposta di A ed estrarne quindi la sottomatrice C 3x3

composta dalla 2,3,4 riga di B.

2. Siano A,B quelle definite al punto 1), Definire una nuova matrice D 5x3 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 function predefinita (size) che le dimensioni siano:

M1⇒ 5x5; M2⇒ 3x3; M3⇒ 5x3

salvare il workspace con le sole matrici A,B,C,M1,M2,M3

Laboratorio MATLAB

DII 20

tipi di dato multidimensionali

cellarray

• sono 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 quindi un array

• concatenazione orizzontale:

D=[C {A3;B3}] assegna alla variabile D la concatenazione orizzontale di

C con il cellarray {A3;B3}

• concatenazione verticale:

Laboratorio MATLAB

DII 21

D=[C;{A3 B3}] assegna alla variabile D la concatenazione verticale di C

con il cellarray {A3 B3}

Laboratorio MATLAB

DII 22

strutture

• matrici i cui elementi sono accessibili attraverso campi testuali, ogni campo puo’

essere di tipo diverso con dimensioni diverse

• definizione di una struttura vuota (non obbligatorio):

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’

Laboratorio MATLAB

DII 23

cognome: ’rossi’

matricola: 652

• restituzione valori:

la notazione Struttura.campo restituisce il valore della struttura per il

campo specificato

>>a=S.matricola

a= 652

Laboratorio MATLAB

DII 24

M-files

- Matlab puo eseguire sequenze di comandi da file. Questi file sono chiamati

M-file perche hanno estensione ”.m”.

- La maggior parte del codice che produrrete sara creato e gestito tramite M-files.

- due tipi di M-files:

script files e function files

Laboratorio MATLAB

DII 25

script file

- 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 (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 puo richiamare un’altro M-files, oppure puo richiamare se stesso in

modo ricorsivo.

Laboratorio MATLAB

DII 26

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’); e disp(s); producono lo stesso

risultato:

hello world

cioe fanno il display di una stringa.

error: il comando error(s); non solo fa il display della stringa s ma inoltre

interrompe l’esecuzione dello M-file.

input: il comando c=input(s); fa il display della stringa s ed inoltre aspetta la

Laboratorio MATLAB

DII 27

digitazione di un valore fino a che non viene premuto il tasto invio←↩. Tale

valore viene assegnato alla variabile c.

Laboratorio MATLAB

DII 28

String

- 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

* X=double(S);

ritorna i valori numerici associati alla stringa S, in codifica ASCII

* S=[S1 S2 ... Sn];

concatenazione orizzontale di n stringhe

Laboratorio MATLAB

DII 29

* 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

Laboratorio MATLAB

DII 30

* S=sprintf(format,A);

genera stringhe con il comando C-style sprintf().

>> s=sprintf(’sono passate %g ore ...’,2)

s =

sono passate 2 ore ...

Laboratorio MATLAB

DII 31

Esercizio2

Creare uno scriptfile eseguibile in ambiente matlab, che richiede:

1. digitazione in ingresso nome e cognome (usare la function input)

2. concatenare nome e cognome verticalmente 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) (help flipdim) rigirare

questi ultimi e utilizzando char calcolarne le stringhe associate s1 s2.

5. In uscita il file deve fare il display di due frasi...

il mio nome e s1

il mio cognome e s2

6. fare in oltre la media dei codici dei caratteri nome e cognome e generare la

stringa s3 che contiene il carattere relativo

Laboratorio MATLAB

DII 32

Grafica

- Grafica 2D

- Traiettorie in R3

- Superfici

Laboratorio MATLAB

DII 33

Grafica 2D

si rappresentano funzioni del tipo y = f(x)

ex. due funzioni c(t) = cos(t) e s(t) = sin(t)

definizione di un vettore temporale t:

>>t=0:0.2:4*pi;

generazione delle due funzioni calcolate su t:

>>c=cos(t);

>>s=sin(t);

grafica:

>>figure;

>>plot(t,c);

>>figure;

>>plot(t,s);0 1 2 3 4 5 6 7

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Laboratorio MATLAB

DII 34

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 xy tutte le coppie(xi, yi) congiungendo i punti

successivi con linea.

- plot(x,y,’tratto|simbolo|colore’) definisce il tipo di tratto

che congiunge punti successivi, il simbolo associato ad ogni punto, il colore.

Laboratorio MATLAB

DII 35

carattere tratto

- linea

– trattini

: puntini

-. tratto punto

carattere simbolo

+ crocetta

o cerchietto

* asterisco

x 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 piu help plot

Laboratorio MATLAB

DII 36

- hold on abilita la sovrapposizione di piu grafici all’interno della stessa figura

- hold off disabilita la sovrapposizione di piu 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 Si corrispondente

- title(Stitle) associa la stringa Stitle al titolo della figura

- xlabel(Sx) associa una stringa Sx all’asse x

- ylabel(Sy) associa una stringa Sy all’asse y

Laboratorio MATLAB

DII 37

- axis([xmin xmax ymin ymax]) setta i limiti sugli assi

- axis equal setta le stesse unita di misura e gli stessi ”aspect ratio”

- axis square rende la regione di rappresentazione quadrata

- grid on aggiunge la griglia alla figura

- subplot(m,n,p) crea m×n finestre nella stessa figura e attiva la p-esima

da sinistra in alto

Laboratorio MATLAB

DII 38

0 5 10

−4

−2

0

2

4

sin(x) axis equal

0 5 10 15−1

−0.5

0

0.5

1cos(x) axis square

tan(x) con uso di axis

0 5 10−2

−1

0

1

2

3

4

5sin(x) tan(x) cos(x) con legenda

asse x

asse

y

sincostan

Laboratorio MATLAB

DII 39

Traiettorie in R3

si rappresenta funzioni f(t) : R→ R3

plot3(fx,fy,fz) visualizza le terne

(fxi, fyi, fzi) nel sistema di riferimento

xyz

−1

−0.5

0

0.5

1

−1−0.8

−0.6−0.4

−0.20

0.20.4

0.60.8

10

5

10

15

>>t=0:0.01:4*pi;

>>fx=sin(5*t);

>>fy=cos(5*t);

>>fz=t;

>>plot3(fx,fy,fz);

Attenzione: le dimensioni sempre

concordi!

Laboratorio MATLAB

DII 40

Superfici

si rappresenta z = f(x, y) : R2 → R

surf(X,Y,Z) genera superfici

mesh(X,Y,Z) genera griglie superficiali

osservazione: z deve essere definito per ogni coppia possibile (x, y) ∈ D(f)

Laboratorio MATLAB

DII 41

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

Laboratorio MATLAB

DII 42

ex.

>>Z=sin(X+Y);

>>surf(X,Y,Z);

>>mesh(X,Y,Z);

colormap definisce la colorazione del surf o del mesh.

nelle demo ampia descrizione dei comandi di grafica 3D.

Laboratorio MATLAB

DII 43

Esercizio3

1. definire e plottare la seguente funzione f(t) =

t2 per t ≤ 1,

1/t per t > 1.

2. calcolare le derivate sia numericamente che in forma analitica, plottarne quindi i

valori

3. utilizzando subplot plottare nella stessa, la differenza tra le due derivate

precedentemente calcolate insieme ai tre precedenti grafici. Si utilizzino colori e

tratti diversi per ognuno.

Laboratorio MATLAB

DII 44

Esercizio4 Calcolare la funzione f(x, y) : R2 → R definita come il quadrato

della distanza della posizione x, y dalla circonferenza centrata in un generico Xc di

raggio r. Utilizzando surf e mesh tracciarne l’andamento grafico.

Laboratorio MATLAB

DII 45

Istruzioni di controllo di flusso

for

while

if

case

Laboratorio MATLAB

DII 46

for

sintassi:

· · ·for variabile=espressione

istruzioni

end

· · ·

Laboratorio MATLAB

DII 47

ex. 1

n=10; x=[]; for i=1:n

x=[x,iˆ2];

end

ex. 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’);

Laboratorio MATLAB

DII 48

while

sintassi:

· · ·while relazione

istruzioni

end

· · ·

Laboratorio MATLAB

DII 49

ex. 3

n=0;

a=6;

while (n<exp(a))

n=n+1;

end

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

Laboratorio MATLAB

DII 50

if

sintassi:

· · ·if relazione1

istruzioni1

elseif relazione2

istruzioni2

else

istruzioni3

end

· · ·

Laboratorio MATLAB

DII 51

ex. 5

k=input(’dammi 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

Laboratorio MATLAB

DII 52

case

sintassi:

· · ·switch espressione di switch

case case valore

istruzioni

case {case valore1,case valore2,case valore3,...}istruzioni

otherwise

istruzioni

end

· · ·

Laboratorio MATLAB

DII 53

ex. 6

k=input(’dammi 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(’allora sei duro!’);

delta=100-k

end

Laboratorio MATLAB

DII 54

Esercizio 5

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

rand)

2. estrarne la diagonale principale utilizzando un doppio ciclo for, assegnarla ad

un vettore v1

3. estrarne la contro diagonale utilizzando while, assegnarla ad un vettore v2

4. plottare i due vettori sulla stessa figura.

Laboratorio MATLAB

DII 55

function

sono script file con dichiarazione di funzione

prendono parametri in ingresso e restituiscono parametri in uscita:

%help funzione pippo

function [A,E,O,...]=nomefunction(B,C,D,...);

...

istruzioni

...

al nome del file viene associato un comando Matlab

Attenzione: discrepanza tra nome file e nome function!!

Laboratorio MATLAB

DII 56

ex. 5

%z=somma(x,y) fa la somma di due scalari x,y

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

s=x+y;

d=x-y;

se il file viene salvato come sommadiff.m, posso utilizzare la function

sommadiff:

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

>>a=8

>>b=-2

Attenzione: perche matlab riconosca il nome di una function come comando e

necessario che il file sia nella current directory

Laboratorio MATLAB

DII 57

Esercizio 6

creare una function che dato in ingresso un numero x produce il fattoriale x!.

Laboratorio MATLAB

DII 58

Esercizio 7

Scrivere una funzione che prende in ingresso una matrice M quadrata e restituisce

l’inversa di M (naturalmente la funzione Matlab inv puo essere utilizzata solo per

controllare i risultati). La seguente formula indica come calcolare ogni elemento

della matrice inversa:

M−1(i, j) =1

det(M)(−1)i+jdet(Mji)

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

Laboratorio MATLAB

DII 59

Symbolic toolbox

Symbolic toolbox fornisce gli strumenti per gestire il calcolo simbolico in

ambiente MatLab

Calcolo:

- derivate

- integrali

- limiti

Algebra Lineare:

- inversa

- determinante

- autovalori

Laboratorio MATLAB

DII 60

Semplificazioni di espressioni algebriche

Soluzioni di equazioni

Grafica

Laboratorio MATLAB

DII 61

Start-up

• dichiarazione di variabili simboliche:

>>syms x y z

genera nel workspace le variabili simboliche x y z

• passaggio da double a variabili simboliche:

utilizzando il comando sym(nome_variabile_senza_apici) si

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]

Laboratorio MATLAB

DII 62

• passaggio da variabile simbolica a double:

se l’oggetto simbolico e composto solo da numeri si utilizza il comando

double

>>C=double(B)

C =

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0

Laboratorio MATLAB

DII 63

• funzioni:

>>syms x y z

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

la variabile f e ora un oggetto simbolico che rappresenta f(x) = 1esin(x2+y2)

Laboratorio MATLAB

DII 64

calcolo

derivate

si utilizza il comando:

diff(var_fun,var_di_der,nth_der):

ex1.

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

Laboratorio MATLAB

DII 65

ex2.

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

Laboratorio MATLAB

DII 66

integrali

I(x) =∫

f(x)dx si utilizza il comando:

fint=int(var_fun,var);

cerca di trovare quella variabile fint t.c diff(fint,x) produce

var_fun

c =∫ b

af(x)dx si utilizza il comando:

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

ex1.

>>syms x a

>>s=sin(a*x);

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

ans =

0

Laboratorio MATLAB

DII 67

ex2.

>>syms x a

>>s=sin(a*x);

>> int(s,x)

ans =

-1/a*cos(a*x)

Laboratorio MATLAB

DII 68

limiti

limx→x

+/−

0f(x) si utilizza il comando:

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

funzione varfun per la variabile var che tende al valore val tendendo da

destra se r_or_l=’right’ da sinistra se r_or_l=’left’

ex.1

>>syms x

>> f2=abs(x);

>> limit(diff(f2),x,0,’left’)

ans =

-1

>> limit(diff(f2),x,0,’right’)

ans =

1

Laboratorio MATLAB

DII 69

algebra lineare

inversa

data una matrice simbolica A quadrata, voglio determinare B = A−1:

B=inv(A_symb);

ex.1

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

Laboratorio MATLAB

DII 70

determinante

data una matrice simbolica A quadrata ne voglio calcolare il determinante:

d=det(A);

ex1.

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

Laboratorio MATLAB

DII 71

autovalori

data una matrice simbolica A quadrata, ne voglio calcolare gli autovalori:

eig(A)

ritorna il vettore le cui componenti sono gli autovalori di A

ex1.

>> syms a b c d

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

A =

[ a, b, 0]

[ c, d, 0]

[ 0, 0, 3]

>> v=eig(A)

Laboratorio MATLAB

DII 72

v =

[ 3]

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

Laboratorio MATLAB

DII 73

semplificazione di espressioni algebriche

• f=simple(var_fun): cerca tra tutte le tecniche di semplificazione quella

che produce la stringa piu corta.

• f=simplify(var_fun): semplificazione standard e non solo.

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

sostituisce alle variabili var1,var2,... i valori corrispondenti

val1,val2,...

ex1.

>> syms a b c d

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

A =

[ a, b, 0]

[ c, d, 0]

[ 0, 0, 3]

Laboratorio MATLAB

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

Laboratorio MATLAB

DII 75

soluzioni di equazioni

f(x) = 0, data una funzione in forma di variabile simbolica var_fun se ne

puo determinare gli zeri:

z=solve(var_fun,var)

che ne determina le soluzioni rispetto alla variabile var

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

Laboratorio MATLAB

DII 76

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

Laboratorio MATLAB

DII 77

grafica

ezplot

ezplot: traccia le funzioni f(x) : R :→ R

ezplot(var_fun,[min_val max_val])

traccia la funzione var_fun nel dominio [min_val max_val]

ex.1

>>syms x

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

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

Laboratorio MATLAB

DII 78

ezsurf,ezmesh

ezsurf(var_fun,[xv_min xv_max yv_min yv_max])

traccia superfici per funzioni f(x, y) : R2 → R sul dominio

[xv_min xv_max yv_min yv_max]

ezmesh(var_fun,[xv_min xv_max yv_min yv_max])

traccia griglie superficiali per funzioni f(x, y) : R2 → R sul dominio

[xv_min xv_max yv_min yv_max]

ex.1

>>syms x y

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

>>ezmesh(sin(x+y))

Laboratorio MATLAB

DII 79

ezplot3

ezplot3(var_x,var_y,var_z,[t_min t_max]) traccia

traiettorie f(t) : R→ R3

ex.1

>> syms t

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

Laboratorio MATLAB

DII 80

Esercizio

1. definire la funzione f(x, y, z) = exp(sin(x + y)) + z2 come oggetto

simbolico

2. a partire da f(x) costruirne Gradiente ed Hessiano

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=y2;z=

√(x)

Laboratorio MATLAB

DII 81

Simulink

Simulink e un pacchetto software 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.

• Utilizzo di Simulink per la simulazione delle propreta del sistema in un

particolare intervallo temporale.

Laboratorio MATLAB

DII 82

start up

- creare un nuovo modello

- aggiungere i blocchi necessari (drag & drop)

- linkare i blocchi (drag & drop)

- settare il tempo di simulazione

- salvare il modello

- lanciare la simulazione

Laboratorio MATLAB

DII 83

blocchi standard

• Sources

• Sinks

• Continuous

• Discrete

• Math Operation

• Signal Routing

• User Defined

• Subsystems

Laboratorio MATLAB

DII 84

Sources

Constant: genera un segnale costante con valore regolabile.

Ramp: genera il segnale rampa con pendenza regolabile.

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

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

Step: genera il segnale gradino con valore iniziale finale e istante di attivazione

regolabili.

Clock: genera in uscita come segnale il tempo di simulazione.

From Worksp.: 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 rappresentanti il tempo di simulazione e il segnale.

>>t=1:0.01:10;

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

Laboratorio MATLAB

DII 85

Sinks

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

To File: dato un segnale in ingresso genera un file “*.mat” che contiene una variabile

costituita da due righe, rispettivamente per il tempo di simulazione e per il

segnale.

To Workspace: dato un segnale in ingresso genera una variabile di tipo struttura od array in

uscita, contenente il segnale ed eventualmente il tempo di simulazione.

XY Graph: dati due segnali in ingresso rappresentanti il segnale delle ascisse e delle

ordinate, genera la traiettoria in R2 che questi rappresentano.

Laboratorio MATLAB

DII 86

Continuous

Derivative: genera la derivata del segnale di ingresso.

Integrator: genera l’integrale del segnale di ingresso.

Transfer Fcn: blocco che simula il sistema specificato tramite funzione di trasferimento

f(s) = N(s)D(s) .

Zero-Pole: blocco che simula il sistema specificato tramite funzione di trasferimento definita

a partire da poli e zeri.

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

Laboratorio MATLAB

DII 87

Discrete

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

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

Discrete T. Fcn: blocco che simula il sistema tempo-discreto specificato tramite funzione di

trasferimento f(z) = N(z)D(z) .

Discrete Z-P: blocco che simula il sistema tempo-discreto specificato tramite funzione di

trasferimento definita a partire da poli e zeri.

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

rappresentazione di stato.

Laboratorio MATLAB

DII 88

Math Operation

Abs: genera come segnale di uscita il valore assoluto di quello di ingresso.

Gain: genera come segnale di uscita il segnale di ingresso moltiplicato per un

parametro k regolabile.

Sum: genera come segnale di uscita la somma degli ingressi, con numero di ingressi

e segni regolabili.

Trigonometric: genera come segnale di uscita la funzione trigonometrica specificata, del

segnale di ingresso.

Math fun.: genera in uscita una delle function elementari predefinite in Matlab, calcolata sul

segnale di ingresso.

Matrix Concat.: genera in uscita la concatenazione di piu segnali in ingresso.

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

Laboratorio MATLAB

DII 89

Signal Routing

Mux: genera in uscita un unico segnale multiplo (bus), costituito dall’unione di piu

segnali di ingresso.

Demux: genera pi segnali in uscita a partire da un unico segnale multiplo (bus) in

ingresso.

Laboratorio MATLAB

DII 90

User Defined

Fcn: permette di specificare un segnale di uscita a partire da una qualsiasi funzione

del segnale di ingresso (u), scritta in linguaggio Matlab.

Matlab Fcn: permette di specificare un segnale di uscita a partire da una qualsiasi funzione

Matlab predefinita del segnale di ingresso (u).

Subsystems

Subsystem: permette all’utente di costruire sotto blocchi simulink.

Laboratorio MATLAB

DII 91

Esercizio1 Simulink

1. Creare uno schema a blocchi che:

• genera una rampa di pendenza 5, con display

• alla rampa somma uno scalare k2 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π]

• riproduce il segnale z1(t) = ddt

y(t)

• riproduce il segnale z2(t) = y(t + π2 )

• riproduce il segnale z3(t) =∫

y(t)dt

Laboratorio MATLAB

DII 92

Esercizio2 Simulink

Si consideri un’asticella rotante alla cui estremita e posta una massa m = 2Kg. La

lunghezza dell’asticella e soggetta alla seguente dinamica:

l = − k

ml +

k

ml0.

con l0 = 2m e k = 3N/m.

Con condizioni iniziali l(0) = 0 e l(0) = 1m.

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

E richiesto di:

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

dell’andamento temporale della lunghezza dell’asticella, della coordinata x ed y

della massa.

• dare rappresentazione grafica della traiettoria xy relativa alla posizione della

massa.

Laboratorio MATLAB

DII 93

Introduzione al Control toolbox

functions principali

tf sintassi: sys=tf(num,den)

output: sys un Transfer Function object

input: num vettore contente i coefficienti del numeratore ordinati in modo decrescente

rispetto alla potenza di s a cui sono relativi

input: den vettore contente i coefficienti del denominatore ordinati in modo

decrescente rispetto alla potenza di s a cui sono relativi

S =2s− 2

s2 + 4s + 3

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

Laboratorio MATLAB

DII 94

sys.num{1}=numeratore

sys.den{1}=denominatore

Laboratorio MATLAB

DII 95

zpk sintassi: sys=zpk(z,p,k)

output: sys un Transfer Function object

input: z vettore contente gli zeri della funzione di trasferimento

input: p vettore contenente i poli della funzione di trasferimento

input: k guadagno della funzione di trasferimento

S = k(s− z1) · · · (s− znz

)

(s− p1) · · · (s− pnp)

Laboratorio MATLAB

DII 96

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

sys.z{1}=zeri

sys.p{1}=poli

sys.k{1}=guadagno

Laboratorio MATLAB

DII 97

pole sintassi: p=pole(sys)

input: sys un Transfer Function object

output: p vettore contenente i poli della funzione di trasferimento

>> pole(S)

ans =

-3

-1

Laboratorio MATLAB

DII 98

zerosintassi: z=zero(sys)

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

input: sys un Transfer Function object

output: z vettore contenente gli zeri della funzione di trasferimento

output: k guadagno

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

z =

1

k =

2

Laboratorio MATLAB

DII 99

dcgain sintassi: dc=dcgain(sys)

input: sys un Transfer Function object

output: dc guadagno in continua (dc = S(0))

>> dc=dcgain(S)

dc =

0.6667

Laboratorio MATLAB

DII 100

impulsesintassi: impulse(sys)

sintassi: impulse(sys,t)

input: sys un Transfer Function object

input: t vettore che specifica l’orizzonte temporale

display: viene visualizzato l’andamento temporale della risposta impulsiva

sistema W (s)

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

y(t) = L−1(W (s)) Y (s) = W (s)U(s)

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

nota:la risposta impulsiva e l’antitrasformata della funzione di trasferimento

Laboratorio MATLAB

DII 101

stepsintassi: step(sys)

sintassi: step(sys,t)

input: sys un Transfer Function object

input: t vettore che specifica l’orizzonte temporale

display: viene visualizzato l’andamento temporale della risposta impulsiva

sistema W (s)

u(t) =

0 t < 0

1 t ≥ 0U(s) =

1

s

y(t) = L−1(W (s)s

) Y (s) = W (s)U(s)

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

Laboratorio MATLAB

DII 102

ltiviewsintassi: >>ltiview

GUI Graphical User Interface per l’analisi di sistemi

Laboratorio MATLAB