Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
La nuova guida a
MATLAB
Simulink e Control Toolbox
Liguori Editore
iI I
'I
L
l
f._
Indice
I MATLAB 3
l
1 •I
1 Elementi fondamentali
1.1 Primi passi . . . .
5
5 l
1.2 Vettori e matrici ...
1.3 Strutture . . . . . .
, , , I I I I I t t I I 8
12 I!
.. ' 1.4 Celle e arra.y di celle
1.5
, ,
Eliminazione, salvataggio e caricamento
14
15 I
1.6
1.7
1.8
Dati da file in formato non~MATLAB
I comandi di utilità .
Esercizi . . . . . . . . . . . . . . . . .
16
19
21
I
2 Manipolazione di variabili 2S
2.1 Elementi di un array . . .
2.2 Rappresenta.zionedi intervalli
. .. ' . ' ' ' 23
28
2.3 Matrici speciali ....... . 31
2.4 Stringhe di caratteri . . . . . 32
2.5 Tecniche avanzate sulla manipolazione di array 34
2.6 Esercizi . . . . . . . . . . , . . . . . , . . . . , 35
9 Operazioni scalari 39
3.1 Operazioni aritmetiche ..... . . 40
3.2 Funzioni elementari e trascendenti. 40
3.3 _Esempi .... : , ..... . 44
3.3.1 Funzioni elem entari .. 44
3.3.2 Funzioni composte . . 45
3.3.3 Funzioni razionali fratte 45
3.4 Operatori di relazione e logici 45
3.5 Esercizi ............ . 46
4 Operazioni matriciali 51
4.1 Trasposizione . . . 51
4.2 Operazioni algebriche 52
.... .....
..
e •
quadrati . . . . . . . . . . . . . . . 60
4.5.5 Decomposizione spettrale . . . . . . 61
4.5.6 Decomposizione ai valori singolari . 62
4.5.7 Fattorizzazioni LU LT e di Choleaky 62
4.5.8 Matrici in forma "echelon" ridotta per righe . 63
lt 4.5.9 Fattorizzazione QR . . ..
4.5.10 Forma cli Hesaenberg . . ,
63
64
4.5.11 Decomposizione di Schur 64
6 Grafica 73
lf 5.1 Grafici bidimensionali 73
iI
• I 4 • I 83
5.6 Altri grafici bidimensionali ... . 84
5.7 Grafici tridimensionali .... . 91
5.7.1 Funzioni di due variabili . 92
5-..7
.2 Curve para.metriche 93·
''1 5.7.3 Solidi di rotazione 94
I! 6.8 Il colore in MATLAB . 96
5.9 Illuminazione ..• ' ' ' I • -t • 100
5.10 Trasparenza .... I • 102
5.11 Stampa dei grafici 104
I 5.12 Esercizi ..... . 106
.l
INDICE iii
II Il Simulink . 177
10 Elementi fondamentali 170
10.1 Costruzione di uno schema Simulink 180
10.2 Analisi dello schema . 184
10.3 Navigare in Simulink . 186
10.4 Esercizi .. ... . 186
14 Sottosistemi 2~5
14.l Creazione di un sottosistema .. 255
14.2 Collega.mentisenza fili 258
14.3 Mask ............. . 259
14.3.1 La pagina. Icon . .. . 261
14,3.2 La pagina Initialization 262
14.3.3 La pagina Documentation .. 263
14.3.4 Un esempio di mask . . , 264
14.4 Esecuzione condizionata ..... . 264
14.5 Un esempio: un manipolatore planare 268
14.6 Esercizi . . . . . . . . . . . . . . . . . . 273
I
■
'
t
I
I
t
• I I • I
I
t
I
I I 300
303
311
l
17.6 Signa.l & Systems . 315
17.7 Sinks .. . ,
17.8 Sources , . . ... . ,
322
324
I,
17.9 Subsystems ....
17.l0Simulink Extras ..
.
.
I 7.10 .1 Additional Discrete .
328
331
331 I I 1
17.10.2Additional Linear . 332 t
17.10.3Additional Sinks 333
17.10.4Flip Flops . , , . , .
17.10.5Linee.rlzation , . , , . , . I t a I
I I I I
'
~
• t '
333
334
I
17.10.6 Transformations ' ' 334
... ..
vi INDICE
IV Appendici 465
A Funzioni di grafica avanzate 467
A.1 Oggetti grafici in MATLAB .. .. 467
A.2 Radice (Root) . , , . .. I I I I J • " 470
A.a Figure , . . . , . . , . ,
A.4 Axes .. . .
' .' 472
474
A.5 Line . , .. 478
A.6 Surface .. . 480
A.7 Image . . . 480
A.8 Text .. , .... .. . 481
B Creazione di un'interfaccia utente 483
B .1 Prima applicazione . 483
B.2 Oggetti GUI .... . 486
B.2.1 Bottoni . . . 487
B.2.2 Radio e text . 490
B.2.3 Altri comandi GUI . I I t " • 491
vlll INDICE
Bibliografia 502
t
I_
:
.L
Introduzione
MATLAB è ormai uno dei pacchetti più celebri nell'abito del calcolo scientifico.
Partito quasi due decenni fa come un programma interattivo per semplificare )e
manipolazione di matrici e il tracciamento di grafici, è ormai un ambiente estrema-
mente complesso ed articolato, grazie anche al gran numero di librerie specialistiche
(Toolbox) nei vari settori <lei)'ingegneria e della matematica applicata, scritte da
alcuni dei maggiori esperti mondiali degli specifici settori.
l.
Il nome MATLAB deriva da MATrix LABoratory; infatti è ancora il trat-
tamento delle matrici che costituisce la spina dorsale <lel programma; la parola
11laboratory 11 , invece, fornisce l'idea <li "work in progre.ss", suggerendo la tipicità
1
Parte I
MATLAB
L
)
l
l.
Capitolo 1
1
I
Elementi fondalllentali \ :
I
1.1 Primi passi l
In que to capitolo inizieremoa interagire con MATLAB. Non presupporremo al-
cuna conoscenzapregr sa dell'ambiente MATLAB,quindi partiremo dalla prima
esecuzionedel programma.
Lanciando MATLABcompare la finestra in Figura 1.1.
I
1
I..,._
• MU1ly1u -
THI.N&
ry l,et1 e T• 111•
Tu.I ,..,1
U
1,-clMUI ToOllGII ~
l ';,
,
~
\j
Too~
I-~
,;
l
Figura 1.1: La finestra iniziale di MATLAB.
f· 'I
1.-~1 6 CAPITOLO I . ELEMENTI FONDAMENTALI
11 I
I sto scopo, entra.te nel menu Viev e deselezionate tutto tranne Command Window,
ottenendo il risultato in Figura 1.2
II
ans =
13
a=4+3
• celle
1 In re&IUnon è eaa.tte.mente
coal, potete \raaclna.re Workspace11Fuorl11 dalle.8ne11tra.
le.fine11tra.
MATLAB.
8 CAPITOLO 1. ELElvIENTI FONDANIENTALI
..
vedremo nei prossimi paragrafi che in realtà i vettori sono gli elementi principali
in MATLAB, e pot1·emocostruire vettori (o matrici) di celle o di strutture.
1 5 2 6
SW=
1 MATLAB' 1
abbiamo implicitamente definito SW( 1) = 1 M1 , S\J(2) ='A', e così via; quindi se ad
esempio digitiamo
SW(5) =• I'
L
MATLAB risponde con
sw= \
\
HATLIB
Una matrice è invece una tabella, i cui elementi sono indh 1iduati da un indice
1
doppio, per riga e per colonna;
indici di colonna
l
i
1 2 3
1 3 5
indici di riga( -2 4 o \ I
4 6.3 12
1 5 -1.3
1 3
I
( -24 4 5)
o
M=
1
6.3
5
l~
-2 4 O
4 6.3,12
1 5,-1.3]
Attenzione a non commettere uno degli errori più frequenti qna.ndo si immet-
tono le matrici in MATLAB: sbagliare il numero di elementi sulle righe o suHe
II
I I~
10 CAPITOLO 1. ELEMENTI FONDA.lvIENTALI
colonne di una matrice. Si noti infatti che, avendo scelt.o una matrice M com-
posta da. 4 righe e 3 colonne 1 ogni riga. inserita in MATLAB deve essere composta
da 3 numeri (che compongono le colonne) separati da uno spazio bianco o da una
virgola.1 altrimenti il MATLAB non sa. come formare la matrice e segnala l 1errore.
Ecco còsa sarebbe successo nel caso in cui avessimo digitato erroneamente
M = [1 3 6
-2 4 O
4 12
1 5 -1.3]
MATLAB avrebbe segnalato l'errore con la seguente risposta:
??? Error using ==> vertcat
All rowe in the bracketed expreeeion must have the same
Il. number of colwnns.
Ancora. una volta, l'accesso agli elementi è indicizzato, solo che questa volta ci
servono due indici, uno per individuare la. riga e uno per la colonna. Ad esempio,
11'. -2 si trova sulla seconda riga e prima colonna, quindi sarà individuato con M(2, 1).
Concludendo questi primi cenni sulla definizione delle matrici, va evidenziato che
finora per cambiare riga abbiamo usato il tasto "invio" o "return". Questa è la
maniera più naturale per andare a ca.ponella definizione della matrice, ma non è
detto che sia la più efficiente. Una maniera alternativa è usare il punto e virgola,
questa volta oli'internoclell'iatruzione e non alla fine, per andare a.capo: la matrice
M vista.in precedenza può essere definita con
.I e, per quanto possa sembrare strano, questo è proprio quanto fa MATLAB. Ecco
perché nel 11Workspace Browser11 le variabili numeriche memorizza.te nel paragrafo
precedente avevano size 1x 1.
I Ma allora perché non pensare ad una matrice come un insieme di vettori (riga)
'!
I
l'uno sull'altro? Oppure altri vettori (questa volta colonna) l'uno accanto alraltro?
Parlando di vettori, li abbiamo visti solo come una collezione di numeri, ora invece
iniziamo a distinguerli fra vettori riga e colonna. Vedremo in seguito sviluppi
I
.i di queste osservazioni. Per ora basti dire che l'operatore due punti ':' serve a
prelevare i vettori riga o colonna. dalle matrici. Ad esempio, se vogliamo definire
il vettore v come la. prima riga della matrice M basta digitare
v=H(i,:)
che si può leggere come: "v è il vettore ottenuto prelevando da lii la. riga. 1 e tutte
le colonne",mentre se voglia.mo che u sia la seconda. colonna
1.2. VETTORI E fvIATRICI 11
u=M(:,2)
B=cat(3,A1,A2)
che fornisce
1 2
4 3
B(:,: 1 2) =
I
3 2 I
8 4 I
.
quindi il comando cat (da leggersi come: "concatena. gli elementi") si usa con la I
sintassi cat(dim,A1,A2, ... ) 1 dove dim specifica la dimensione lungo la quale si
concatenano gli elementi e Al, A2, ecc. sono le matrici (o gli array multidimen-
sionali) componenti.
In alternativa., ovvia.mente si sarebbe potuto scrivere
,
, 11
B(:,: 1 l)=Al;B(:,: ,2)=A2;
1.3 Strutture
Le strutture sono rappresentazioni di dati ben noti a.i programma.tori di linguaggi
ad alto livello quali il C o il Pascal . Si tratta di elementi che permettono la
memorizzazione di dati disomogenei in un'unica variabile (si ricordi che al contrario
matrici ed array permettono la memorizzazione solo di elementi dello stesso tipo,
ad esempio solo da.ti rea.li o sola car&tterl).
La stl'Uttm·a può essere pensato. come una scheda su cui sono memorizzati
dati diversi in 1'campi 11 opportuni. Supponiamo di voler memorizzare i dati deUa
seguente scheda in una variabile icU.C:
Nome Alberto
Cognome Cavallo
Data nascita
giorno 16
mese 3
anno 1964
inizieremo a definire una struttura per la data:
dataAC.giorno=16;
dataAC.meea:::i3;
dataAC.a.nno=1964;
successivamente potremo definire J>intera.scheda :
id_AC.Nome=1 Alberto 1 ;
id_AC.Cognome=1 Cavallo 1 ;
id_AC.Nascita=dataAC;
1.3. STRUTTURE 13
l
è evidente la possibilità. di definire strutture di strutture, come nel campo Na1cita. 1
che è e.sua volta una struttura.
\.
id.Autori•
Per acquisire maggiore familiarltà, ai provi ora a d1gitare I comandi idJ.utor i (1) 1
I
id ..Autor i ( 1) . Naee i ta e così via esplorando tutti gli elementi dell I a.rray di st rut-
tura.
Concludiamo questo paragrafo con un 1osservazione . La maniera presentata di
definire una strutture è semplice ed intuitiva., ma non è sempre la più efficiente.
MATLAB fornisce il costruttore di strutture struct che si usa nel seguente modo :
equivale a
z.Real:i=O.O;
z.Imag:0.0 i
e quindi inizializza a.zero un num ero complessoi vedr emo per inciso che in MAT-
LAB i numeri complessi ano già preienti, quindi non sarà necessario ricorrere a
questa struttura .
14 CAPITOLO 1. ELEMENTI FONDAMENTALI
si noti che, a differenza degli a.rray tradizionali, ai sono usate le parentesi graffe
per definire l'array di celle.
La stessa notazione sarà usata per riferirsi agli elementi: K{1} fornisce:
K{1}
MS s
1 2 3
ans -=
R=cell(2,2)
definiscela va.riabileR come una matrice di celle, che saranno riempite successiva-
mente.
1.5. ELINIINAZIONE, SALVATAGGIO E CARICAlvIENTO 15
Concludiamo osservando che le strutture finora vist~ possono essere fra loro
mescolate ad arbitrio: possiamo definire array di celle in cui alcune celle (o even-
tualmente tutte) contengano arra.y di strutture, i cui campi contengano altri array
di celle, o vettori, matrici numeriche , e così via.
In questa situazione il comando load IN. DATprovoca la. lettura del file e la
sua memorizzazione in una variabile con lo stesso nome del file, ovvero nel nostro
caso avremo :
xi x2 x3
o.o 3.2 4.3
0.1 2.8 4.1
0.2 5.9 4.0
0.3 1.3 3,9
Il'
I
I!
f
dlmread(nomeFile, delimitatore)
I ad esempio
A=dlmraad('data1.dat','i ');
leggaI daMnel file date.i. dat che potrebbero tJ.desemplo a.verala eeguante strut.. '
turo:
4.6;12; 6.8
-1j 45;:3 ; 1
si noti che il numero di spazi lascia.tifra un dato e l'altro è irrilevante: ciò che
conta è' la presenza de] punto e virgola.fro.un dato e l'altro, ad eccezione dell'a
capo, che viene sempre interpretato come separatore (ecco perché a fine riga non
è stato utilizzato il punto e virgola).
Vediamoora una situazione più complessa.
Supponiamo che un programma cli calcolo fornisca ad ogni esecuzione i risultati
sul file DATA3.TXT secondo il seguente formato:
Esecuzione completata con euccesso,
I risultati sono
I I
xl x2 x3
o.o 3.2 4.3
0.1 2.8 4.1
0.2 6.9 4.0
0,3 1.3 3.9
1. 7 I comandi di utilità
Aprendo il menu File-:>Preferences appare la Figura 1.6.
Vediamo solo alcuni aspetti cli queste opzioni. Abbia.mo già detto che la. rap-
presentazioneinterna dei da.MMATLABè semprein doppia. precialone.A questo
proposito può eese1 ·a utlle ancha a.ccennatea.imodidi rappresentazioned1da.Msul• I
'I
'I
matlab\elmat
matlab\elfun
matlab\specfun
-
-
-
Elementary matricea and matrix
Elementary math functions.
Specialized math functions.
,,I mat.lab\matfun Hatrix functions - numerical
matlab\datafun - Data analysis and Fourier transforms.
matlab\audio - Audio support.
matlab\polyfun Interpolation and polynomials.
1.8. ESERCIZI 21 I
matlab\funfun - Function functions
.
t - t I • • I t 4 • • , I I
a=5;
b=l;
e• [1 2 3) •;
t=(O 1;1 O];
e poi il tasto [D ricompare prima Pistruzione che definisce la variahile t, poi quella
che definisce e e così via a ritroso. Ma se digi t iamo a(IJappare direttamente a=5;.
1.8 Esercizi
Esercizio 1.1 Si memorizzino i vettori
a = ( 3 4 -5 -10 I ). b= ( -n
Esercizio 1.2 Si memorizzi la matrice identità di ordine quattro nella variabile
A.
I
I
Capitolo 2 ''
'
Manipolazione di variabili
.
r
!
I
1,
'
•
che fornisce:
x(6 .)•x(1)
per ottenere:
A=
o o o
o o o
o o 1
allora le istruzioni
C• (A B] , O=-[A; B]
forniscono:
C=O!~:).
D=OD
Si ricordi che il punto e virgola ha l'effetto di un a ca.po. Un'altra possibile
soluzione è l'uso del comando cat, cui abbiamo già accennato in precedenza, che
concatena due matrici secondo una direzione specificatai ad esempio, le matrici C 4-
1 2
3 4
2.1. ELEMENTI DI UN ARRAY 25
6 6
7 8
In seguito ci abitueremo a lavorare su indici e intervalli di indici negli array
MATLAB; per il momento basti dire che è stato creato un array tridimensionale
di cui le matrici A e B costituiscono i primi due elementi, come evi'denziatodagli
indici 1 e 2 nell 1array E, ovvero le matrici sono state concatenate lungo la terza
dimensione. In generale quindi cat (n A t B) concatena le matrici A e B lungo la
J
dimensione n.
Usando l'operator O ai può arrivare cancellare tuLti gli elementi lungo una direzione di
una matrice, il che richiede il ridimensionamento della sleSSa. Si consideri di nuovo la matrice E
e si digiti: ·
2(:,1,:)•(]
E( :,:, 1) •
2
4
&(1,:,~) •
6
1
ll~:
8
forni ce
G=
mentre
Gl={[l 2;3 4);[5 6;7 B]}
dà
26 CAPITOLO 2. MANIPOLAZIONE DI VARIABJLI
01 =
(2x2 double]
(2x2 double]
A questo punto l'array G contiene due matrici, di cui la prime. ai ricava con G{1};
se si vuole accedere all'elemento (2,2) di questa. matrice, basta digitare G{1} (2 ,2) .
Come si vede, rispetto alle matrici la visualizzazione è meno semplice, vediamo
la struttura me. non il contenuto della va.rie.bilecella. Per visualizzare il contenuto
delle celle possiamo usare il comando celldisp: ad esempio
celldisp(G)
fornisce
G{1} •
1 2
3 4
0{2} •
6 6
7 8
,.
'
G3=-{G1 etringa'}
Ci ll8petteremmo che G3 fosse uguale a.G2, come succedeva per le matrici, e invece
ecco il risultato:
G3 =
A cosa è dovuta questa differenza? Il motivo è che un array di celle può con-
tenere qualsiasi struttura da.ti, compreso un array di celle stesso, quindi questa
volta per accedere agli elementi delle matrici "sepolte" nell'array di celle dovremo
seguire un cammino più articolato: G3{1} preleva. un array di celle, il cui pri•
mo elemento (una matrice) sarà.G3{1}{1}, i cui elementi saranno no1'malmente
individuati de. indici: G3{1}{1} (2, 2),
Abbiamo visto in precedenza. che nella finestra Workspace sono visibili le dimen-
sioni delle variabili presenti nello spazio di lavoro. Tuttavia, se queste dimensioni
28 CAPITOLO 2. MANIPOLAZIONE DI VARIABILI
fornisce ma2 1 n=4. Per matrici a più dimensioni fornisce un vettore relativo alla
cardinalità su ogni direzione. size (A, dim) restituisce la cardinalità. della sola di-
mensionespecificata da di111:ad esempio aize (E, 3) fornisca 2, ovveroil numero di
elementidalla matriceE lungo la terza.dimensione. SI noti che eize è un comando
relativo o.glia.rray, quindi negli arre.y di celle fornisce la dimensione della variabile
vista come array,indipendentemente dal contenuto delle celle: ad esempio:
size(G3)
fornisce
&.nll
1 2
perché si tratta effettivamente di un array con una riga composta da due celle,
anche se la prima a sua volta è una collezione di matrici.
Infine, il numero di dimensioni di una matrice è fornito dal comando ndima:
ndims (A) fornisce 2 1 mentre ndime (E) produce 3, evidenziando che si tratta
rispettivamente di matrici bi- e tridimensionali.
In realtà. ogni matrice è memorlua.ta. lo forma vettorl&le pl!r colonne,qulndJ sarà poasiblle
riferirsi all'elemento di posto (1 1 2) della. matrice A con l(3) semplicemente oaaerva.ndo eh la ma-
trice è memorizzata come (ali ,an,a12,a22). Quando parb il numero di dimensioni della matrice
aumenta. il calcolo della corrispondenza fra indici e posizioni divenLa. più complesso. In questo ca-
so cl si può avvalere dell'istruiione sub2ind, (si legga "sub to lnd") che converte pedici ( ubscript)
in indici (ìndex); ad esempio, ,ub2ind( (2 2) , 1 • :;n calcola 1'indice corrispondente a.Ile.posizione
di pedici (1, 2) In una matrice di dimensioni 2 x 2, fornendo J, come abbiamo appena visto. La
forma generale di queata Istruzione è aub2ind(d11H1H ioni, indic•1 1 indic12, ... , indiceN) . L'o-
perazione opposta. ovvero Il passaggio dall'indice ai pedici, si ot.tiene con l'istruzione ind21ub. Si
noti p r inciso come sia intuitiva la. notazione, che ritroveremo in molte istruzioni MATLAB, in
cui il numero 2 è usato per Indicare "to" ( "da ... a ... ") sfruttando l'equivalenza della pronuncia
in Inglese,
2. 2 Rappresentazione di intervalli
Vediamo ora come rappresentare intervalli numerici in MATLAB. Un intervallo è
un insieme di numeri in cui l'informazione significativa è contenuta solo nel valore
iniziale e in quello finale, ed eventualmente nel passo di tabellazione usato.
I
x=x_min:Delta:x_max
È possibile omettere il terzo parametro, nel qual caso MATLAB assume come
valore di default 100 punti: k=linepace (-pi, pi) crea un vettore di 100 elementi.
A proposito di generazioneautomatica.di vettori, conviene cita.re subito un ope-
ratore usatis imo in MATLAB 1 Poperatore di trasposizione , (apice). Applicato ad
una matrice inverte le righe con le colonne, mentre applicato ad un vettore trasfor-
ma un vettore riga in vettore colonna (e viceversa); k=linspace (-pi .pi, 4)'
fornisce
-3.1416 )
k _ ( -1.0472
- 1.0472
3.1416
Non sempre è utile rappresentare un intervallo con un vettore di numeri e-
quispa.ziati linearmente; è noto che in musica note che distano una ottava sono
generate da vibrazioni del mezzo sonoro di frequenza doppia l'una rispetto all'al-
tra, quincli una rappresentazione frequenziale delle sette ottave di un pianoforte
privilegia un passo che si raddoppia di volta in volta piuttosto che un passo lineare
costante. Ciò è vero in generale per tutti i fenomeni che vengono analiz,zati nel
dominio della frequenza 1 . L'istruzione logspace funziona in maniera analoga a
linspace, ovvero con sintassi
1Vedi i diagrammi di Bode , al Paragrafo 21.1
lI
30 CAPITOLO 2. lvIANIPOLAZIONE DI VARJABILI
2 3
5 8
O 1
Ecco perché, come visto nel primo capitolo, per prelevare tutte le righe o
colonne ai use. l1 carattere 1 : ', per esempio B•A( 1 : 2, : ) preleva le prime 2 righe
e tutte le colonne della matrice A. Analoge.menteal sarebbe potuto digitare
( 1: 2, 1: end), dove end è una varia.bile speciale che si riferisce all'ultimo ele-
B:!IA
mento cli un array (anche se l'array è inserito in altri contesti, come in questo ca.so,
in cui indicava una colonna di una me.trice).
Infine, se a e k sono vettori di n elementi e k contiene solo O e 1, l'istruzione
a(k) preleva aolo gli elementi di a omologhi agli 1 di k: se a = (2, 4, 45 1 22) e
k = (O, 1, O, 1), allora a(k) fornisce
ans=
4 22
2.3. MATRICI SPECIALI 31
eye fornisce la matrice identità (per inciso non si è usata la. vocale I perché
essa è usata per l'unità immagina.ria, quindi si è scelta una. parola che in inglese si
pronunziasse allo stesso modo): eye(4) genera la matrice identità 4 x 4. eye(m,n)
genera una matrice m x n con tutti 1 sulla diagonale principale e zero altrove;
infine eye (size (A)) ha le stesse dimensioni della. matrice A.
zeros e ones generano rispettivamente matrici contenenti tutti O e tutti l;
chiama.te con un solo argomento generano matrici quadrate bidimensionali, per
esempio zeros(a) dà la matrice
(o
o o
o o)
o
o o o
Nello stesso modo, rand e randn generano matrici con elementi pseudocasuali,
con distribuzioni rispettivamente uniforme e norma.le
Tutti questi comandi, e.d eccezione di aya, permettono di generarea.r1·ay a plù
di due dlmeneloni: zero ■ (m, n •p, . , ) genera ru:re.ym x n x p x · · ·, Per quanto
riguarda in vecela matrice identità, essa~ definita soloper matrici (bidimeneionali).
Infine zeros (size (A)) genera una matrice di soli zeri della stessa dimensione della
matrice A.
In MATLAB è presente un comando per generare array di qualsiasi dimensione
contenenti tutti elementi uguali: si tratta di rapmat, che usato ad esempio nella
forma.repmat (6, [2 a 4] ) produce un a.rre.ytddlmenslonale di dimensioni 2 ><3 x 4 '
1'
con tutti gli elementi pari a 5. Questa stessa istruzione può essere usata per I
f
produrre matrici che siano repliche a blocchidi altre matrici : e
A-(1
-
2)
3 4
che, come si vede, equivale ad una copia a blocchi su due righe e tre colonne del
tipo
l O O O)
(
O 2 O O
A:;;: O O 3 O
O O O 4
Se invece l'argomento di diag(A) è una matrice, funziona in maniera reciproca,
ovvero preleva. la diagonale principale. quindi fornisce come risultato un vettore.
Si noti che diag non funziona su array di dimensioni maggiori di due.
Un secondo para.metro opzionale permette di assegnare gli elementi del vettore a. diagonali
secondarie: diag(a., k), dove a è un vettore di dimensione ne k un intero, ~ una matrice quadrata
di dimensione n + /kl con il vettore a sullo. k•eslma aovradiagonale se k. > O e sulle. >:-esima
eottodla.gonalese le < O. Oualmente dhg(A, k) preleva.la A:•ealmadiagonale,
A=[' oggi'
non 1
'piove'];
Un metodo più semplice per ottenere lo stesso risultato è l'uso del comando
str2mat, che raggruppa diverse stringhe in una matrice aggiungendo in coda H
numero necessario di spazi bianchi:
2.4. STRINGHE DI CARATTERI 33
L
A=str2mat('oggi' .'non'.'piove 1)
oppure dell'operatore strvcat 1 che agisce come il precedente con la sola differenza.
I ..
I
Acell={'oggi','non' ,'piove'}
oppure, dal momento che abbiamo già.definito la matrice A1 si può usare il comando
cellstr:
Acell:zcellstr(A) \
'barocco'••'balocco'
fornisce
ans =
1 1 o 1 1 1 1
restituisce
posizione=
6 11
ans =
ans =( 3 6 9)
2 5 8
1 4 7
rot90(A,k) ruota di 90k gradi.
3 2 1 )
( 6 5 4 ( 47 8 9)
5 6
9 8 7 1 2 3
• flipdim è una generalizzazione dei comandi precedenti, in quanto consente
il ribaltamento di un array rispetto ad una qualsiasi dimensione;si usa come
tlipdim(A ,dim), in cui dim specifica la dimensione rispetto a.llnquale ribal·
tare l'arra.y: ad esempio, se E è l'a.rra.ydefinito a pag. 24, allora.l'istruzione
I I
2.6. ESERCIZl 35
F-flipdim(E,3)
2. 6 Ese rcizi
Esercizio · = (-3, -4, 2, 1, O, 2, 3, 5 1 10), calcolare:
2.1 Definito si 11ettore.
J. 1 ngth(x)
2. size(x)
3. x(12)=-x(3)
Ese r cizio 2.2 Dopo aver memorizzato il vettore x = (1, 2, 3, 4, 5), ai costruisca
a partire da eSBail vettorey = (1, 3, 4, 5, 8).
x= ( 1 2 3 4 5 6 20)
e, utilizzando questo risultato, il vettore
y ;;;: ( 1 2 3 4 6 6 20 20 6 5 4 3 2 1 )
a=(O 3 6 9)
!
I b = ( 45 40 35 30 )
si costruiscail vettore
e= ( O 45 3 40 6 35 9 30 )
1
-1
A= ( O
-6
e si valuti:
A(!,2) 1 A(l:3,2:4), A([2 4),3:4) 1 A(:)
si estragga la sottomatrice di A con i termini A,; che hanno per indici di riga
i= 2, 3 e di colonna j = 2, 3.
2.6. ESERCIZI
\
37
l'
Esercizio 2.8 Sì costruiscano le matrici
r
oi iD
i,
A= (2 O O)
O 4 O ,
,.I
O O 6
t •'
Esercizio 2.9 Per tracciare il grafico della funzione riportato in Figura e.9è
·t•
:
• 1
'
necessario dispofT'edi due vettori (della stessa lunghezza) che ne rappresentinoi
valori di flBCissee di ordinate. Si costruiscanoquesti vettori in modo che i ,valori
di ascisse siqno equispaziaticon passo 0.1.
(Jlj J)
Esercizio 2.11 Questo è il primo di una serie di esercizi che hanno come oggetto
il trattamento di strutture musicali al calcolatore. Anzitutto, occorre delimitare
l'ambito in cui ci muoveremo. Ci riferiremo sempre al sistema temperato secondo
il temperamento equabile( ovvero i suoni ottenibili con un pianoforte) e considere-
l
remo, neWambito di una sola ottava, sia la scala cromatica ( ovvero quella che si
ottiene pigiando i tasti bianchi e quelli neri di un piano/orte) che quella diatonica
nella sola tonalità di do maggiore {ovveroi suoni dei soli tasti bianchi).
l
Scopo di questo primo esercizio è codificarele note con valori numerici nei due
tipi di scala.
So]uzione. La codifica della .~caladiatonica si ottiene con i numeri
interi da O a 6; si costruiscapoi l'array di celle
38 CAPITOLO 2. MANIPOLAZIONE DI VARIABILI
I! I
nomi0iat{noteDiat+1}
i
'i
'•
',·11 •
.,
Capitolo 3
Operazioni scalari
• Arrotondamento
round. all'intero più vicino
tix verso lo O
floor per difetto all'intero più vicino
ceil per eccesso aU'intero più vicino
3.2. FUNZIONI ELEMENTARl E TRASCENDENTI 41
• Approssimazioni razionali
rem r:esto di una divisione intera
rat espansione razionale
I
rats approssimazione razionale
• Fattorizzazioneintera
gcd massimo cornun divisore
I
1cm minimo comune multiplo
• Aritmetica complessa
real parte reale
imag coefficiente deH'immaginario
conj coniugato complesso
aba valore assoluto o modulo complesso
angle angolo di fase
• Segno
I sign [ funzione signum
rat,(9.22,6)
avrebbe imposto una lunghezia mos.,ima di 5 caratteri in U8cita, e il risultato sarebbe stato
All8•46/5.
rata può essere anche usato per esprimere il risultata di una serie di operazioni nel campo
dei numeri razionali tramite un elemento appartenente aUo stesso campoì ad esempio, il comando
rau(i-1/2+1/3-1/4+1/5) fornisce an1•47/60i si notl che Il denomina.tare è Il minimo comune
multiplo dei denominatori componenti.
Se rata è una funzione che mira essenzialmente alla presentazione dei risul-
tati1 rat invece si occupa dello sviluppo in fratti che porta alrapprossimazione
razionale. Dato infatti un numero irrazionale x esso è sempre approssimato dal
numero razionale definito dall'espansione troncata
1
X~ d1 + d l
3 + ds+..·+f.:
"
La funzione rat ha la seguente sintassi:
42 CAPITOLO 3. OPERAZIONI SCALARJ
il risultato è dato da due interi n e d tali che il loro rapporto verificala relazione
-_
I lx-JI~ tollxl
t
·\...l fornisce
1 + 1/(2 + 1/(2 + 1/(2 + 1/(2 + 1/(2 + 1/(2 + 1/(2 + 1/(2))))))))
'
L'operatore di fattorizzazione intera. rn•gcd (a, b) fornisce il massimo comun
.I divisore m fra i due interi a e b. Nella forma [m,c,d]=gcd(a,b)
due interi e e d tali che m = ac + bd. 1cm funziona nello stesso modo.
fornisce anche
Suglioperatori nel campo complessoc'è da. dire che MATLAB ha.i due simboli
predefiniti i e j per l'unità immaginaria. Un numero complesso z = 2 + j3 ai può
definirecon z•2+j•3, o con z=-2+1•3o con z1:12+3io infine con z•2+3j. Si osservi
che le variabili predefinite MATLAB non sono protette, per cui se per esempio alla
variabile 1 fosse stato assegnato in precedenza un valore, come accade spesso con
i cicli for i• 1 : n (che vedremo nel Capitolo 7) t ad esempio i = 2, allora z=2 +i+ 3
avrebbe dato come risultato .z:= 8; per restituire alla varia.bile i il suo significato
di unità complessa occorre ridefinirla come
i=sqrt(-1)
o più semplicementecancellarla dalla memorie.con cleu i, nel qual caso essa tor-
. na ad assumere il valore predefinito che aveva inizialmente. Inoltre la possibilità
di elimina.rel 1operatore di prodotto riguarda solo costanti numeriche, non vari-
abili: MATLABriconosce come valida l 1eapr sione z=2-+3j per definire il numero
complesso.z:= 2 + j3, ma se scriviamo
a=3;
z•2+e.j
" interpreta il simbolo aj come un unico nome di variabile, e quindi
MATLÀB
risponde con il messaggio di errore
??? Undefined function or variable aj
La soluzioneè in questo caso
a=3:
z=2+e.*j
3.2. FUNZIONI ELEMENTARI E TRASCENDENTI 43
Ct1t1,roJ•cart2pol(x.y)
convertele coppte (~1, u,)In coordina.te cartesianenelle coppie (61, p,) ln coordinate
polarl; i vo.lorl dl anomalia sono ln radianti. Nei cosi trldimensionall la conversione
~ ln coordinate cilindriche:
(teta,ro,z]•cart2pol(x,y,z)
Per la conversione in coordinate sferiche si usa
[ti,teta,ro]=cart2sph(x,y,z)
ancora una volta i valori di </Je di 8 sono in radianti. La conversione duale funziona
in maniera ovvia.
3.3 Esempi
3.3.1 Funzioni elementari
Come esempìo di quanto visto, consideriamo il problema di tabellare la funzione
logx nell'intervallo [l, 5J con paaso di tabellazione 0.1.
Ba.sta allora u are la sequenza di istruzioni:
xaa(l:.1:6) 1 ;
y=log(x);
[x y]
il risultato è:
1.0000 O
1.1000 0.0963
1.2000 0.1823
1.3000 0.2624
1.4000 0.3365
Si noti che il vettore x è stato trasposto solo per comodità visiva 1 in modo che
l'ultima istruzione visualizzi la tabella per colonne piuttosto che per righe .
3.4. OPERATORI DI RELAZIONE E LOGICI 45
t•lin1pace(•2,~,46)';
y•1xp(S•t).•1in(S•pi•t)1
Ct yl
Si noti nella seconda istruzione l'uso degli operatori * e . •, necessario perché
tanto exp(3•t) quanto sin(6•pi•t) fornisconocome risultato un vettore.
J(s) = 93
392 + 5s + 7
+ 5s2 + 7s + 12 l
per s = jw, con w E (10- 2 , 102 }; è convenienteusare ascisseequispa.ziate logaritmi-
camente, altrimenti la tabellazione sarebbe troppo rada verso l'estremo inferiore
dell 1intervallo o troppo fitta. verso quello superiore; usiamo 50 punti.
Il problema. si risolve con le seguenti istruzioni
& and
I or
:xor or esclusivo
not
Il va ore F LSO è indicato con O, il VERO con I; cosl l'operazione 2+r=4 dà.
O;si può anche lavorare su matrici: se vogliamo sapere quali elementidella matrice
\
I
I
sono divisibili per 2, basta eseguire:
•
P=(rem(J\,2)==0)
che fornisce:
~=(~! ~ ~).
Ques~oesempio fa nMcere alcune considerazioni. Si osservi che l'operatore rem,
che era stato definito su argomenti scalari o vettoriali, è stato qui applicato a una
matrice e vedremo che il suo risultato sarà ancora una matricej a questo punto
però nasceuna apparente incongruenza: l'operatore di test dì uguaglianza==-vede
al primo membro una matrice e al secondo uno scalare; che senso ha confrontare
una matrice con un uno scalare? Per rispondere a questa domanda. dobbiamo
addentrarci nell'analisi del trattamento delle matrici; lasciamo quindi in sospeso
le operazioni logiche, che poi riprenderemo nel Paragrafo 4.4, quando parleremo
di funzioni logichee riprenderemo gli operatori logici definiti in questo paragrafo,
e passiamo alla descrizione delle operazioni su matrici.
I
,·1
3.5 Esercizi
Esercizio 3. 1 Per ognuna delle coppiedi coefficienti(a, b) dell'equazioneax +b =
O riportate nella Tabella 9.1, si calcolila soluzione x con il vincolo x E Z, dove
Z è l'anello dei numeri interi. Nel caso in cui q1Jestaequazione non ammetta
soluzione, si risolva il problema
minjax
~ez
+ bi
2 5 8 13 5
4 3 28 -33 72 V2
x2 +1,,2- a
x/y b
Esercizio 3.10 Dato il vettore x ==(1, 34, 2, -12, 50, 71 O, 9), visualizzare i soli
valori maggioridi 5.
Suggerimento. Si consulti il Paragrafo5.2
48 . CAPITOLO 3. OPERAZIONI SCALARI
0.5
'
Il
Esercizio 3.11 Abbiamo visto nell'Esercizio 2.11 come codificarele note. Inizia-
mo orn la manipolazione delle sequenze di note. Tre sono i procedimenti musicali
'.
che affronteremo in questo esercizio: trasposizione, retrogradazionee inversione
rispetto a una data nota; questi procedimenti sono stati usati diffusamente in mu-
sica da Guillaime de Machaut, J.S. Bach, Arnold Schonberg,per citare solo alcuni
nomi. La trasposizione ~ l'operazione di traslare -una sequenza di note di un inter-
vallo prefissato, la retrogradazione consiste nel leggere semplicemente la sequenza
I I,1
I al contrario, mentre l'inversione rovescia il verso degli intervalli rispetto alla nota
data: ad esempio, l 1inverso della sequenza {do, do#, re} rispetto al do ~ {do, si,
I la#},
Data la sequenza {mi, re, do, fa, fa, mi}, se ne calcolino:
l
I
:
• la ,gequenzatrasposta di 2 toni verso l'alto;
• la sequenza retrogradata;
Il
,.
I
• la sequenza invertita rispetto al :wl.
'
note=[4 2 O 5 5 4)
noteTrasp=rem(note+4,12);
noteRet=fliplr(note);
noteinv=rem(2•7-note,12);
\
I
l
)
l
l
l
I
!.
Capitolo 4
Operazioni matriciali
Sì noti per inciso che questa operazione non è l'esponenziale di una matrice, che
invecesi definisce come
I i •J
4.1 Trasposizione
Come accennato in precedenza, la trasposta. di una matrice (o di un vettore) reale
el esegue con il carattere ' (apostrofo); le istruzioni:
I~
A•[1 2 3;4 6 6;7 8 OJi I
B=A'; i:
'
forniscono:
;l
I ~I
l 52 CAPITOLO 4. OPERAZIONI lv1ATRICL4..LI
I I
.'
~
'
'
I
A=(!;!),B=(~
7 8 O
54 87 ) .
3 6 O
t In realtà il carattere , dà la matrice coniugata trasposta, per cui [ 1+j 1 1-2• j] '
fornisce come risultato
( 1-j )
l + 2j
', I
Come è noto ciò è dovuto al11esigen20.di ottenere anche nel campo complesso la. norma a
partire dal prodotto acalare, ovvero conservare la relazione
1Jxll2 =< ~r,.:z:>
;,11.
.I ( 1+j )
1- 2j
II I
Si noti che la trasposta può essere eseguita anche su array di celle, nel qual caso
non ha alcun significato matematico, è solo una. maniera per alterare le dimensioni
dell'array.
Si noti peraltro che la tra.sposta non è definita su arra.y di dimensioni maggiori
di due, quindi si usa solo con vettori e matrici.
I i
J
.l
1 Si veda quanto detto a.l Paragrafo 4.5
j'
4.3. FUNZIONI SU MATRJCI 53
I
L'elevazione a potenza è ottenuta e.on il simbolo ~. Uinversa di una matrice si .
calcola con B=in v (A) oppure con B=A...( -1).
Le regole sintattiche sono quelle standard in algebra; la. somma e la differenza. .\.l
l•
sono permesse solo su matrici di uguali dimensionii per il prodotto il numero di ;,
colonne della prima matrice deve essere pari a quello di righe della seconda. Una
caratteristica di MATLAB è il consentire somma e differenza di una matrice e di
uno scalare: in questo ca.90 lo scalare è interpretato come una matrice di dimensioni
I i
1.
congruenti i cui elementi sono tutti pari allo scala.re dato. Il prodotto fra scalare
I I,,,
l
e matrice è Invece interpretato nel senso usuale, moltiplica ogni elemento della
matrice per lo scalare.
j
1;
In MATLAB abbiamo alcune funzioni elementari predefinite, che vengono di se- :!
,.
guito elencate supponendo che x sia un vettore e A una matrice predefiniti:
sia una matrice} e in J l'indice del valore massimo (o un vettore di indici nel
caso matriciale).
È possibile anche indicare esplicitamente la dimensione lungo la qua)e ricer-
care il massimo, con I'opzione:
l
[Y,I] = ma.x(X,[],dim)
Nel CBBO in cui A e B siano due matrici con le stesse dimensioni, Ywmax(A,B) deffoisce la
matrice Y i cui elementi sono i più grandi fra.gli elementi omologhidi A e B1 ovvero per
ogni elemento di Y si ha 1u,= max( tli;, baj).
• sort (x) ordina in verso crescente il vettore x. Nel caso in cui sia applicato a
matrici or-dinaogni colonna in verso crescente. Nel caso generale, permette
di specificare la. direzione lungo la quale eseguire l'ordinamento con l'opzione
2 Jn aJternativa si può usa.re ma.x(B(:))
54 CAPITOLO 4. OPERAZIONI MATRICIALI
sort(X ,dim): se dim=l ordina lungo le righe (e quindi per colonne), se dim=-2
f(er righe, se dim==3per fogli, e cosl via.
E possibile ottenere anche un vettore di permutazioni necessarie all'ordlna-
mento: (y, ind] =eort (x.) restituisce il vettore ind i cui elementi sono gli
indici del vettore x in modo che x(ind) fornisca il vettore ordinato y. Con-
siderando ad esempio il vettore x = (41 11 12 12 50}, [y, ind] =eort (x)
fornisce y = (11 12 12 41 50) e ind =
(2 3 4 1 5), che ci dà la seguente
informazione: il vettore y ordinato è formato dal secondo elemento di :z;, poi
dal terzo, dal quarto, dal primo e infine dal quinto. Si noti che sort non
altera. l'ordine nel ca.so in cui siano presenti elementi ripetuti (il numero 12
nel nostro esempio). Analogamente su matrici [Y, Ind] =sort (X) ordina per
colonne e restituisce una matrice di permutazioni.
• poly (A) fornisce i coefficienti in ordine decrescente delle potenze del poli-
=
nomio caratteristico della matrice A, p(À) I..\J-Al; vedremo nel Capitolo 6
che la stessa istruzione applicata a vettori ha un significato completamente
diverso.
• tre.ce (A) fornisce la traccia (la somma degli elementi sulla diagonale prin~
cipale) della matrice.
n
norm(A,inf) = mFL I B;J I
IIAll00 ma.a ima somma per righe
j=l
.
norm(A, 'fro') =(
IIAIIF f I I')a,1 l norma di Frobenius
l
iI
ii I l
'I,
56 CAPITOLO 4. OPERAZIONI !vlATRICIALI
I
1·
il cui risultato è
..
k
J.
4.4. OPERAZIONI LOGICHE 57
\
duale (dà 1 se tutti gli elementi di x sono 1).
Usando come argomento una matrice, questi operatori agiscono per colonne: per
esempio se A è una matrice all (A.<0.5) restituisce un vettore in cui ogni elemento
..
1
va.le 1 solo se i gli elementi della corrispondente colonna della matrice A sono minori
di 0.5, e all (all (A<O.6)) dà 1 solo se tutti gli elementi di A sono minori cli
0.5. Su array di dimensione generica, ovviamente lo stesso risultato lo ritroveremo
applicando il comando all tante volte quante sono le dimeusioni delParray, oppure
usando la forma all (A (:)<O. 5).
Infine f ind trova gli indici per cui il suo argomento ha elementi non ·nulli. In
particola.re se x è un vettore i•f ind (x) dà gli indici degli elementi non nulli 1 se
I
A è una matrice, [i ,h] tind(A) dà gli indici <liriga e colonna degli elementi non
nullii se A è un array generico di dimensione r, (i1,i2, ... ,ir]=find(A) dà gli
stessi indici secondo tutte le direzioni. È chiara l'importanza di questa funzione se
ricordiamo che le funzioni logiche restituiscono proprio Oo 1: la ricerca di elementi
non nulli diventa così una ricerca di condi2ione verificata, operazione altrimenti
gestibile, in maniera meno elegante 1 con i costrutti i f e tor; per esempio gli indici
degli elementi maggiori di 2 di una matrice A si ottengono con
i,h]=find(A>2)
Si noti che A(i, h) non dà una matrice i cui elementi sono gli elementi maggiori
di 2 della matrice .4: se
l
1 3 O)
.4 = ( 4 5 1
allora
[i ,h] •f ind(A>2)
genera i vettori i = (2 1 2), h ;;;;( 1 2 2) 1 che indica che gli elementi 021, a1'.:! e 022
sono maggiori di 2, ma B=A(i ,h) definisce la matrice
4 5 5 )
B= ( 1 3 3
4 5 5
t=O: .005:20;
y=ain(t);
si vogliono calcolare i valori della variabile indipendente t per cui sin t assume il va-
lore 0.5. Ovviamente nessun computer può risolvere in maniera esatta l'equazione
58 CAPITOL,0 4. OPERAZIONI MATRICIALI
sin t - 0.5 = O, quindi ci limitiamo ai punti f per cui Isin t- 0.51 < 6, dove 6 > O è
uno scalare sufficientemente piccolo. La.scelta del parametro /J non è immediata, in
quanto se è troppo piccolo i risultati possono essere errati : se per esempio usiamo
[m.k]=min(abs(y-0.6));
otteniamo un solo valore dell'indice k, ma la. funzione sin t interseca la retta y = 0.5
ben sette volte nell'intervallo t E [O,20J. La. soluzione è quindi:
i=find(abs(y-0.6)<0.06);
Peraltro queste fun2Jionipossono essere ricavate con dei test ripetuti in ciclo, ma questa
aoluzlon -8arebbe meno leggibile e mo.lto più lenta.: uno del punti deboli di MATLAB è proprio
la aua lente111e.
nel clc11Iterativi, par cui 1!pe68oprogtammare beo.e lrt MATLAB non significa
essere 111grado di ricostruire le funzioni tra.mite I costrutti di progre.mmazione 1 che vedremo nel
Capitolo 7, ma a.Icontrario utilizzare al meglio le funzioni di ba.se nel programmi.
Una lista più estesa degli operatori di relazione è:
c•cond(A)
c-rcond(l)
che usa la nonna l e fornisce il reciproco del numero di condizionamento. Jn entmmbi i casi
quanto più vicino è il numero di condJzionamento a 1 tanto meglio è condizionata la matrice,
quanto più tende a zero per cond e Infinito per rc:ond ,anto peggio. I
IF
4.5.2 Ortogonalizzazione e spazio nullo l·
L'istruzione
Q•orth(A)
memorizia in Q una. base ortonormale per il range della.me.trìca A, nel senso che Q è una matrice
ortoaormale le eul colonne generano lo slesao epuio dell colonne della maLrlce A. li numero di
I
'
colon.nedi Q è pari al tlUl&odi A.
M•o.ull(J.)
invece genera un matrice ortonormale le cui colonn enerano lo spazio nullo della matrice
A, ovvero costituiscono una base ortonormale dello spa ·~io nullo della matrice A. li numero di
colonne di N è pari alla nullità di A.
Ax=b
è noto che il metodo più semplice consiste nel triangolarizzare la matrice A e c lcolare le :Z:1
per soeti\uzionl euccesaive. li modo sistematico per traaformare la matrice A In una matrice
triangohue alte. p~nde il nome di elsmincuione gauwono. La faUotlzzatlol\8 LU dell(I.matrlce
A conalate nel rovnr due mo.Lrlcl,L a U tali che L ala u1111
n1atrlcetriangolare basaa a unitaria,
e U ala. trlangol&realta, e In modo che
A =LV
È chiaro a. quest.o punt.o che per risolvere il sistema di parteuz ai può
1. calcolare I., e U
2. rlsolvere L'II = I,
3. risolvere Ur,;= y
lo realtà però e nel corso delt Lriangolarizzazione 11nodegli elementi 11pi vot" ro z ro li
procedimento dovrebbe arreatarsi. È noto che q1u!stoinconveuiente può essererisolto scambiando
le righe della matrice A, Ciò porta. alla.fauorlzaazione
PA = LU
dove P è un 'opportuna matrice di permutazione. In MATLAB la cotrlepondente opere.zlone è
[L,U,P)=lu(A)
60 CAPITOLO 4. OPERAZIONI MATRICIALI
A+= vnuT
dove n = dlag(wd e w,= 1/rrh i= 11 , •• , re w, = O, i> r. In MATLAB avremo:
A:z:=b
WlchoH la m1urlceA non i lnvert.tblle;i noto eh la mancanza di lnvertlbUltà può por,a.realla
di unicità o clie1leten11della 11oluilone,
m1ncllll111&
In particollLrl'lse l18lstema di equazioni è eovradimenslona.to, ovvero li numero di Incognite è
superiore a quello di equazioni {per essere più precisi se il rango della matrice A è pari a. quello
della. matrice (A b}},a.Jloraesistono infinite soluzioni. Due pos,sibili soluzioni si ottengono con gli
operatori pinv e \: il primo minimizza. la norma della soluzione, il secondo il numero di elementi
non nulli, che risulta pari proprio al rango della matrice, come si vede dal seguente esempio.
Siano
17 24 1 8
( 23 15 )
A= 6 7 14 16 I
4 6 13 20 22
Allora le istruzioni
xspfov(,0 •b;
y:A\b
(-~:~;:~
l ( l
forniscono
! I
l'operatore hcov cerca di minimizza.re una norma opportuna.mente pesata:
II
IIAx - bll~-•= (Ax -
b)Tv- 1 (Ax - b)
e infine lsqnonneg cerca una soluzione non negativa, ovvero risolve il problema.
sottoposto a.i vincoli :r; ~ O,\fi . (Per inciso questa stessa funzione fornisce anche il t1ettoreduo.le
w, ovvero il vettore tale che wi < O xi = O e Wi = O se :ri > O). Qua.le esempio consideri.amo
l. •,·,:
,
Il problema
u)
j
0,6868 0,6260
e definiamo la matrice di p o
A=
0,5890
( 0.9304
o. 462
0.0920
0.6539
0.4160
) b=
t
o o o
l
l
o
Y= ( o
o
10
o
o
100
o
o
o
o
1000
)
Allora. le lstruiionl
X""Pinv(A)•b;
y•laqnonnag(A,b)j
z•l ■ cov(A,b,V);
l
produconole 10lu1lonl
-0.8183
2.6018
Gli errori comme.salsono
-0.1910 ) - 0.2983 ) -0.0030 )
Aa, - b =
( -0.2427
- 0.0600 '
( 0.1225 A _ b = ( -0 .0078
Ay - b= - 0.1292 ' z 0.2070
0.3899
Si ooti che per effetto della matrice di peso V la soluzione
ogni riga..
0.554.0
z;
0.6693
commette un errore che cre.si::eac1 l
4.5.5 Decomposizione spettrale
La decomposizione spettral è la più nota fra le decomposizioni di una matrice A e consiste nel
trovare una matric diagonale h i cui elementi sulla. diagonaJe sia.no gli autovalorì di A e una
matrice ortonormale U le cui colonne sia.no gli autovettori , t.a.le che l
In MATLAB:
CO,l.1111bda.l
•eig(A)
A=U -5
4.
r
62· CAPITOLO 4. OPERAZIONI MATRICIALI
[U , Lambda)
lJ
-.. elg(X)
I (V,D] • cdf2rdt(U,Lubda)
fi !I V •
l.0000
o
0.4002
0.647Q
-0.0191
o
o o 0.8479
D ..,
, 1 o o
I• o 4 6
o -6 4
[U,Laabda] ■ 1ig(A,8)
A= utvT
dove U è llll& ma\rice mx m orLonormale,V una.ma.trlce n xn ortonormale e E = dtag{111 1 ••• 1 cr,.)
I
I In MATLAB si uaa I 1istruzione
(U,Sigma,VJ•evd(A)
I
4.5. 7 Fattorizzazioni LULT e di Cholesky
1 Una matrice A elmmetrlce. e definita poeitiva può eseere fe.ttorizze.ta come
i A= LDLT
! dove L è una matrice unitaria. Lriangolare bassa e D è una matrice diagonale con elementi
sulla dlasonale posiii vi. In pacticolare la fattorizzazione precedente pub essere riscritta come
l.
J
•
4.5. COA,fPLEMENTISULLE .MATRICI 63
A= Lo½o½LT = RRT
dove R è-una. maLrlcetriangolare alta. Questa è conosciuta come Jattorizzo.zione di Cholesku,
e la matrice R prende il nome di fattore di Chole,k11o "radice quadrata" della. matrice A. In i '
MATLAB la corrispondente istruzione è
R=cbol(A)
nullo di una riga cresce riga. per riga fino a quando restano eYentualmente solo righe nulle; il "
primo elemento non nullo di una. riga è detto elemento distinto dello. ma.trice echelon. Sono ad
esempio matrici echelon
n
3
o 7
o o o
o o o
2 o
1 -3
o
4
o o
5
2
6 -nn 1
o o
o o o t
o o o o
3 o o
1 o -3
2
o
4
n (4.1)
In particolare una matrice echelon è detta ridotta per nghe St: gli elementi distinti sono
• gli unici elementi non nulli nelle rlspeLtlve colonne,
• uguali a. uno
QuJndl la. seconda. matrice delle (4,1) è ridotta per righe, È poseibllu dlmoslrate che ognl ma--
trlce può essere portata in forme. echelon ridotta. per righe ~ramlte una sequenza di operazioni
elementari. In pnrticolare in MATLAB l'istruzione che porta una matrice A in forma echelon
ridotta per righe ( Row Reduced Echelon Fonn) è
B•rref(A)
4.5.9 Fattorizzazione QR
Per ogoi vettore w non nullo si definisce la corrispondente trosfonnazione di Hauseholdercome
una. matrice simmetrica. della forma
H=f - ~WWT
/j
dove {J = ½llwll~• Una. matrice di Householder è ortogonale, e quindi con erva le lunghezze dei
vettori cui h a.pplicata. Per ogni coppia di vettori o e b di uguale lunghezaa eaiete une. matrice di
Haueeholder coetrulta eu un vet ore di Hau11holderw che ll trasforma. l'uno nell'a.ltro:
1 T) wTa
Ha.= ( 1-Qww a=a-wT=b
In particola.re una rotazione piana è una speciale trasformazione ortogonale ussta per an-
nullare un singolo elemento di un vettore e si dim08tra e88ereequivalente ad una trasforma.zloae
di HaUBholder. Le proprietà delle matrici dl HtLusholderìmplica.no che una sequenza di n. matrici
{Hd,i = l, ... ,n può eeaere moltipllcsta. a sinistra per ona matrice A mx n di rango n per
.
ridurla In forma triangolare alta:
.I
Hn•··H'lHtA=QA= (:)
dove R è una. matrice n x n non singolare e tri&ngolare alta. e Q una ma.trice ortogonale prodot.-
to delle matrici di Haueholder. Qoesta è chiamata. trasformazione QR della matrice A. In
MATLAB:
64 CAPITOLO 4. OPERAZIONI MATRICIALI
(Q,R)•qr(A)
Se A non ha rango pieno di colonne (ovvero non ha tutte le colonne indipendenti} ma ha.
rango r è necessario uno scambio di colonne per portare le r coJoone indipendenti nell prime r
posizioni. A questo punt.o la faLtoriizazione diventa:
QAE= ( ~ )
11
,, 4,5.10 Forma di Hessenberg
Una matrice A si dice In formo di Hu,enberg se tutti i suol elementi gotto la. prima.sottodiagona.le
ono nulli. L'istruzione
A= PHPT
In questo modo avremo quindi:
pTAP= u~ i j D
dovo con l'aaterleco si sono Indicati elementi Il cui valore numerico non intere&!!&
esplicita.re al
fine di evidenziare la struttura. della matrice.
che produce la. forma CLJmpleua di Schur se la matrice A ha almeno un elemento compleiso, e la
forma reale di Schur se A ha tutti elementi reali: nel primo ca.sola matrice T sarà triangola.re alta
con gli autovalori di A sulla diagonale, nel secondo invece avrà gli autovalori rea.li sulla diagonale
e quelli complessi in blocchi 2 x 2 sulla diagonale. La funzione MATLAB rd2cst converte la
ji forma. rea.le di Schur in complessa .
f..
l
:I
.L
4.6. ALTRE MATRICI SP ECIALJ 65 l
4.6 Altre matrici speciali
Abbiamo visto &l Paragrafo 2.3 uo insieme dì operatori MATLAB che permettono di costruire
alcune matrici di frequente uso in a!gebraj l'elenco è completato in questo paragrafo.
Le modalità di uso dl queste funzioni sono different i. Limitiamoci solo a quelle di uso più
frequente, mentre per le altre si può consultare il manuale o l'help in linea .
compan richiede un vettore: p"'[l O -7 8), A•compan(p) genera :
A=(!~ ~6)
Si ricordi che la caratteristi ca peculiare delle matrici in forma compagna è che il polinomio
caratteristico ha per coefficienti proprio gli elementi del vettore p.
tril e triu operano in maniera analoga a diag au matrici: triu(A 1 k) preleva la parte
triangolare alta della matrice A a partire dalle. k-eslma diasonaltt (ancore. una volta k > O è una
sovndlagonale, k < O ~ una 10ttodlagonale), Analogament trU per la. parte trtanaolarebaasa,
rand(111 n) genera una matrice m ><n con elementi uniformemente distribuiti nell'Intervallo
(O, l); con un solo argomento la matrice è quadrata . nndn(m,n) funziona nella. stessa maniera,
ma la distribuzione è normale a media nulla e varianza. unita.ria.. C'è da sottolineare che queste
due funzioni usano generatori e semi distinti.
4. 7 Esercizi
Esercizio 4 .1 Date le matrici:
~
3 2+j -3j )
A= ( 2 4- 2j 5 + 6j
-4 8 8 1- j
si calcoli:
+4za - 3:z:« = 2
6x1 - 5:z::a
Esercizio 4.4 Per ognuna delle seguenti coppiedi vettori
J, 'U = (2, -3, 6), V= (8, 2, -3)
2. U := (3, -5, 4), V= (6, 2, -1)
3. U = (3, -5, 2 1), V= (4, 1, -2, 5)
1
A= ( -~ ~ ~
O 3 -1
-6 O 4
e .si analizzino i seguenti comandi:
1. size(A)
2. max(A), max(max(A))
:J. p=poly(A)
4. det(A), eig(A}, [v,d]aeig(A)
Esercizio 4.6 Si calcolinola riga e la colonna degli elementi massimo e minimo
della matrice A definita nell'esercizio pre.cedente.
Esercizio 4. 7 Il segnale riportato in Figura 4,1 è l 'usdta di un ponte raddrizza•
tore trifase, Esaoi costruitoconaidertmdo istante per istanteil più grande dei
tJaloriaaauntida, tre segnalil/l = flint, 112= 8ln(t + 21r/3) e l/a = eln(t + 41r/3),
Si memonzzfoo itl due vettori i valori di aaciasae ot·cUnata del segnale.
1J-----
-.....-
----------------
•I
I
Esercizio 4,8 Calcolareuna base e la dimensione dello 8patio generato dai vet-
tori:
1.
68 CAPITOLO 4. OPERAZIONI !YIATRICIALI
I I x + 2y -3z = a
3x - y + 2z = b
x - 5y + Bz - e
ammetta soiuzfone.
1 -3 3) (-3 1 -1 )
A= ( 3 -5 3 1 B= -1 5 -1
6 -6 4 -6 6 -2
Si noti che in realtà la matrice B non è diagonalizzabile, cosa che può essere
i.I verificata calcolando il rango della matrice degli autovettori con diversi valori del
parametro cl&edefinisce la tolleranza.
I
4.7. ESERCIZI 69 L I
.l
Esercizio 4, 14 Si calcoli la decompo3izianeai valori singolari delle matrid defi•
nite nell'esercizio precedente. 1.
Esercizio 4.15 In poesia la sestina è unn particolareforma compositivafondata
sulla permutazione di sei parole in sei versi e in sei strofe. Detto in m,miem
semplificata, una sestina è compoata r.Usei strofe, ognuna delle quali consta dì
tH!i versi (in realtd le strofe sono sette, ma l'ultima, di soli tre versi, non sarà
l I
I
consideratain questo esercizio); la particolarità della sestina è che nei complessitJi
36 versi l'tiltima parola è vincolata ad appartenere a un insieme di sei parole,
determinate dalla prima strofa, secondo un ordine di permutazione deter·minato
dalla seconda strofa. Quindi, composto ln prima strofa, che impone le parole, e
l
la seconda, che ne determina la permutazione, gli altri e4 versi hanno un finale
obbligato. Si consideri ad esempio la sestina di Petrarca (Canzoniere, 992) la cui
prima strofa è
l
Mia benignafortuna, e 'l viver lieto,
i chiari giorni, e le tranquille notti,
e i soavi sospiri, e 'l dolce.stile
!
che solea resonare in versi e 'n rime,
vòlti subitamente in doglia e 'n pianto,
odiar vita mi fanno e bramar morte. l
Le parolefinali sono state evidenziate. La strofa stlccessiva è
Crudele., acerba, inesorabil Morte,
cagion mi dai di mai non esser lieto,
ma di menar tutta mia vita in pianto,
l
e i giorni oscuri e le dogliosenotti.
I miei gravi sospir non vanno in rime,
e 'l mio duro martir vince ogni stile.
l
Si noti che le parolefinali sono sempre Je stesse, ma disposte ìn ordine diverso:
la prima della prima strofa (lieto) diventa in seconda nella seconda strnfa, la secon-
da (notti) diventa la quarta, ecc. La terza strofa sarà costruita in maniera coerente:
Morte, prima parola finale della secondastrofa, diventa la finale del secondo verso
I
della terza strofa e co,i uia di seguito. L'operazionedi permutazione può esae,ie l
descritta matematicamente come le potenze successive di un'operazione elementare
1
matriciale {uno scambio di righe, se ogni parolafinale del verso è memorizzata in
una matrice).
Si determini la matrice di peroiutazione e quindi le parole finali obbligate
dei succes3ivi 24 versi {in 1'ealtàquesta sestina ha ben dodici strofe, oltre alla
tredicesima di tre versi, ma la struttura è sempre la stessa).
l
Suggerimento. Il prodotto di una matrice per un vettore di stringhe ~
una matrice di numeri che può essere riconvertita in vettore di stringhe
con il comando setstr.
l
!; t.
70 CAPITOLO 4. OPERAZIONI MATRICIALI
•.·.
I
'·I •
'I
l.
1·
i
!
I
I
I
f
I
I '
. 'I
.,
'
l. '
l
t!
Capitolo 5
Grafica
11·
1-
..,.
-.,
.. :r- 0.5
. 04
·i'·
0.3
' . I
02
I I !'
0.1
''
"'
Questo primo esempio presenta. alcuni punti da evidenziare. Per prima cosa
osserviamo che la scalatura degli assi è automatica.; inoltre la finestra reca ìl titolo
"Figure No. 1" per evidenziare che si traUa della prima finestra. Infine i punti
traccia.ti sono congiunti da linee a tratto pieno.
L'istruzione plot ammette un parametro opzionale di tipo stringa (racchiuso
fra apici) per definire iJ tipo e il colore dei vari grafici.
· Abbiamo quattro tipi di linea, cinque di punti e otto colori base. Si consulti la
Tabella 5.1.
Volendo quindi tracciare i punti del vettore Y dell'esempio precedente con dei
cerchi verdi (senza congiungerli) useremo l'istruzione
plot ( V• 1 og' )
title('Sequenza di punti')
xlabel( 1 ascisaa')
ylabel('ordinate')
grid
5.1. GRAFICI BIDIJvlENSIONALI 75
t 2 0: . 05: 4•pi;
y=sin(t)i
plot(t.y)
I '.
Ovviamente il tipo e il colore del grafico possono ancora essere definiti con i
caratteri della Tabella 5.1: lo stesso grafico tracciato con una linea rossa a tratto- I.
punto si ottiene con plot ( t , y, 'r-. 1 ).
Infine, la forma più completa del comando plot prevede altri parametri, di
seguito esemplificati:
plot(t,y,'LineStyle 1 1 1- 1 ,'LineWidth',6,'Color' ,'y')
O.I
o.e ,.
0,7
o.a
IHIO generico
lo.s
0.4
0.3
/
usollltrea:Ie
0.2
O.I
2 3 4 5 6 7
3,cissg
Inserire testo con il mouse è una soluzione rapida ed efficiente, ma talvolta Il testo deve essere
posizionato In maniera precisa in un ben specificato punto del grafico . Per inserire un testo in
modo eaatto in un punto definito da una ben precisa coppia di coordinate, esiste il comando
text(x,y,'{\rm\em tes~o}')
che posiziona. la 11trlngadi caratteri teato nel punto di coordinate (:ti7/), Questi tre parametri
posaono essere anche vettoriali (delle atea.se dlmen.alonl} nel qual caso l'elemento i-esimo del
vettore di testi viene collocato nel punto di coordinate (:i I v1
),
x•O:pi/20:10:
y11co1(2•x);
indx•!ind(abs(y)>0.99);
!igux-e(2);
plot(x,y); uis((O 10 -1.6 1.6)):
text(x(indx),y(indx}, 1 eatramal i ','HorizontalAlignment',. ,,
'center•, 'FontAngle','italic');
posiziona il testo nel punto selezionaLo schiacciando ìl pulsante sinistro del mouse sulla finestra
grafica desìderata . Può essere comodo per posiziona.re più linee di testo, memorizzate in lln a.rray
di celle, in un solo colpo .
5.1. GRAFICI BJDJ 1ENS10NALI 77
ll
I
i
{ I
2 4 8 8 to 12
Inoltre, uaando i menu grafi il è possibile a.vere un 'elevata flessibilità nel trat-
tamento d i grafici. Ad e.gempio, possiamo selezionare gli axes (ossia la cornice)
I;
•'
78 CAPITOLO 5. GRAFICA
Per esempio per tracciare il grafico delle funzioni y = sin t e y = cos t per
t E {O,21r]usiamo le seguenti istruzioni
t=(O: .1:2•pi)';
Y=[sin(t),coe(t)];
plot(t,Y)
5.2. GRAFICI MULTIPLI 79
\kappa. K \lambda ,\ I,
\mu µ. \nu V
\xi ( \o o
\pi 7r \varpi 'CV
\varsigma ç \tau r
\upsilon V \phi rp
\chi X \psi 1/J
\omega w \Gamma r
\Delta 6 \Theta e
\Lambda A \Xi ..
.....
\Pi Il \Sig,na E
\Upailon T \Phi t
\Omega n
Tabella 5.2: Stringhe TEX-
2. Se invece gli intervalli sulle Mciaae sono diversi usiamo plot con più argo-
menti:
traccia i grafici delle coppie di uettori (Xi,Yi), i=l, ... ,n. Per tracciare il
grafico di ein t per t E [O,3] e coet per t E [1,4) ueiamo (Flgura. 5.6)
tl=(0:.1:3)';
y1=sin(t1);
t2=(1:.1:4)';
y2=cos(t2);
plot(t1,y1,t2,y2)
0.8
O .◄
0.2
..0.2 0.8
- 0.4
0 .4
-0 .6
0.2
-o.a
o
o o.e
-1
'i
I
o 20 40 60 80 100 120 140 160 180 2.00
IJ
I
plot (X1,Y1)
e.xis(axis)
hold
plot(X2,Y2)
plot(X3,Y3)
I $\vdots$
I 1
plot(Xn,Yn)
I i
\
u
I
i i
o \ i .
-0 .2
--0.4 !
--0.8
I
I
-0.8
i
-f
o 0.5 1.5 2 2.5 3 3.5 4
Per distinguere i diversi grafici nella finestra può essere utile una legenda espli~ '
I
cativa.,disponibilecon Ucomandolegend . Su una finestra au cui aia.notraf!ciateN 'J
curve, legend( • strfogaJ' 1 • • • , 1 stringaN1 ) crea una legenda in cui ad ogni tipo
di linea è B..'lsociatala corrispondente stringa. I
I
1 ~
} i,
'J
5.3 Scal atura degli assi \·
'
. !
'
Abbiamo detto che la acalatura degli assi è automatica, ma spesso capita di volerla
ridefinire. A questo scopo si usa il comando axia, una cui possibile applica.2.ione
abbiamo già visto in congiunzione con il comando hold. Esso ha tre modi principali
l
di funzionamento:
• a.xis ( [xmin xmax ymin ymax]) definisce i valori estremi di ascissa e ordi-
nata; dopo aver tracciato il grafico è possibile alterarne la scalatura tramite
! I
I
I
I
l,..I .l
I
I
!
! ,.
I ;
I I
82 CAPITOLO 5. GRAFICA ·
questo comando.
v=axis memorizza nel vettore vi limiti correnti. Si noti che attribuire il valore int
a uno degli estremi degli intervalli equivale ad usare il valore estremo del grafico:
a.:ds([-inf inf -inf inf]) equivale a axis('auto').
Gli a.Itri modi di funzionamento di u:is sono:
• uia ( • ij •) usa le coordinate matriciali, in cui l'asse vertice.le è diretto verso il basso
(secondo il verso di incremento degli indici in una matrice),
• &\~•( 'xy') usa le coordinate cartesiane, in cui l'asse verticale è diretto verso l 'a.lto.
• ade(' tq\lare') defioface una regione grafica quadrata.,
• uh ( 'equal •) imposta uguali fattori di scala sugli assi.
• uh ( 1 tight 1) riduce le dimensioni degli assi al minimo dettato dai limiti del disegno.
• axh( 'ott •) dlse.ttiva li tracciamento degli a.sai.
• uh ('on') attive. Il traccia.mento degli assi.
L'sff'eUo di diverse forme del comando ui1 è illustrato in Figura 5.7, In cui si è tr&cciata
un 'elll88lcon asse maggiore pari a 2 e minore pari a l (Il grafico con I faUorl di sc&lanella glusta
proporzione è eq,ual.
,~.----------..
I .,
I: !
Per tracciare una curva nel piano complesso bisogna. usare un solo vettore com- I
plesso: se X è un vettore complesso, plot (X) equivale a.plot (real (X) , imag (X)) . I 'lf .
I
Per tracciare più grafici nel piano complesso bisogna usare il metodo 3 illustrato : ~:
I
nel Paragrafo 5.2 o in alternativa. il metodo 2 disegnando in ascissa le parti reali
e in ordinata i coefficienti dell'immaginario. Poiché spesso (si pensi alle radici dei
polinomi e ai luoghi delle radici) le curve nel piano complesso non sono connesse
è importante specificare il tracciamento tramite punti piuttosto che linee.
subplot(m,n,p)
Per spezzare la finestra corrente in quattro sottofinestre (due righe e due colonne} . -.
e selezionare quella.in baBsoa sinistra (riga 2 e colonna 1) si usa
eubplot(2,2,3);
subplot(2,2,2);
Esempio:
0.8 o.e
O.li o.e
0.4 0.'4
0.2 02
o o
o 0.2 0.'4 o.a 0.8 o 0.2 0.4 0.6 o.e
Ten:o1ubpto1 Quar101ubpto1
o.e o.a
0.6 0.6
0.4 0.4
0.2 0.2
o o
o 0.2 0.4 0.8 0.8 o 0.2 0.4 0.8 0.8
·1
subplot(l,1,1);
I
5.6 Altri grafici bidimensionali
In questo ultimo paragrafo sugli elementi fondamentali di grafica bidimensionale
sono raggruppate tutte le funzioni che consentono una rappresentazione dei dati
diversa da quella finora vista con assi lineari cartesiani.
semilogx traccia l'asse x in scala log10 e l 1asse y lineare; i suoi parametri sono
identici a quelli di plot.
aarnllogx
1.4
1.2
0.8
I.
0.6
0.4
0.2
,0-1..__ ___________ __
o
10·1 ,00 IOt O 20 40 80 80 100
.
I :
i-20
-30
-40.._ ________ __.
1~ ., ,,
w(radrl)
(, ' .
Figura 5.9: Grafici Ioga.ritmici. l
polar(teta,ro) traccia grafici in coordinate polari; l'angolo va immesso in ra-
dianti, ma gli assi sono tracciati in gradi; inoltre non è possibile usare ar-
gomenti multipli (se non usando il metodo 3 di pag. 79). Ad esempio, la
Figura 5.10 è stata tracciata digitando il comando
polar(linspace(0,2•pi).linspace(0,1))
j
bar, area e pie tracciano diagrammi a barre, ad area e a torta rispettivamente;
invocati con argomenti di uscita, come ad esempio [Xb, Yb]=bar (X, Y) non
tracciano grafici, ma restituiscono vettori tali che il comando plot (Xb, Yb)
I
, 11
86 CAPITOLO 5. GRAFICA
• 1.
I
90
11
l;i;
I .
l
lf
o
i
lt
'
\
I
t
,:
l
t
l 270
'
' ? tra.cci i dia.grammi a. barre o gradini. Ciò è utile per esempio quando si
1 . devono tracciare sulla stessa figura dia.grammi sia continui che discretizza.ti
nel tempo. È possibile usare argomenti multipli secondo il metodo 1 di
'{ pag. 78 solo se i vettori da tracciare sono immessi come vettori colonna.
~ Ecco ad esempio un insieme di dati ricavato dalle quotazioni in borsa. di tre
'~
i titoli del mercato azionario italiano durante una settimana:
' ~
R=[2.714 3.901
l I 2.685 3.871
2.284
2.315
2.675 3.818 2.305
\
( 2.745 3.878 2.285
~ 2.698 3.859 2.286];
3
e
• i
I
2
o
lun mar mar glo van luo mar mar gio van
balti(A.'sw:k'I bat:J(R,'group')
4
3
ITIBJ
mer
glo
YGO
o 2 4 6 e 10
subplot(2,2 1 4) 1 bar3(R,'group')
eet(gca,'yticklabel',giorni)
title('bar3(R,''group 11 ) 1 )
Xl
IO
,1
10
I 9 10 11
avrebbe più senso chiedersi quale titolo abbia avuto il tasso di crescita più
elevato, ma manteniamo Pesempiosemplice),
S1digitino i seguenti comandi
t=O: .1:lO;y=sìn(t).•exp(-t/3);
td=O:lOìyd=sin(td).•exp(-td/3);
subplot(2,1,1),plot(t,y, 1 : 1 ),hold on
stem(td,yd),title( 1 stem,),grid
5.6. ALTRI GRAFICI BIDilvlENSIONALI 89
l
n==lOOi
y=rand(n,1);
hist(y,20)
siem
o.e
I
-.
0.8
I I
Il
0.4
slBlrs
0.8
0.8
0.4
0.2
o
--OJl
-0 ,4
o 2 3 4 5 6 7 8 9 IO
subplot(2,1,1)
n=100iy=rand(n,1);
hiet(y,20);title(i1 00 campioni')
subplot(2,1,2)
n=10000;y=rand(n,1);
hist(y,20);title('1 0000 Ca.lllpioni')
f plot traccio. il grafico di funzioni BBsegnate,Le sue due forme più interessanti
sono: '
fplot('funzione',[xmin xmax])
:1
e
[x,y]=fplot('funzione',[xmin xmax])
1oo campioni
10
e
8
10000camp I
800
500
400
300
200
100
Prima di analizza.re queste tre possibilità, pub essere utile una discussione sul modo in cui
si ridefinisce il punto di visla , ovvero il punto dal qua.le ai osserva. il gra.fico tridimensionale.
MATLAB permette di defìnire solo l'angolazione da. cui si oss,nva il grafico, e non la distanza. dn.
esso. Per fare ciò sono necessarie tlue varia.bili a.ngolari, l'azimut 8 e l'elevazione</>,che possiamo
pensare come longitudine e latitudine rispettivamente. Riferendosi e.I disegno in Figura. 6.16, si
vede che 8 è misurato a partire dal semiasse negativo delle y. l ve.lori predefiniti sono 8 = -37.5°
e t/J= 30°. È possibile a.Iterare questi valori con il comando vievj esso funziona priocipo.lmente
in due modi:
• viev(11.z,el) impone che il punto di vista sia. quello specificato dai valori di az (8) e el
(4>)in gradi.
92 CAPITOLO 5. GRAFICA
CX,Y]•meshgrid(x,y)
u
definlecela.mo.trlceX che avrà tante righe,tutte ugualial vetto1·aai1 quantisono
gli elementidl fii e dualmente Y ha tante colonne, tutte ugualia y 1 quanti aono
gli elementi di x; in questo.modo il punto di generiche coordinate (z, dli) potrà
essere ricavato dalle matrici X e Y come (X( i , j) , Y(i, j)] .
=
Volendo ad esempio calcolare i valori della funzione z sin x cos y per x E {O,4)
e y E [-2, l) ·si possono usa.re le seguenti istruzioni
x=O: .1: 4;
y•-2:. 1: 1 i
[X,Y]=meshgrid(x,y)j
Z=sin(X).•cos(Y);
surf(X,Y,Z);
xlabel('Assa x 1 );
ylabel( 1 Asse y•); \
zlabel('Assa z');
o.a
0.6
o.•
... 0.2
J o
wQ,2
-0 .~
..0 .6
-0 .8
I
d
lfi
'
A11sey -2 O
Aa&IJC
t=0:.1:10•pi;
r=exp(t/10);
x=r.•cos(t);
y=r.•sin(t);
z=ti
plot3(x.y,z);
cylinder (O: . 1: 2)
5.7. GRAFICI TRIDI&fENSIONA.LI 95
mash(X,Y,Z) conlour(x,y,Z,20)
' .
.
o .
...
;-,,.,,,,.
't,, '
~:•
-.;
, . --·-~
I•/,•••
~-v-
I
I
;.,,
•• • ~••
•
- .,.~•-:i.;.
~,I
_/
•::
,::~;:i4~:
-1
2
-2 O 3 4
·,
conlourJ(x,y,Z,30)
,,
I''
!'
o
-1 I;
1
-2 O -2 O
[X,Y,Z)-cylinder(r);
che genera le tre matrici X i Y e Z che possono essere usate tramite surf o meeh
per disegnare la superficie. Ultima osservaiiione: cylinder per default costruisce
i solidi ruotando di 18° ogni punto in r, o in altri termini considera 20 punti au
ogni circonferenza. Per imporre un numero n di punti per ogni circonferenza basta
usal'e un secondo parametro: cylinder(r ,n).
j,
96 CAPITOLO 5. GRAFICA
30
-10
-20 -20
l !
''
r
i:
,,
:i
/'
l Il q
I.
Figura 5.20: Il comando cylinder
letturai può essere selezionato anche dal menu a tendina Inurt della figura.
I .,'I
Interpretato un colore come una. misura, si pone il problema di definire una "scala di colori".
Coa\ come la acalatura degli assi è automatica., anche l'aaeegnulone del colori a.Ivalori da rappre- ~
sentare è automatica, ovvero il primo colore definito nella mappa corrente è associato a1 valore \
più basso da rappresentare, l'ultimo a quello più alto . Di conseguenza esiste anche il comando
cuh, che permette di ridefinire gli "assi di colore": supponiamo dei voler rappresentare un ..
·.·
l
insieme di da.ti i cui valori siano distribuiti neU'intervallo (O, 10); eseguendo +·
~
cuia( [O 6])
tracciata. Questo parametro manifesta la sua utilità per la rappresentazione di funzioni di tre i
variabili, il che con un approccio cartesiano richiederebbe uno spazio tetradimensionale . Si pensi
a.clesempio al problema di rappresentare la distribuzione di temperatura sulla. superficie di un
solido; ìn tal caso ogni punto sarebbe ca.re.tterizzato dalle tre coordinate spazia.li e da.l valore dl
I:,i1••·
. :,
temperatura.. Un~ possibile rappl'esentazione è quella che uea le coordina.le spazia.li per tracciare :l
.
Il disegno del solido e Il colore per indicarne le temperatura. Per fare clb occorre definire una
matrice di dati relativi alla tempera.tura in ogni punto e uearla come quarta matrice. Per inciso,
risultati più leggibìll si ottengono con l'uso di surt piuttosto che con mesh. Ad esempio, si
consideri il plano z = :z:+ y rappresentato sull'insieme x E {O,51 , y E [O,5}; si voglia. rappresentare
I.. I•.:
,,
'Il
;
anche una quarta variabile w che assuma il valore massimo al centro del rettangolo (O,5] x IO ,6}, I '
per esempio w = exp(-(:c - 2.5) 2 - (y - 2.5)2) . Una possibile sequenza di istruzioni MATLAB
che esegue tale compito è (Figura 5.21)
ll:;·
t
!
\
98 CAPITOLO 5. GRAFICA
11, ~
e
l O.li
...··...
1·11
'•
I 10 ''• o.a
·•.
( 8
0.7
1-1
I 8
{
il
•,I
2
I
\I
r 5
1:1
' ~
o o
l)
1hadin5 intup deflnlsce Il modo con cul el passe. tla. un colore all'altro (In queato cuo tramite
lnter1Johu1lone,
L&11ce.lotura.
In modo da ottenere un effetto sfumato} e nrà. brevemente deacrltte. nel 11egulto.
autome.~lcadegli 11118111 di colore" M!locerebbe Il bla11Goa.I mMelmo valore &aeunto
j. w (w = l) e Il nero a.I minimo (w = exp-12.S)i aver definita Il minimo dell'asse
l
dslla. varl11.blle
di colore a -0.11 con il comando cuh fa sì che i punti a. w minimo vengano traccia.ti con un
! colore molto scuro, ma diverso dal nero.
Concludiamo questo argomento con una descrizione delle gra.da.zlonldi colore gestlbill da
!
I
MATLAB. Questo argomeoLo è legato alla definizione delle ma.ppe di colore, che a sua volta.,
I come detto sopra, è espressa come un Insieme ordioato di colori. 1 tre colori fondatnentali in
MATLABsono rosso, verde e blu. Un singolo colore è definito da una.tripla di numeri (ognuno.
compreeu fra Oe 1) che ne caratterizza l'intensità delle componenti di rosso-verde-blu; ad esempio
' .t il rosso è definito daJla l.ripla (1, O,O), mentre {0.5, o,O) definisce un rosso più cupo . È noto dalla.
I teorì& dei colori che a rigore il nero e il bianco non sono dei colori, in quanto li primo è dato
~
dall'assenza. di colore, il secondo daHa. simultanea presenza di tutti i colori dello spettro visibile;
~
eolo il secondo colora le facce, ovvero le regioni di pia.no delimitate dalla grigli~tura del mesh. il
comando shading risolve il problema della colorazione in tre modi:
• sh.a.ding flat non genera sfumature e colora. ogni faccia con u11 unico colore.
!
5.8. IL COLORE IN l\llA.TLAB 99
(l,Y] eahgrid(•2:.01:.6,-l.26:.01:1.26):
C•l+j•Y:
W•100•onea(a1ze(C));
Z•~ero1(1ize(C));
tor n•l:70,
Z•Z. Z+C;
h•f1nd(ab1(2)<2);
U ·1 .. pty(h),
W(b)an•one1(1ize(h));
elH
brealt
end ;
end;
clu.r C Z
pcolor(X,Y,W);
color~ap bona, shading interp;
Il leUore puO alterare le mappe di colore e ue re l'Istruzione 1hading per oUenere differenti
effetti. Il rleultato 1 con la mappe. definita da colorrnap bone, è ripor taLo in Figura 5.22.
.,,
100 CA.PITOLO 5. GRAFICA
, .
-I
5. 9 Illuminazione
La capacità di simulare effetti di luce è uno. delle caratteristiche più affascinanti della grafica
tridimensionale In MATLAB . L'argomento è piuttosto complesso, e, se non lo si padroneggia a
sufficienza., anche l'uso del comandi di rotuione e di illuminazione interattivl 1 disponibile nel
Camera Toolbar della finestra. grafica, lungi dal semplificare Il tratta.mento, rischia di t.rMfor-
maral In un le.birinto per l'utente inesperto. Daremo In questo paragrafo solo e.lcunl elementi
fondo.mentali sui comandi di illumina~ione. Per una panoramica esaustiva ancora una volta. il
ricorso &i manuali del MATLAB appare inevitabile.
Inlzìamo dal comando surn, una variante di surf che permette di aggiungere una sor -
gente luminosa . Consideriamo la classica funzione "sombrero", l'estensione tridimensionale della
11sinc"
1 defìnita da
(X,Y)SJ11eshgrid(-lO:.5:10);
R=sqrt(x.·2+Y.-2}+eps;
z,.sin(A) ./R;
surfl(X,Y,Z,(10 -10 1])
colomap bona;
shading interp;
In real tà , aggiungere una sorgen te luminosa non basta a. crea.re un effetto realistico di illurnl-
nazione : bisogna infatti considerare anche la luce ambienta le, i riflessi (e quindi il materiale), la
5.9. ILLUlvfINAZIONE 101
........
.... .... ..... ..
-■•••• •
·····
•
....
o.a .t . ... ....
..
....
......,·· ·····
I. ■•
o.e
·····
0.2
-0 .,
10
10
-10 -10
I
Figura 5.23: Aggiunta di un punto luce con surf 1.
\
luce diffusa. Il comando 1urfl dispone di vari parametri I fra cui I l ight •, che attiva un insieme di
questi efi'ettl 1 ma, piuttosto che dettagliare questa opiione, descriviamo il più generale coma.ndo
light, che agisce su qualunque grafico, anche quelli In cui la luce non era. stata prevista., come
avviene per il semplice surt.
U comando light attiva, tutte le proprietà di un oggetto grafico relative all'illuminailone, fra
cui le principali definibili con light sono:
• 1 Colo:r', per definire il colore della luce che illumina. il grafico i
• 'Stylat, per definire se si tratta di luce "lontana.", come un faretto (opzione iatinita},
o vicina, come un flash (opzione local);
• • Poai t ion', per deAnire la posizione del punto luce.
Inoltre, il coma.odo lightin g permette dì scegliere l'algoritmo usato per generare gli effetti
di Illuminazione (tuttavia lighting nouo epegne la luce), mentre materid permett.e di definire
la riflettenza del mate1·iale con le sue tre opzioni, ahin.y, dull e metal.
Esistono in realtà molti altri parametri che definiscono gli effetti di luce, ma. si tratta di
proprietà degli oggetti grafici u:H. su:rhce e patch, che richiedono conoscenze sull e strutture
Hand/e GraphicJ{si veda l'Appendice A),
Concludiamo questo para.grafo con un esempio in cui utilizziamo tutti i comandi di luce
descritti finora.
l
[X,Y]cmesharìd(-5:.6:6);
R•1qrt(X.~l+Y.-~);
Z•co1(1. ♦ Y/10).•eKp(-R/10);surf(l,Y,Z)
shading interp, colormap copp•r:
light ( 'poa i t ion' • [O, -5, 1] , •color• , •e•);
lighting gouraud, material metal
0,4
0.2 ......--
-0.2
I
r\ -e •8
peaks;
1hading inte rp;
! alpha 0.5;
I Come si vede (Figura. 5.25}, abbiamo una superficie seml-Lraaparente. L'inten it della
trn.eparenza.è ovviamente fissata dal numero aeeociato al come.udo alpha : O per completamente
invisibile, 1 per completamente opaco, e I va.loriIntermedi per maggiore o minore truparen1&,
lt1 reatt, la lrasparenn h una proprietà dall'oggetto gr&Jico ~raccle.to, ln partlcolue ogni
aupar8cl11pub avere un proprio diverso gredo di trasparenza: si digiti il seguente codke
L•11embrane:
l sur1(L, 'ta.cealpha',
hold on
.6), aha.ding interp
.' ..
~
.....!........
...:'..
..:.. ..
.-~.
6
... ' . '
4
··•·i··· .,. . ..
~ • t .; • ··••!
'" .;....'.. .·1··...., f'•·•,.J
2
,. '• .
. i:
·-..
• oI o•
o
·2
...'•
-4
.·;:;_...
O I f o .. 0 : : .., o
'
-8
3
3
y .3 -3
X
colormap(s11111111er)
vie11{146, 20)
I
e si otterranno due "colline" MATLAB, di cui una un po' efumflt&. La proprietà. (si consu lti l'Ap-
pendice A per le proprleU, degli oggetti grafici) h.cealpha definisce le proprietà di ~raaparenza
delle facce che compongono le superfiei.
In realtà la trasparenza funziono. in modo molto simile a.I colore: anche qui a.clogni punto (o
meglio, ad ogni faceta) è aasoclaio un ve.laredi trBBparenza.; e.clesempio, Il comando
elpb.a( 1 color>)
definisce uoa trasparenza propozionale a.Ila colorazione. Come per i colori, anche in questo ca.so
c'è un comando alphillilap per le mappe di trasparenza. Fra le mappe più interessa.nti ric01·diamo:
alphamap( 'incrHet', numero), che permette di diminuire la t,raspa.renza. (o aumentarla, usan-
do 'decrease'); lphamap('rempup') e alphamap('rampdovn') che creano mappe con opacità
crescente o decrescente .
Concludiamo questo breve paragrafo con un esemp io che risponde alla domanda. che ci era.va•
mo posti all'inizio; come viaa.liHare colori su oggetti solidi? Prima di rispondere, introduciamo
il come.ndo llic1 1 che, come dice il nome, delinh1cedelle •crette111 di aol\di. Esso 111uaa nello.
seguente forma: supponiamo di voler dl11egnare una runzlone d i tre ve.ria.bili, " = /(;1;1111 ,) , rap•
presentando eolo le ufette" che 111 ottengono lntersece.nclola. funzione con I plani :e = ~ , I/ = '!,11e
z; = .i,1 per opportuni valori deWlndice i . Specificheremo per il comando le quattro variabili da 't
tracciare (x, y, z e v) e i piani in un vettore per ogni direzione, Ad esempio, rappresentiamo la
.
funzione v = xe- z 2 - 1.-2- " 7 tag 1·Hl.Ild oIa con I. plani:
· . :t = -0 .8, x = 0.8, y = O, y = 2, .: = -2,
z = O. Usiamo allora le seguenti istruzioni t t
Come ai vede 1 abbia.mo anche conservato (nella variabile h) i puntatori ai sei piani crea.ti
con il comando slic, 1 per poter poi modificarne le proprietà. A questo punto dobbiamo rendere
trasparenti i piani ed eliminare le Lineedi mesh:
2
1.5
·•._: -~
·-
~ .. ..~ :
1: 0.5
'•
'••;. ....~-i
11
o
-o.a
•1
•1.5
l
·2
-~ I •
2
2
I'
generare file EPS (come quelli che sono serviti a produrre questo testo), Bitmap o
JPEG. •
Nel secondo ca.so invece si fa. uso del comando print dalla finestra principale MATLAB.
Qnesto comando usato senza parametri Invia il contenuto della finestra corrente alla pèriferica di
default. Si noti che a differenza deJ primo modo di operare, qnesta volta la periferica. di default
non è quella definita. da Windows, ma dal comando printopt MATLAB . È possibile definire
diverse periferiche, opzioni di stampa e destinazione. La sintassi completa del comando print I!
la seguente:
I fllea generati dal driver di Livello 2 sono plù piccoli di quelli standard, ma.non sono 1ecec.atl
da tutte le ata.mpantl Poa~Sc1·lpt.SI possono Inoltre genere.refile JPE0 1 con -djp•g e 'l'IFF con
e senH compressione, con •dtift e -dtUfnoco111pr111ion, rispettivamente.
Gli altri tipi di stampante elencati in seguito sono gestiti indirettamente, tramite Il poatpro-
cessore Ghostscript
I
-dlj1t:lp Stampanti HP Le.serJet IIP
•dlj1t8 St mpa.ntl HP La.aerJet III
·dde ■.kjet Stampanti HP DeskJet e OeskJet Plus
-dpaintjet Stampanti HP PaìntJet a colori
-dln03 Stampanti DEC LN03
-dep ■ on Stampanti a 9 o 24 aghi
-deps9high Stampa.nti a. 9 aghi in tripla risoluzione
- depeonc Stampanti Epson LQ-2550, Fujitsu 3400/'2400/1200
La forma. I
print -dmt ile nomefile
permette di salvare su disco i file necessari a rigenerare il disegno, che potrà essere richiamato
I
digitando il nome del file come comando.
Vengono creati sia un file .MAT con i da.ti rela.tivi al disegno corrente che un file .M che
assegna questi dati agli oggetti grafici correnti, (cfr . l'Appendice A}.
Infine è possibile usa.re i dispositivi di stampa definiti da Windows:
I'
-dvin Stampante correntemente definita. in Windows
-dvinc Come sopra., ma a colori
-dme"ta. Clipboard; in formato metafile
-dbit11111.p C lipboard, in formato biLmap
-dse-i;up Modifica le impostazioni di stampa. Windows
106 CAPITOLO 5. GRAFICA
I
p r quanto (iguarda infine le opzioni ( econdo parametro di print). la più importante è
.~ -appand, che consente di aggiungere il grafico a un file preesietentei in sua assenza il grafico
,.r corrente sostituisce quello preesistente.
S~re~tamente legato al comando print ~ li com ntlo oriant, che definlsce l'ocientamenlo del
grafico in fase di stampa; in particolare
• orient porta.it è il valore di defaulL e stampa la flgura al cenLro della pagina. con un
.1
n r pporto di aspetto di 4/3;
• ori ■ nt lMd1cap, at&mpe. la. figura.tras11erealmente1 in modo che occupi ~utta la pagina;
• I
I
l • tall !lt.ampa la figura come In portralt, ma 11a.ll1111gata",
pagina .
In modo che occupi tutt I&
5.12 Esercizi
Esercizio 5, 1 Tracciare i gf'ajici di tutte le cun,e definite negli esercizi dei capitoli
precedenti.
Esercizio 5.2 Verificare che la funzione cos x nell 'intamo dell'origine è app,-a3~
aimabtle~on le somme parziali del suo viluppo in serie di Mc Laurin
00 2n
( cosx= 2)-lt-x-
n=o (2n)!
I
traccfondoi grafici della funzione coax e delleprime 5 aommeparziali,
Esercizio 5.3 Si uerifichi che la serie di /unzioni
'lf _ 2 f sin~kx)
k=l
' dove
r,: L" laìJI
J=lj~i
dove n
Pi=
i=l~j
L laiJI
5.12. ESERCIZI 107
I I
•~----- ---- --- .--- ----- ~ ----
.,.
I
!;
1
.,.
E ercizio 5.5 E noto che una ''sfera" di raggio unitario in R 0 è l'in.neme dei
punti
.,
S = {x E R": llxll< l} I
x = R(4>- sin ~)
y R(l - cos 4>)
doue R è il raggiodella circonferenza. .
Si tracci la cicloide e si deducano le equazioni per le cicloidi "accorciate"e
"allungate", in cui il punto che descrive la traiettorio è rispettivamente interno ed
esterno alla circonferenza,tracciandole curve.
iI
lI
108 CAPITOLO 5. GRAFICA .
Esercizio 15,7 Le ipocicloidi e le plcicloidl ono descritte àa un punto .9u una '
cìrconferen1a che rotolaau un'altrac,rconferenra,ntema o e1temaad essa. In
particolaretm'ipocicloide in cui il rapporto dei raggi è 4 : 1 t detta asteroide e le
sue equazioniparametriche sono
x - Rcos 3 rt,
y - Rsin 3 f/>
mentre un'epicicloide con i raggi in rappo,·to1 : 1 è detta cardioide ed è descritta
in coordinatepolari da ·
p = 2R( 1 - COB8)
Si traccino asteroidi e cardioidi per ditJersivalori del raggioR.
Esercizio 5.8 Si tracci il grafico della funzione
5000
J(x, y) = - --;::::=::::::::--------
2
- 1
740✓x +y
2 -100x2 - 1001P - 6369
Esercizio 5.9 Con riferimento all'esercizioprecedente, si usi il comando surf e
,n sperimentino 1Jari tipi di mappa di colore;infine si generi a ca.!iouna mappa di
colore (una matrice 64 x 3) e si colori con e sa il grafico.
Es rei zio 5 .1 O Si tracci il grafico della funzione definita in coordinatepolari da
p = IcosBIutilizzando il comando polar e convertendo in coordinate cartesiane
'Perpoi usare plot.
Esercizio 5.11 Si verifichi che la successione di funzioni
x2
f n(X) ::;;;1 + n:i;2
converge uniformemente alla funzione f (x) = x 2 e che la successione
nx
9n(:z:)= 1 + 112x2
converge alla funzione nulla1 ma non in maniera uniforme.
Suggerimento. Si ricordi che una successione di funzioni {fn(:z:)}
convergeuniformemente alla funzione f (:z:)in un insieme X se
lim
n--+oo
lfn(:t) - f (x)I = O, Vx E X
Esercizio ~ .12 Si risolva graficamente il problema di ottimiizazione vincolata
minx2 + y 2 + z2
con il vincolo
x2 + 2y + 4z - 14 = O
5.12. ESERCIZI 109 I '[
Esercizio 5.13 Nella seconda metà dell'Ottocento, si disse che per comporreuna t
I
melodia era sufficiente spruzzare di inchiostro un pentagramma e decidereil ritmo ''
I j
con una tempificazione estratta a caso da un mazzo di carte.
Usando lo stesso principio e il comando rand, tralasciando la durata delle
note, si tracci pentagromma e note in una finestra MATLAB come riportato in
Figura 5.28. :
\ ..
r
~
I
l
0---o-◊----p-e-----.p---0-_-e--EO.,__o
o o
°'
o
___
e
o
--99---41e~-o-o
'
Figura 5.28: Spartito in MATLAB.
I
I
I
-I
l
I
I
I •
i I
Capitolo 6 ,ij
I
Polinomi, interpolazione e
• • •
1ns1ern1
....
I
'i
I
112 CAPITOLO 6. POLINOMI,INTERPOLAZIONE E INSIEMI
[q,r]=deconv(a»b);
che fornisce due polinomi q(s) (quoziente) e r(s) (resto) tali che
ans=
-3-2•j
-3+2•j
-5
polyval(p,x) calcola il valore p(:z:); x può essere uno scalare , vettore o una. .
matrice; nel primo caso fornisce il valore del polinomio nel punto dato 1 nel secondo "
otteniamo Pimmagine dell'insieme di punti nel vettore, nel terzo una m{J.tricei cui
elementi sono p,; = p(x, 1). Quindi nell'esempio di pag. 45 la terza e la. quarta
istruzione, che qui rip ortiamo per comodità. del lettore
x1=3•s.-2+5•s+7;
x2=s.-3+5•s.-2+7•s+12;
possono essere riscritte come
x1•polyval([3,6,7] ,s);
x2•polyval((1 5 7 12),s):
polyvalm(p,A) funziona come polyval, ma lavora nello spazio delle matrici
(quadrate, ovviamente). Ricordiamo che, dato il polinomio di grado n
n
p(s) = Ep,s'
i=O
7 13 p(2) p(3) )
ans =( 31 73 ) I
ovvero ( p(5) p(B)
6.1. OPERAZIONI FONDAMENTALI 113 L
quindi calcola i valori elemento per elemento, mentre polyvalm(p, A) fornisce il
risultato corretto
a.ns = ( 22 33)
55 88 1 ovvero A 2 + A + J.
b(s) r1 + r2 + .. . + rn + k(s)
a(s) ;;; B - Pi B- ~ 8 - Pn
l'istruzione [r, p, k) •raaidue (b I a) fornisce questo sviluppo, con ovvio significato
dei !!ilnboli. Nel caso in cui le radici di a(s) abbia.nomolteplicità m > I l'espansione
include anche i termini del tipo
residue funziona anche in modo reciproco, ovvero qua.ndo è invocata con tre ar-
gomenti di ingre930e due di uscita: [b, a] 111residue(r, p, k) restituisce l pollnomi
a(s) e b(s). Si noti quindi che l'uso combinato delle due modalità di funzionamento l.i
di residue permette di ottenere agevolmente lo sviluppo a coefficienti reali. Per
esempio si consideri la funzione razionale fratta I =
b(s) s- 1 t
a(s) .!14 + 8s 3 + 23s2 + 26s + 10 I.
I'istruzione
[rJp,k]•residue(b,a)
I.
fornisce lI
I
I
I
114 CAPITOLO 6. POLINONII,INTER.POLAZIONE E INSIElvII
r =
-0.2600 + 0.3200i
-0.2600 - 0.3200i
0.5200
-0.4000
p =
-3.0000 + 1.0000i
-3.0000 - 1.0000i
-1. 0000
-1.0000
k ==
[]
[b1,a1]=residue(r(1:2)Jp(1:2)J[))
il cui risultato è
b1 =
-0,5200 -2.2000
al=
1.0000 6.0000 10.0000
-----
8 +1 (s + 1)2 s2 + 6s + 10
6.2 Interpolazion . ,. .
L'operatore polytit risolve problemi di interpolazione polinomiale. Dati un vet-
tore x contenente i valori della variabileindipendente e un vettore y con i rispetti vi
valori da interpolare p=polyfit (x,y ,n) fornisce un polinomio p(x) di grado n che
interpola le coppie (x , y) con un metodo a minimi quadrati.
A proposito del problema dell1interpolaiione 1 può essere utile accennare ai ·'
metodi di interpolazione messi a disposizionedal MATLAB.
yi=spline(x,y,xi);
,.
restituisce un vettore Yi di valori associati lle ascisse il x, ottenuti tramite
interpolazione con spline cubiche.
• interpft Esegue una interpolazione più fitta rUun vettore di valori y cam-
pionati a passo fisso. La sua sintassi è
yi=interpft(x,n);
yi=interpl(x,y,xi);
dovei simboli hanno lo stesso significato visto in precedenza, salvo che 1Jpuò
essere un matrice, nel qual caso anche 11 sarà uns matrice le cui colonne
interpolano le risp ,ttive colonnedi y sulle stesse ascisseXi· interp1 permette
anche di specificare il metodo di interpola.zionP1in particola.re
yi=interp1(x,y,xi 1 1 metodo');
Tutti questi metodi richiedono che n vettore x sia monotono crescente. Nel
caso ln cui il punto x i sia esterno ali 'intervallo coperto dal vettore x, il co~
mando esegue un 'estrapolazione, a meno di non usare un ulteriore argomento
nella forma
,l
yiainterp1(x 1 y,xi 1 'metodo1 , eetrval);
nel qual caso si assume come risultato il valore estrval (che normalmente
si fissa a NaN).
[X,Y)=meshgrid(sort(x},sort(y));
Zl=griddata(x.y,z,X,Y.,cubic');
surf(X,Y,21)
6.3. INSIEMI E OPERAZIONI SUGLI INSIEMI 117
. ,·
L '.
0.5
o .... ,••· r!
,O,& ....
I
.
... I
:,
u
I•
·······r····
··· ••'
·····•\::··
.,
...
"
0.5
"°:l'-,----0!----~ ll~
I ---~----,01.8
! l A=nwn2cell('abcdef');
i B=num2cell('detgh');
~I x~num2cell( 1 abcdefghijklmnopqrstuvwxyz 1 )i
I e=
Id' 'e' 'f J
.t
I mentre per l'unione si usa union:
( D=union(A,B)
I fa apparire stillo schermo
l
I D =
I bl l Cl 'f' 'g 1 I hI
E=setdiff(A,B)
produce
E=
, a, I b' ICI
fornisce
ans =
o o 1 o o o
Si noti che questo risultato è molto comodo per conoscere anche la posizione in
cui si trova il carattere 'e' all'interno dell'insieme A; ovviamente se siamo solo
interessati alla presenza del carattere in A indipendentemente dalla sua posizione
possiamo usa.reany ( ismamber(A)), che fornisce 1. Nel caso in cui S sia costituito
di più elementi le cose si complica.no leggermente:
S={'a','c'};
ismember(A,S)
fornisce
ane =
1 o 1 o o o
e questa volta se vogliamo testare se S è tutto contenuto in A dobbiamo usare
ewn(ismember(A,S))==length(S)
Infine, abbiamo visto che l'operatore di unione fornisce un risul tato ordinato
e privo di ripetizioni, quindi siamo sicuri che operando su insiemi non avremo
ripetizioni. L'unico caso in cui potremmo avere ripetizioni è quindi quello in cui
inizializziamo un insieme: C=num2cel 1 ( 1 acqua 1 ); per eliminare le ripetizioni e
ordinare l'insieme utilizziamo l'istruzione unique:
C=unique(C)
120 CAPITOLO 6. POLINOMI, INTERPOLAZIONE E INSIEM1
produce
e =
I aI , e' 'u'
L,ultimo comando che riguarda. gli insiemi è setxor, che restituisce gli elementi
che appartengono a due insiemi ma non alla loro intersezione:
setxor(A,B)
I'.
I fornisce
ans •
I 8. I 'g' 'h I
6.4 Esercizi
Esercizio 6.1 Dati i polinomia(s) = s3 + 2s2 +5s + 1 è b(s) = s2 +1, si calcolino
a(s) + b(s}, a(s) ·- bb(a), a(e)b(s) e a(a)/b(a).
Esercizio O.2 Determinare i polfrioms (monici) le cui radici sono
1. -1, -3, -5
2. -2,-5±j2
9. 1, -1 , j
3. 2.s5 + j3s 2 + 1
Esercizio 6 .4 fl polinomio minimo di una matrice è il polinomio manico di grado
minimo fra gli annullatori della matrice. Si calcoli il polinomio minimo di
Esercizio 6.5 Lo spazio dei polinomi di grado massimo assegnato è uno spazio
vettoriale. Abbiamo visto che MATLAB usa come base di questo spazio i polinomi
1
1, s 1 s2 , .•. , ma, come in tv.tti gli spazi vettoriali, possiamo considerare diverse
basi. Si calcoli la rappresentazione del polinomio p(s) = 2s2 - 5s + 6 nella base
I, s - 1, (s - 1)2 .
6.4. ESERCIZI 121 li~
I
l...
I
Esercizio 6.7 Il teorema di Lucas afferma che gli ogni poligono convesso che
contiene tutti gli zeri di un polinomio contiene anche gli zeri della derivata del
polinomio. Per polinomi a coefficienti reali è possibile ottenere una stima più'.
accuratn (non convessa), costituita dall'unione di cerchi: i cerchi i cui diametri
.-ionoi segmenti elle congfangono le coppia di zeri complessi coniugati sono detti
cerchi di Jensen; secondo il teorema di Jensen, ogni zero complesso della deriuata
di un polinomio reale giace in ( o su) almeno un cerchio di Jensen dei polinomio
stesso.
Si verifichi l'accuratezza di queste stime usando diversi polinomi di prova a
piacere,
si ha:
r
1. gli zeri appartengono al cerchio
.J
!si< L
n 11/lc
a,__A:
- k= l Cln
'\
Si disegnino( cerchie si verifichil'accuratezzadi queateatimecon uari polinomf
di proua. ·1•
o I
Esercizio 6.9 Si calcolino i punti e3tremali e gli eventuali punti di fleaso delle•
funzioni
1. J(x) = x 4 + 5x3 + 1
J2 () x+l
· 9 x = x3 + 3x + 1 f
'•
s2 + 3s
s4 + 4s3 + 7s 2 + 6s + 2
Esercizio 6,11 La densità dell'arsap (in kg/m3 ) varia con la quotoh (in km) ae-
concloi dati riportatinella seguentetabellaDete,m&nareun polinomio interpolatore
h 7 10 15 21 27 34 39 43 47 51 55 59 61
i p 556 369 191 75 26.2 9.9 4.4 2.3 1.4 .8 .5 .33 .25
j
1,
I Tabella 6.1: Densità. delParia..
I
.I di ordi11en = 11 2, . .. , 6 e la norma dell'errore commesso.
Si calcoli1&0inoltre i valori di de,i.,ità dell'aria ai valori di quota di 10, 20, 30,
,IO, SOe 60 km wando i vari algoritmi di interpolazione esposti nel Paragrafo 6.2
(si noti che i valori della variabile indipendente non sono equispaziati).
Ln(X) = -- 1 d" (X 2 -1 )n
2"nldx"
Capitolo 7
il
124 CAPITOLO 7. PROGRAMJ.!IAZIONE
STRUTTURATA IN l\lIATLAB
Per quanto riguarda il comando if c'è da dire che esso può essere usato in
qualsiasi possibile forma, ovvero come un if semplice 1 come un i:f, else o come
if I eleseif, else e va sempre concluso con end.
Il comando sw-itch segue la classica sintassi del C, sostituendo però la parola
chiave otherwise a default; anch 1esso va concluso con end. Viene inoltre esegui to
7.2, SCRIPT FILBS 125 I.
solo il primo case che soddisfa la condizione, quindi, a differenza del C, non richiede
un break.
Il contatore usato per il ciclo f or può assumere in realtà una forma più generale 'I
di quella illustrata. Infatti con f or i=A, dove A è una matrice, l'indice i a9sume ad
ogni passo un valore ottenuto dalla lettura per colonne della matrice. Per esempio
una maniera. (piuttosto involuta) per calcolare y = sin t per t E [O,2J è
T=0:.1:2;
tor t=T,
y=[y,sin(t)];
end
L'esecuzione dì un ciclo può essere terminata in maniera asincrona con il CO·
mando break. Nel casodi cicli innestati, break arresta l'esecuzione del solo ciclo
più interno.
Poichè l'esecu-zione dei cicli è relativamente lenta è preferibile evitarla quando possibile; a
questo proposito l'istruzione :tind descritta nel Paragrafo 4.4 molto spesso sostituisce in maniera
estremamente elegante l'uso dei cicli. Per esempio , se vogliamo altera.re tutti gli elè.-oenti della.
matrice A maggiori di 10 a.I valore NaN (per esempio per evita.re che vengano visuali22ati in un
grafico)1 piuttosto che usare
(m,n]•aiu{A);
tor 1•1:m
tor jal :n
i1 A(i,j)>lO,
A(i,j)=Ha.H;
l
end
end
end
si può digitare
i•find(A>10);
A(i)•NaN•one•(aize(i));
o, meglio ancora.,
7 .2 Script files
Uno Script file è una procedura MATLAB scritta con un text editor in ASCII
e contenente un insieme di istruzioni da eseguire quando il file è chiamato da
MATLAB.
MATLAB dispone di un suo editor (con funzioni anche di debugging) dal menu
a tendine File o cliccando sull'icona del foglio bianco 1 che per default considera
file con estensione .M.
I
Ii,
126 CAPITOLO 7. PROGR.Mffv!AZIONE STRUTTURATA IN MATLAB
7 .3 Funzioni
Una function si crea in MATLAB in maaiera analoga ad un M-file>tranne che
per l'intestazione, che deve essere:
function (var. di uscita] =nomeF'unzione(var. di ingres:w)
Le varia.biliinterne sono tutte locali e quindi dopo l'esecuzione della. function
non restMo nello spazio di lavoro. Per esempio ecco come in MATLAB è realizzata
la ftlozioue trace:
functiont = trace(a)
¼TRACESumof diagonal elemente.
'l. TRACE(A)ie the sum of the diagonal elemente of A, which is
¼ also the sum or the eigenvalues of A.
t ~ sum(diag(a));
7.3. FUNZIONI 127
In questo esempio si vede che la seconda, la terza e la quarta linea sono pre-
sentate in forma di commento: inserite immediatamente dopo l'intestazione della.
function esse definiscono Phelp della. funzione stessa, nel senso che eseguendo da
.MATLABil comando help trace il risultato sarà proprio 1
Inoltre è possihile usare function "locali", nel senso che sono utilizzate solo da
altre function e non sono disponibili dalla Command Window. A questo scopo • I
t
basta scrivere la function loca.le in coda e.Ha principale e memorizzarla nello stesso
file {che avrà ovviamente il nome della. principale). Ad esempio se memorizziamo
~ 11
nel file prova.A.rn le seguenti linee di codice I
function y=provaA(x)
yzr2+provaB(x)j
function z=provaB(t)
z=sin(t);
la. funzione provaA sarà disponibìle nella Comma.nd Window, mentre provaB può
essere utilizzata solo da prove.A.
Abbiamo detto che tutte le variabili dichiarnte all'interno di una. function sono
locali. Tuttavia è possibile modificare la visibilità o il comportamento delle vari-
abili. Infatti, si può usare il comando global per rendere le variabili interne
visibili all'esterno della function, il che e comodo per definire funzioni paramet-
riche. Ad esempio 1 se voglia.mo definire una funzione sinusoidale con frequenza e
fase parametriche, possiamo creare la funzione SENO.Mcome nel seguente function
file:
function y=seno(x)
¼ La funzione y=eeno(x) restituisce il valore
'l. y=ein(2•pi•FREQ•x~FASE), dove i parametri
1/.FREQe FASEsono variabili globali.
global FREQFASE
y=sin(2•pi•FREQ•x+FASE);
global FREQFASE
FREQ=0.5;
FASE=pi/2;
x=O: .1: 5;
plot(x,seno(x))
Inoltre 1 è possibile dichiarare una varia.bile peraistente,ovvero ancora locale
come viaibilità 1 ma tale che non cambi valore fra una chiamata. e l'altra della
function (una variabile loca.le non persistente normalmente è riazzera.ta fra una
chiamata e l'altra) . Tre sono i comandi che si usano in queato caso:
• mlock protegge il valore della variabile e impedisce che sia cancellata;
s = svd(A);
if nargin== 1
tol = max(size(A) ') * max(s) * epsj
end
r = swn(s > tol)i
Analogamente le funzioni che hanno un comportamento diversificato a seconda
del numero di ingressi e uscite, quali residue, eseguono un test sui valori di nargin
e nargout.
7.3. FUNZIONI 129
function y=nume_funzione(varargin)
"
.1
MATLABinclude tutti gli argomenti di ingresso nell'array di celle varargin, Ad i
esempio ,, ''
.
!
function y=ruotad(varargin)
'I. Esegue la. "rotazione" a destra dei sui elementi .l
..
\
far i=l:length(varargin)
y{i}= [varargin{i} (1md) varargin{i} ( 1: end-1)];
end
ans =
functìon varargout=ruotas(varargin)
1/.Esegue la 11rotazione 11 a sinistra dei sui elementi
tor i~l:length(verargin)
varargout{i}=[varargin{i}(2:and) varargin{i}(l)];
end
in esecuzione dà:
ans =
uidaG
I
(a,b]=ruotas('Guida', 1 operativa 1 , 1 MATLAB
1)
•
a =
uidaG
IJ
I
. ,,
b =
perativao
130 CAPITOLO 7. PROGRANlNIAZIONE STHUTTURATA. IN A--IATLAB
function y=grafici(x,varargin)
. if (aize(x,l)<size(x,2)),
x•x';
E
I· end
Y=[];
I for i=l:length(varargin)
Y=(Y feval(varargin{i},x)];
end
plot(x,Y)
t=pi/2;
c='y=sin(t)>;
eval(c);
eval ( [ 1 d' , nwn2str (g) , 1 _' ,nllfil2str (m) , '=x 1 ]) .' .'
'
1.
lanciando questi comandi ogni giorno (magari si possono inserire in uno script o
un functìon file) si ottiene l'effetto desiderato.
Fta i comandi "minori" ricordiamo i seguenti. Il comando echo nomeFunchon on 1 permette
di vedere le linee di una funzione mentre vleoe eseguita., e può servire per operazioni di debugging .
Il comando paun (n) sospende l'esecuzione per n secondi.
li comando input permette di immettere dati in modo interattivo duraute l'esecuzione: per
esempio l 'ietruzione
n=input('Quanti punti?')
linea di principio bisogna attendere l'esecuzione completa dello script file prima di
poter intervenire sulla singola linea di programma. 2 -I I
2 Io realtà è possibile sospendere l'esecuzione dello script tìle, dare il controllo alla ta.stiel'a, I I
eseguire operazioni in modo intero.ttivo (ad esempio controllare i risultati parziali} e poi restituire
il controllo allo script file u.sando il comando kayboard all'interno del file; quo.ndo MATLAB II .
I.
i'
I
I
I
' I
' '
132 CAPITOLO 7. PROGRAMMAZIONE STRUTTURATA IN fv!ATLAB
function ladiseig(A)
% Data una matrice quadrata A, la chiamata
1/. l=diseig(A)
1/. traccia sul piano complesso gli autovalori
¼ e li memorizza nella variabile l .
l=eig(A);
i t ·any(imag(l)),
Y. se non esiste almeno un autovalore complesso
% aggiunge una parte immaginaria tittizia
ll=aggimm(l);
else
11=1;
end
Xla variabile 11 eerve solo per il grafico,
Y. gli autovalori sono in l,
plot(l1,' .' ,'markersize',40);
ax i s ( ' t igh t ' ) ;
function y~aggimm(x)j
¼ Dato un vettore (o matrice) x, la chiamata
1/. yaaggimm(x);
'l. restituisce y=x+j•eps (eps e' la variabile predefinita
% prossima allo zero di macchina).
y=x+j•epsi
Si noti che abbiamo memorizzato le due function in un unico file. Vediamo ora
come iniziare una sessione di debugger. Uunica cosa da fare ~ definire dei punti
di arresto e poi far partire la funzione d.iseig. Per fare ciò usiamo il debugger
incontra questo comando passa in modo interattivo, segnalando la sospensione dell'esecuzione
con il prompt K». Poi per riprendere l'esecuzione in modo batch basta immettere il comando
return).
,I
7,4, LA CORREZIONE DEI PROGRAhtIMI 133
l
integrato come in Figura 7.1, posizionando il cursore sulle istruzioni l=eig(A) e •!
l.
I )
tl
,1;
I:
ilejl iito ,I
n ,I
mmC1!1 eh
· i ti1 l o!! . •~l._, pu . ~~1f1 -: j,
.
• J •-;:p 2 ioep:, >!:' I i \"An a t ,1 le
=•~~ di ru~cchl n~ l .
pt ·e ,fo hn1 ta
'
Figura 7.1: Ueditor/debugger MATLAB.
Vediamo due cose: anzitutto il debugger è ripartito, e ciò e dovuto a.I fatto
che non abbiamo ancora rimosso i breakpoints; per ri uovere un breakpoint è
sufficiente andare con il cursore suWistruzione corrispondente e premere il tasto
eet/clear breakpoint; in alternativa, usiamo il tasto Clear all breakpoints
per rimuovere tutti i punti di arresto. La seconda. cosa da osserv re è che se
rimuoviamo H breakpoint ali 'interno della function aggimm,le sue istruzioni non
sono più raggiungibili: infatti, l'istruzione ll=aggimm(l); viene eseguita come
un 'unica operazione se usiamo un semplice step. Per entra.re nel codice della.
function, dobbiamo usa.re il bottone step in (e il duale atep out per uscirne).
Infine, si noti che quando ia.m all'interno di una function locale perdiamo
]a visibilità d Ila funzione chiamante (nonché del workspace di partenza, ovvia-
mente), come si vede dal comando who nel workspace. Per alterare la visibilità
possiamo usare il menu a discesa Stack;, da cui s_elezioniamol'ambito di visibilità
correute.
7. 5 Esercizi
Esercizio 7.1 Usando il comando while si calcoli il valore della funzione sin x
per x:;:: 0.01, 0.02, ... , l rodianti usando la serie:
xa xa ,:1
sln :z:= :r - 31+ 51- 71+ .. •
si co,l.1idenno i tennini necessari a garantire un'accuratezzafino alla quarta cifro
decimalee poi 3i confronti ii risultato e quello fornito dalla routine sin dì MAT-
LAB .
Esercizio 7,2 Si scriva una function per calcolareil valorndella generica trasfor-
mazione bilineare
ii az+ b
I w=-- ad-bciO
ct +d'
e poi con i valori a = 1, b = 2, e = 1, d = -3 si valutino e si traccino sul piano
I complessole immagini di
~
I
1. cerE!'ipasaanti per z1 = -1 e z1 =3
2. la retta Re(z) = O
I :J. cerchipaaaanti per il punto z = 3
I 4. ce.rchipassanti per z1 = 1 e zi = -3
Esercizio 7 .3 Gli studi sulla teoria del caos sono ba.rntisulla ricorsione, ot1vero
.m equazionimatematiche del tipo
che generano una successione di punti {xn}, detta orbita di xo rispetto a F. I punti
più importanti deWorbita sono i punti fissi, ovvero i punti x 0 tali che F(x 0 ) = x 0 ;
inoltre Xo è detto periodico se per qualche n > O si verifica Xn = Xoi infine :r;0
è detto eventualmente fisso o eventualmente periodico se, pur non essendo fisso,
o periodico, un punto della sua orbita lo è, ovvern .rn esiste un n > O tale clie
F(xn) = Xn o esistono n, m > O tali che F(xn) = Xm,
Si studino le orbite di
1. xo = 1 + ../5rispetto a F(x) =x2 - x - 4;
2. Xo = O rispetto a F(x) = x 2 - l,·
3. x0 = O rispetto a F(x) = -}x 2 + tx + 1,·
4. Xo = O rispetto a F(x) = x 2 - 2;
Esercizio 7,4 Una delle famiglie di /unzioni più studiate nella teoria del caos è
la mappa quadratica
Qc(x) = x 2 + c
In esse le orbite asintotiche di :z:0 = O 11arianoprofondamente al variare della
costante c. Un diagramma delle orbite di x0 è un grafico che sull'asse delle ascisse
ha i valori di e e su quello delle ordinate i valori a3intotici dell'orbita di z 0 (il
numerodi iterazioninece3sariea raggiungere un intorno sufficientemente piccolo
del valoreasintoticovaria al variare di e e di x0 ; dal punto di v18tapratico ,~ell1e-
serciziopropostoè mgionevoleconsidemrei fenomeni transitori estinti dopo drca
100 iterazioni).
Si tracci il diagrammadelle orbite di xo = O della famiglia quadraticascegliendo
i valori di e E (-2, 0.25) nel seguente modo
1. 10 valori nell'intervallo -0.75 < e < 0.25
2. 10 valori nell'intervallo -1.25 < e < -O. 75
3. 50 valori nell'intervallo -1.4 <e< -1.25
,,4.1O valori nell1intervallo-1.75 < e < -1.4
5. 25 valori nell'intervallo -1. 78 < e < -1. 76
6. 10 valorinelVintervallo-2 < e< -1.78
n risultato deve easereaimile a quello riportatoin Figura 7.1!.
Esercizio 7,5 Si scriva un sottoprogramma per rappresentare una sequenza di nu-
meri come note su -unpentagramma {in chiaue di violino) e si generalizzi il risultato
dell'Esercizio 5.13 con la function music .m che in ingresso accetta il numero di
note da generare e in uscita fornisce la loro rappresentazione sui pentagramma.
Soluzione. Anzitutto occorre di11egn0,re
il pentagmmma, poi le note steHe; bisogna con11ide•
rare che le note alterate do un diesis uanno poste nella stessa posizione di quelle non oltemte,
ma precedute dal 8imbolo #, Inoltre note come il do centrale neceaaitano di tagli addi~ionali.
i'
Iniziamo quindi a trocciare pentagromma con ia /unctian
136 CAPITOLO 7. PROGRAMMAZIONE STRUTTURATA IN MATLAB ·-
2..------..--,------.------....-------.--------. :, )
tunction pentagru{n)
axia((O n+l ·5 17])
a.xis ( 'ott')
hold on
:tor i•2:2:10
plot( [O n+l), (i i), 1 "'');
end
f~nction plotnot(note)
ba••~ot•[0 :0.6:2 3:0,516);
p01not•ba1•not(note+l);
plot(tix(po1not),'o', 'HarkerSize',10)
sharp•(r1m(po1not,1)·•0);
sharpo1•find(sharp);
taxt(sha.rpos-0.5,tix(posnot(~harpos)),'I');
C•find((note-O)l(notea•1));
plot ( [C- . 3; C+. 3) ••• ,
[fix(posnot (C));fix (po1not( C))), •-•);
Si noti che le due ultim e istruzioni servono a tracciare I tagli addizionali per il do centrale
e il successivo do# .
Con queste function la scritturo del pragmmma mus ic. m diventa banale.
7.5. ESERCIZI 137 l
do do# re re# mi fa fa# sol sol# la la# si
do 1 o o 1 1 1 o 1 o 1 o o
do# 1 o o 1 1 l o 1 o l o
re 1 o o 1 l 1 o l o l
re# 1 o o 1 l 1 o l o
ml 1 o o 1 1 1 o 1
fa 1 o o 1 1 1 o .
I
fa# 1 o o 1 1 1 :
sol 1 o o 1 1 I
\
sol# 1 o o 1
la 1 o o t
la# l o
Bi l I
11
}
Tabella 7.1: Tabella di consonanze. I
spaziano dalle più compleJse fughe ai meno articolati randelli. Per descrivere il
canone è utile pu.rtireproprio dal rondtllo, forse la più semplice delle forme imita-
tive in musica. n randello è familiare a chi abbia cantato in coro1 ad esempio, "Fra
lvlartino campanaro": una voce ·ni.zia la melodia e, quando ha raggiunto la fine
della frase melodica, subentra una seconda voce che comincia la medesima melodia,
all'unisono o all'ottava, mentre la prima ripete la sua parte. Cosi entrano anche
una terza e talvolta una quarta voce con gli stessi intervalli temporali prestabiliti.
Le voci cosi possono girarsi attorno per un numero di ripetizions imprecisato e in-
fine concludere il canto sulla fine della melodia a turno, cominciando dalla prima
voce. Il canone ha una str-uttur"a analoga, ma presenta due gradi di libertà in più:
l'intervallo fra le voci non è vincolato all'unisono o all'ottava, ma può spaziare
su tutti gli intervalli della scala; inoltre non è neces.sario attendere la fine della
prima frase per permettere l'ingresso della seconda, che può iniziare in qualaia3i
iatante. Queste due nuove tJariabiliJanno sorgere problemi armonici sconosciuti
nel randello: quando si canta .mila stessa nota l'interesse Ji concentra sulla melo~
dia, sul ritmo, sul timbro (in ordine di complessità crescente); quando invece due
voci distinte cantano contemporaneamente note diverse, il più palese dei problemi
e (o, più correttamente, era) quello di evitare le diasonanze. La definizione di dis-
sonanza è un problema troppo complesso per l'ambito di questo libro, per cui, per
semplicità, ci limitiamo a proporre in maniera assiomatica il minimo insieme <li
inten,a/li che non impoverisca eccessivamente l'armonia nella Tabella 1.11 le cui
colonne si riferiscono alla voce inferiore, il basso, e le righe a quella superiore, il
soprano; il valore 1 indica consonanza e O dissonanza.
138 CAPITOLO 7. PROGRAl\llMAZIONE STRUTTURATA IN MATLAB
function y•incr12(x,i):
1f 1)0,
z(i)•1.(i)+1 i
if x(0>11,
i
I
x(i):sO;
x=incr12(x,i-1);
end
11
end
I yorx;
! incremen,a il numero mppreaentato dal vettore :i: {di cardinalitd n) di una unìtd.
Per rmali.uare la consonanza deJle note ri definisca la matrice globale Ace che contiene i
valori della Tabella 1. 1 e afo simmetrico:
~: 1 o o 1 1 l o 1 o 1 o o
lI
•'
I o 1 o o l
o o L o o
1
1
o
1
o
o o
1 o o
1
l
1
o o
l
1
1
o l o 1 o
1
l
1
o
1
1
1
o
1
o
1
o
1
o
1
'' l l 1 o o 1 o o l 1 1 o
Ace= o o
o l 1 l l o o 1 1 1
1 o 1 o o 1 o
1 l o l 1
o 1 o l o o 1
1 l o o 1
1 o l o l 1 o o
1 1 o o
o l o l o 1 1 1 o o l o
o o 1 o l o 1 1 1 o o 1
{Si noti che la aimmetrìa della matrice ~ consentita dal non at1er permuao intervalli eccedenti
nella talulla). La aoluiione é quindi fornitti dalla s~~mente/unction
!
I
7.5. ESERCIZI 139
-"'
t
tunction mal•ca.non(int,rit,num)
global Ace nomiCrom
mel=zaroa(l,num);
continua 1; vhile continua
mal~iner12(mal,nWII);
it all(diag(Acc(mel(l+rit:num}+l, .. ,
l+rem(mel(l:num-rit}+int,12)))),
clt
nomiCrom{rem(mal,12)+1},
nom.iCrom{ram(mel+int,12)+1},
pentagra.m(num+rit);
plotnot(mel):
plotnot2(m1l,int 1 rit);
hold off;
continua=inpnt('Continua? (1/0)');
end
1nd
Gli ingfl!BBiar programma .wno intflrvallo di imìta.asone, ritardo e il numflrv di note che compon•
gono il canone;la matrice Ace e t'armu di celle nGmiCro111 .tono uariabiliglobali, In parUcola~,
nomiCrom•{'do', 'dot', 'r••, 'rei', 'mi', 'fa', 'fa.I', . ,,
•aol', 'soli' ,'la', 'la.I:', '111'}:
è neceasario a fornire in maniero leggibile le due .,equenze melodiche.
Una maniern alternativa di roppresentare i risultati ti disegnare le note aut pentagramma.
n programma dianot. definito nell'e,erciiio precedente i usato per disegnt1re la voce bassa,
mentn! fo parte del soprano ua opportunamente modificata per coruentire di auperare t 'ottava,'
a questo 11oopola tnuposizione non ua pitl reoUuata modulo JB. Ecco perché si uaa lo funcUon
plotnot2 t
function plotnot2{note,int,rit)
notetrasp=note+int;
basenot~(0:0.5:2 3:0.6:6];
basenot~[basenot basenot+7];
posbot 2 basanot(notatrasp+l);
plot((1:length(notetr ap))+rit,fix(poanot),'0 1 1 'ma.:rkersiza',10)
1hup•(rem(poanot,1)-•0);
1ha.rpoa2find(sharp);
text(1ha.rpo11-0 .6+rit, fix(po1not (11harpo1)), 't ');
C•tind(notetra,p>20):
plot([C-.3;C+.3)+rit,[fix(po11not(C});fix(poanot(C) ) ],'·');
In Figura 7.3 ~ riportato uno dei risultati ottenuti con 1l comanda
e.a.non(7, 2, 6}
E' pressoccliésuperfluo sottolineare che questi esen~izi musicali hanno valore so-
lo come eaerciziMATLAB,-in musica (e non solo in musica) le regoledevono essere
violate appena 3orgala necessitd d1farlo.· la maggior parte dei canoni generati da
questo programma ri.mltano banali e quindi noiosi, nessuno ha una sua ragion
d'essere. Si possono ottenere risultati più interessanti definendo regole anche sulla
costruzione delle singole linee melodiche, indipendentemente dalla tesaitura armon-
ica, (ad esempio, gli intervalli diatonici sono ottimi dal punto di vista melodico,
ma proibiti da quello armonico), ma in ogni caso 3i consiglia di non superare la
lunghezza di 8·10 note per il canone, per evìtare risultati del tutto insensati.
140 CAPITOLO 7. PROGRANlNlAZIONE STRUTTURATA IN J\IIATLAB
o
o o o o
o
-e- --e- --e- -e-
Figura 7.3: Canone generato da MATLAB.
Cap itolo 8
Oggetti in MATLAB
Il motivo per cui questo capitolo è presentato solo a questo punto è che richiede
la conoscenza della programmazione in MATLAB e inserire prima questo capit olo
l.
1
.,
"
'I
142 CAPITOLO 8. OGGETTI IN NIATLAB
function p=polynom(a)
'l. Costruttore per la classe POLYNOM
%p=polynom(v) crea un oggetto polinomio
'l. a partire dal vettore v che contiene
¼ i coefficienti del polinomio
Y. in ordine decrescente di potenze,
1f nargin•eQ
P. e=[];
p=claes(p.'polynom');
elseif isa(a, 'polynom')
p=ai
else ;e
p.c=a(:); •I
p=class(p,'polynom');
end
class('io')
restituisce
ans =
char
.
144 CAPITOLO 8. OGGETTI IN MATLAB :
end .
end
if a·=1ld==O .1
a=(s num2etr(a)];
if d>O
1
s• [e • '] ;
end
end
if d>=2
s=[s 1 x~ 1 int2str(d)];
elseif d==l
e=(s 'x']:
end
end
d=d-1;
end
end
A questo punto si provino i seguenti comandi:
p•polynom([l O -3 2])
char(p)
x=2;
eval(char(p))
il primo definisce un oggetto dì tipo polinomio, il secondo fornisce:
ans =
x~3 - 3•x + 2
Con le ultime due istruzioni il polinomio viene valutato in x = 2. In alternati-
va., potremmo desiderare la possibilità di valutare il polinomio direttamente, con
un'istruzione del tipo p{2). Si ricordi però che in MATLAB l'uso delle parentesi
tonde è riservato all'accesso a elementi di vettori, quindi a prima. vista questa op-
erazione si presenta complessa. Tuttavia, la programmazione a oggetti MATLAB
consente di ridefinire l'uso delle parente-si tonde, graffe e del punto che denota i
campi dei record con l1istruzione
b=subsret(a,s)
in cui b è il risultato, a la variabile su cui si opera e s una variabile di tipo struttura
che contiene due campi: s. type è una stringa che può assumere i valori 'O 1 , '{}'
oppure ' . ', mentre e. sube contiene il valore degli indici (o il vettore di indici).
Un esempio chiarirà l'uso di questa istruzione. Supponiamo come detto sopra di
voler ridefinire l'uso delle parentesi tonde in modo che p(2) restituisca il valore di
p(x) per x = 2. Anzi, contempliamo pure un funzionamento vettoriale, del tipo
p([l 2 31)per valutare [p(l) p(2) p(3)]. Basterà allora scrivere
8.1. COSTRUZIONE DI UNA CLASSE 145 l
tunction b•eubsret(a,s)
¼ aubsref
switch s.type
l.
• I
case I O'
ind•e.sube{:};
for 1•1:length(ind)
b(i)•eval(etrrep(char(a),'x',num2atr(ind(i))));
I: I
{
I
'
I
end :
otherwise
end
error('Specify value tor x as p(x)') l
Si provi ora a seri vere
p(5)
x=3
MATLABci rappresenta sullo schermo il valore della variabile x, non ci dice solo
che si tratta di un oggetto di tipo double, come fa per i nostri polinomi. In realtà
MATLAB se non si usa il punto e virgola finale sulle istruzioni invoca iÌ'metodo
display • che noi andremo ora a ridefinire nella claBse dei polinomi. Si scriva qu.indi
il file Opolinomi/display. m:
tunctìon diaplay(p )
¼ visualizza un polinomio nella finestra di comando .,
diep(' ');
diap((inputname(t),, = '])
diep( 1 ')i
disp([' 1 char(p)])
disp(' ');
e si esegua ora
clear classes
p:polynom((l O -2 3])
Si ot errà:
p ;;
J'
146 CAPITOLO B. OGGETII IN MATLAB
Come si vede, questa funzione per prima cosa impone che p e q siano polinomi.
Ciò permette di es guire istruzioni qua.li
p+1
anche senza dichiarare esplicitamente 1 come un polinomio. Ecco ora altri opera-
tori: per il -
tunction rmminus(p,q)
%implementa p-q per i polinomi
p=polynom(p);
q=polynom(q);
k=length(q.c)-length(p.c);
r=polynom([zeroe(k,1); p.c]-[zeroe(-k,1); q.c]);
e per U• (si noti che usiamo mtimee dove il prefissoroindica matricej ciò è dovuto
al fatto che in MATLAB l'operatore • che stia.mo ridefinendoè quello che opere.
sulle matricii se invece ll nome ùella funzione seguente fosse timee .m st&remmo
ridefinendo l'operatore . •)
function r•mtimes(p.q)
1/.implementa p•q per i polinomi
p•polynom(p);
q=polynom(q) ;
r=polynom(conv(p.c,q.c));
function r=roots(p)
7. fornisce un vettore con le radici del polinomio
r=roots(p.c);
..r
function y::polyval(p,x)
¼ y=polyval(p,x) valuta p in x ...i
y=O; I
for a=p,c' • ff
y=y.•x+a;
end
1
function plot(p)
Y. plot(p) traccia il grafico del polinomio p
r=max(aba(roots(p)));
x=(-1.1:0.01:1.l)+r;
y:==polyval(p,x);
plot(x,y);
title(char(p));
grid on
Il risultato di
p=polynom([1 2 3]);
plot(p)
è riportato in Figura 8.1.
Il comando plot è stato ridefinito in modo da tracciare il grafico della funzione
in un suo intervallo significativo e da rappresentare come titolo il polinomio stesso.
Si noti come l'uso di stringhe 1F)(. nel titolo renda leggibile il risulta.te .
Si osservi inoltre che il comando polyval è a prima vista superfluo: abbiamo
ridefinito le parentesi tonde per lo stesso scopo! Il problema è che all'interno dei
metodi dì classe l'oggetto è completamente acceBBibilee le parentesi riassumono il
,I
loro significato originario. Si ricordi infatti che con le parentesi si posaono ridefinire
gli operatori punto (.) di accesso ai c8JJlpii ae ora ai fosse ridefinito questo ope•
ratore, corne potremmo accedere all'interno dei metodi al campo p. e? Per questo
motivo le parentesi e i punti ridefiniti do. suberef riaBsumono i loro significati
originari. Una differente pOBsibilità. sarebbe non inserire il file che definisce il plot
all'interno della directory polynom, in modo da non renderlo un metodo, ma una
normale funzione, ma plot è un comando built-in, che non sarebbe coal ridefini-
to. Quindi l'unica. soluzione alternativa potrebbe essere creare un ftle con un
nome differente, ad esempio disegna.me memorizzarlo al di fuori della directory
Clpolynom:
function disegna(p)
¼ dieegna(p) traccia il grafico del polinomio p
148 CAPITOLO 8. OGGETTI IN MATLAB
11
10
8 ..
,.
7
r=max(abs(roots(p)));
x=(-1.1:0.01: 1.1)•r;
y=p(x);
plot(x,y);
title(char(p))i
grid on
function p=polyscal(a)
¼ Costruttore per la classe POLYSCAL
¼ p=polyecal(v) crea un oggetto polinomio
¼ scalare a partire dal vettore v
I'
Y. che contiene i coefficienti del polinomio \
¼ in ordine decrescente di potenze.
if nargìn==O
p. e=(];
p=clase(p,'polyscal')i
elseif isa(a,'polyscal')
p=a;
else
p. c=a (:) ;
p=claes(p,'polyscal');
end
tunction r=plus(p,q)
p=polyscal(p);
q=polyscal(q);
k=length(q.c)-length(p.c);
r=polyecal([zeros(k,1); p.c]+(zeroe(-k,1); q.c])j
e analogamente per gli altri operatori. Eseguite queste modifiche e alla fine con-
trollate che la vostra classe funzioni riprovando i comandi eseguiti in precedenza
sui polinomi.
A questo punto siamo pronti a creare la nuova classe polynom. Per prima cosa
bisogna decidere la struttura . La cosa più semplice è definire un campo . polche .,
contenga una matrice di celle, ognuna delle quali possa contenere un polinomio.
Quindi ricreiamo la directory Opolynom e definiamo il construttore, che questa
volta dovrà prevedere un'opzione di compatibilità con la classe polyecal:
function p=polynom(varargin)
if nargin==O,
p.po1{1,1}=polyscalj
elseif nargin==1,
a=varargin{1};
ìf ìsa(a,'polynom')
p=a;
elseif isa(a,'cell')
150 CAPITOLO 8. OGGETTI IN lvIATLAB
p.pol=a;
p=class(p,'polynom');
else
p.pol{1,1}=polyecal(a);
p=class(p,'polynom');
end
else
r varargin{ 1};
2
c•varargin{2}i
l•langth(varargin);
H (1-•(r•c+2))
error('Numero di argomenti errato')
end '\
tor h=l:r,
for k•i:c,
p.pol{h,k}=polyscal(varargin{2+(h-1)•r+k});
end
end
p=class(p,'polynom');
end
p(i,1) =X+ 1
p(1,2) =X+ 3
p(2,1) = xA2 + 2•x + 3
p(2,2) =X+ 4
end
tor r•1: mp
for cml:np
s.pol{r,c}=p .pol{r,c}+q.pol{r,c};
end
end
s•class(s, 'polynom 1 );
tunction e=minue(p,q)
p=polynom(p);
q=polynom(q);
(mp,np]•size(p);
[mq,nq]•size(q ) ;
it (mp-•mq)l(np-•nq)
error('Matrix dimension must agree')
end
for r=1 :mp
tor c=1:np
s.pol{r,c}=p.pol{r,c}-q.pol{r,c};
end -1
end
s•class(s 1
1
polynom');
function s=mtimes(p,q)
p=polynom(p);
q=polynom(q);
[mp,npJ•size(p);
[mq,nqJ•size(q);
it (np'"•mq)
error('Inner matrix dimensione must agree.')
end
for r:1:mp
far c=1:nq
app=polyscal(O);
tor k=l:np
app=app+p.pol{r,k}*q .pol{k,c};
end
s.pol{r,c}=app;
end
end
s=class(s,'polynom');
lI functìon s•times(p,q)
p=polynom(p);
i
I
I
(
tI
8.3. OGGETTI lvlATRICIALI 153
q•polynom(q);
[mp,np] 11 size(p)j
[mq,nq]=eize(q);
if (mp-=mq)l(np-•nq)
error('Matrix dimension must agree')
end
tor r•1 :mp
tor c•1:np
s.pol{r,c}•p . pol{r,c}•q.pol{r,c}j
end
end
s=class(s,'polynom');
if isempty(a.pol{r,c})
a.pol{r,c}=polyscal(O);
end
end
end
otherwiee
exror('!ndici errati');
end
Il funzionamento di questa funzione dovrebbe essere abbastanza. chiaro; l'unico
punto che richiede una delucidazione è il doppio ciclo for finale. Se abbiamo una
matrice di celle A ad esempio 2 x 2, l'istruzione
A{3,3}=1
estende la matrice fino alla dimensione 3 x 3, ma, a differenza di quanto avviene per
le matrici numeriche, le celle non definite esplicitamente (ovvero A{3, 1}, A{3, 2 Jr._
ecc.) non contengono il valore O, ma il valore nullo ( [] ). Ecco perche il doppio ~i.-·
ciclo le pone allo zero polinomiale. · ·\
Per verificare il funzionamento delle ultime due funzioni si esegua: J;f.;.
1 .,
-i ~
p(4,4)sp(1,1) ~ :,
function s=horzcat(varargin)
App={};
if nargin==1,
s=polynom(varargin{1});
return
end
for bc=1:nargin-1,
p=polynom(varargin{bc});
q=polynom(varargin{bc+1});
[mp,np] =size (p. pol) ;
[mq,nq]=size(q.pol);
if (mp-=mq)
error ( [' All matrices on a row in the bracketed', •..
, expreseion muat have the same number of rowe.'])
end
' 'j
-'.Jj
8.4. EREDITARIETÀ 155 . l:
I I
App=(p.pol q.pol];
end
e=polynom(App);
function s=vertcat(varargin) .. fI
App={}; 'I
if nargin••l, '
I.
s=polynom(varargin{1}) i I
return
end
for bc=l:nargin-1.
p=polynom(varargin{bc}); .:,
q=polynom(varargin{bc+1});
[mp,np]=size(p);
[mq,nq] =size(q) i
• if (mp-=mq)
error(['All matrices on a column in the bracketed' ,. , .
8.4 Ereditarietà
Passiamo ora a descrivere il concetto di ereditarietà e la sua implementazione in
'
MATLAB. Si tratta di uno dei più importanti concetti nell'ambito della program-
mazione a oggetti, e verrà cliseguito illustrato tramite un esempio piuttosto diverso
.
''
I'
dai precedenti: si tratta della coniugazione automatica dei verbi in Francese. I ver- ',:
bi francesi sono fra le strutture grammaticali più irregolari che si riscontrino nelle ', ..
varie lingue (anche se l'Italiano è altrettanto complesso), e in particolare l'indico.,. ' ,.,\ .
tivo presente esibisce comportamenti talmente variegati che alcuni dizionari ripor- . ':,'
I ,, I
•1'
tano fino a 62 coniugazioni (intese come modelli di coniugazione). D'altra parte, '..i I
a tanta ricchezza nel presente dell'indicativo non corrisponde altrettanta varietà
ad esempio nel futuro semplice, che si costruisce sempre nella stessa maniera. Ini-
zialmente, l'esempio seguente era stato sviluppato considerando le quattro princi-
pali coniugazioni, ma ciò lo rendeva eccessivamente lungo. Limitiamoci quindi a
considerare solo le prime due coniugazioni.
I modelli sono i seguenti: per la prima coniugazione il verbo parler (parlare),
il cui indicativo presente è:
156 CAPITOLO 8. OGGETTI IN NIATLAB
je parl -e
tu pa.rl -es
il parl -e
nous pari -ons
vous parl -ez
ils parl -ent
In realtà la prima coniugaiione presenta una pletora di variazioni ortografiche ( "nous man.
geons" invece di 11mangons" per "noi mangiamo", "il appelle" invece di "il appele" per "lui
chiama", ecc.) che però tra.<1cureremo.
Per la seconda coniugazione si segue il modello di finir=finìre:
je fin -is
tu lìn -is
il fin -it
nous fin -iss-ons
vous fin -issez
ils fin -issent
Il motivo per cui la prima persona plurale è scritta con due desinenze sarà chiaro fra un paio
di righi.
Sorprendentemente, l'imperfetto indicativo si coniuga sempre allo stesso modo,
assumendo come radice la prima persona plurale del presente, ad esempio "io
par lavo Il 1 ...
je parl -ais
tu parl -ais
il parl -ait
nous parl -ions
.r
vous pari -iez l
function v=verbo(varargin)
awitch nargin
case O
v.intinito=' 1
i
v. radi e= 1 ' ;
v. part_pase= 1 ' ;
case 3,
v.infinito=varargin{l}; ¼infinito
v.radic=vararg1n{2}; ¼radice
v.part_paas•varargin{3}; ¼part_pass
otherwiee
error('Numero di argomenti arrati 1 )
end
v=claas(v,'verbo');
Gli argomenti in ingre~so per questa funzione sono quelli classici di un paradig-
ma., con l'aggiunta della radice.
Ora passiamo al costruttore per i verbi della prima coniugazione: nella direc-
tory Gprima il Rle prima. msarà :
function vaprima(verb,eignificato)
v.signiticato•significato;
radice•verb(l:(length(verb)-2));
a=verbo(verb,radice,[radice 1
é 1 ]);
v=class(v,'prima',a);
function v=seconda(verb,significato)
v.aignificato=significato;
radice•verb(1:(length(verb)-2));
a=verbo(verb,radice,[radice 'i']);
~•clase(v,'seconda' ,a);
diep(' ')i
Notiamo alcune cose in questo file: anzitutto, il comando clase è usato per
convertire il nome della classe in una stringa di caratteri i inoltre il comando struct
converte un oggetto in una struttura, rendendo più semplice l'accesso ai campi:
in alternativa avremmo dovuto creare vari file di subsref per l'accesso ai singoli
campi degli oggetti, il che tra l'altro avrebbe reso inutilmente disponibili i campi
stessi (in generale è meglio che un oggetto sia. "protetton I a meno che non sia indi•
apensabile ti contrario). Questo modo di operare va usato con la dovuta cautela, in
quanto appesantisce la programmazione, e infatti vedremo in seguito che saremo
costreLti a rendere disponibili i campi con la definizione di un subsref. In generale
però se gli accessi ai campi sono sporadici l'uso di struct può essere vantaggioso.
A questo punto, digitando
par=prima (' parler • • 'parlare') .
,·•
da metodi generali nella superclasse «!verbo. Inoltre, in previsione di future esten- '.
,;
sioni che trattino anche verbi irregolari e possano generare automaticamente il file '
i
presente.m, conviene limitare al minimo la dimensione di quest'ultimo definendo
in esso solo i suffissi, delegando ad un altro metodo o ad una funzione il compito .1
di formare l'intero tempo e visualizzarlo. &co il metodo presente .m per la classe
Oprìma:
functìon p~presente(varargin);
¼ p=presente(VERBO,PERSONA,NUMERO) forma il presente
¼ dell'indicativo del verbo VERBO, con parametri opzionali
¼ PERSONA(un numero da 1 a 3) e NUMERO( 1 s 1 / 1 p')
varargin{1}=varargin{1}.verbo;
desin.e={ 1 e' ; 1 ea 1 ;'e'};
deein.p•{'ons 1 ; 'ez 1 ; 'ent'};
p=coniuga('Indicativo presente' ,dasin,vara.rgin);
questa funzione accetta fino a tre parametri in ingresso, di cui il secondo e il terzo
opzionali con lo scopo di fornire in uscita solo la persona ( l 1 2 o 3) richiesta e solo il
numero (' s' per singolare e 'p > per plurale) richiesto. Nel caso in cui non vengano
specificati gli ultimi due argomenti di ingresso è restituita la. coniugazione di tutto
l'indicativo presente in un array di strutture. A questo scopo chiama la funzione
coniuga.m (che è una vera function, non un metodo: e come tale va memorizzata
in qualsiasi directory del path corrente). Ecco il file coniuga. m,che come si vede
al suo interno contiene la subfunction vis_con (visualizza coniugazione).
function p=coniuga(varargin);
desin=varargin{2};
ver=etruct(varargin{3}{1});
radic•ver.radic;
con.s•strcat(char(kron(ones(3,1),radic)),desin.e);
con.p=strcat(char(kron(ones(3,1),radic)),desin.p);
if length(vara.rgin{3})>1
persona=varargin{3}{2};
II
con.s=con.s{persona}; .I I
con.p=con.p{persona}; I
if length(vara.rgin{3})>2,
numero=varargin{3}{3};
p=eval(['con.' ,numero]);
I
I!
!
160 CAPITOLO 8. OGGETTI IN MATL.A
return
end ,.
p•conj
return
end :rut
viscon(con,varargin{l})j ,} .
pacon; • '!J.
Il risultato di
presente(par)
sarà
.....
_,,
;)Clf,
Indicativo presente : :·,10
i i, lr t
je parle • • r.>l
tu parles \
'·
Ovviamente, l'uso di un punto e virgola alla fine dell'istruzione avrebbe corner~
sempre impedito la visualizzazione del messaggio ans = . . • . ·
Ecco ora il metodo presente. mper la directory ©seconda:
8.4. EREDITARIETÀ 161
L
function p•presente(vara.rgin)
varargin{1}•vara.rgin{1}.verbo;
l
desin.sa{'is';'is 1 j 1 it'};
desin.p={'issons';'issez';'issent'};
p=coniuga('Indicativo presente',desìn,varargin);
Pasaiamo ora a.i metodi per i tempi in comune (da salvare nella directory
Clverbo):
l
. ,
function p•imperfetto(varargin)
desin.s={'ais';'ais';
desin.p={'ions'
'ait'};
;'iez';'aient'};
radic=presente(varargin{l},1,'p');
l
radic=radic(l:end-3);
vnew=verbo('' ,radic,'');
varargin{l}=vnew;
1
paconiuga('Indicativo imperfetto',desin,varargin); -
Se ci si ricorda che la radi ce dell 'imperfetto è quella della terza persona plurale del ,
presente si capisce perché si è definito un verbo fittizio vnew. j
Terminiamo qui questa breve panoramica. sulla programmazione a oggetti in
MATLAB. Ovviamente, la. trattazione è ben lungi dall'essere esaustive.,quindi
ancora una volta per ulteriori approfondimenti si rimanda a.i manuali (e a buoni \
testi sulla programmazione ad oggetti). _
.,
1
i"
'
,t
\.
.. .
. .
L j •
..,:(\:
'r
Capitolo 9
..
.,
164 CAPITOLO 9. FUNZIONI MATENIATICH
La lunilone llump1(~)
100,------,----~---..----,.---"""'T"'"-----.
80
60
40
20
o
L.----
-20'----__.. ___ ..........
___ ..__ __ _.....___ _.____ ___.
-1 --0.5 O o.s 1.5 2
t•inline( 1 1./((x-.3),~2+.01)+1./((x-.9).~2+.04)-6 1
);
.ltl
9.2. RICERCA DI ZERI E MINI!vll 165
l
campioni in Z lungo le direzioni x e y, o dei vettori, con il significato di coordinate
dei punti in cui va eseguita la derivazione. Se omessi vengono assunti scalari e
t t·
unitari. I risultati dZ~ e d.Z~ sono matrici che contengono le derivate parziali
fJZ/fJx e 8Z/8y.
Invocato nella forma dY•gradient(Y ,dX) fornisce la derivata appr ossimata per funzioni di una
variabile.
!
L'integrazione numerica si ottiene invece con la funzione quad o quadl, che
invocate con
s;quad(~nomeFunzione,a,b);
l
calcolano l'integrale definito
s = lb
f(x)dx
l
Per esempio, l'area della funzione humps nell'intervallo
l'istruzione e•quad (Chumps,O, 1).
[O,l] si ottiene con
'
l'evoluzionecon un ulteriore parametro trace (diverso da O); nell'esempio precedente sevoglia.mo
un errore relativo inferiore allo 0.01 % e un grafico della primitiva della funzione humps usiamo
s=quad( 1 h'Wllps',0,1,la-4,1);
l.
L'uso degli apici corrlapondtt alla vecchia sintassi MATLAB1 tuttora a.cceuablle. La funzione
quadl funzione.nelle.stessa maniera. ma usa un diverso algoritmo di lntegra.2ione.
Per il calcolo di integrali doppi, si usa la funzione dblquad, nella forma
I .,
I
s=dblquad(~nomeFunzione,xmin,xroax,ymin,ymax); l. il
\
!
calcola
l. .1
\.
9. 2 Ricerca di zeri e minimi
~ {
In questo paragrafo sono descritte le funzioni di MATLAB per calcolare il minimo
e gli zeri di funzioni di una o più variabili. Ulteriori funzioni per risolvere problemi
di ottimizzazione richiedono il toolbox Optimization e non verranno qui descritte.
La funzione fzero(CnomeFunzione,xO) trova lo zero (reale) della funzione
definita dal function file nomePunzione.M più vicino a x 0 •
L
Esempio:
i
xz1=fzero(~humps,O) 1/.zero prossimo a x=O l
xz2=fzero(Ghumps 1 1)
'I
1
\
!_
• .I
166 CAPITOLO 9. FUNZIONI MATEMATICHE
fzero(~humps,(-1 1],opzioni)
La ricerca. del punto di minimo di una funzione cli una variabile si esegue con
x=fminbnd(©nomeFunzione,x1,x2);
che trova il minimo (locale) nell'intervallo (x1 , x2 ] della funzione definita nel file·
nomeFunzione. H.Anche in questo caso è possibile usai:eun vettore di opzioni come
parametro, e inoltre fino a 10 parametri da fornire alla funzione di cui si cerca il
minimo come argomenti in ingresso; la forma più generale possibile di chiamata è
x 2 fmin(~nomeFunzione,x1,x2,opzioni,p1,p2, ... );
fmin(«lcos,3,4)
x=fminsearch(«lnomeFunzione,xO);
function z=seno2(u)
x=u(1);y=u(2);
z=sin (x).*sin( y); ; '
'
allora
fminsearch(Gseno2t[O,O])
ans ,.
1.5708 -1.5708
I primi tre metodi sono adatti a.Ila soluzione di equazioni differenziali non
11
atiff 11, ovvero in cui la soluzione non evolva su scale temporali molto diverse fra
loro. 11fatto che si distingua esplicita.mente fra problemi stiff e non stiff è dovuto
alla difficoltà computa.iiona.le che incontra un algoritmo nello scegliere il passo di
integrazione se le dinamiche del sistema da integrare sono molto diverse fra loro.
In particolare, ode46 è un algoritmo di tipo generale, che può essere tranquilla-
mente usato in prima battuta per calcolare la soluzione del problema. In presenza t I
in cui i requisiti di tolleranza non siano molto spinti. Infine, se il problema non è
fortemente stiff, si può usare ode23t 1 •
La.sintassi è identica per tutti i risolutori, che richiedono che l'equazione da
integrare sia espressa in forma normalein un functlon file, ovvero come sistema,
di equazioni del primo ordine
dx
dt = I (t, x) (9.1)
dove :r_è un vettore di cardinalità. pari all'ordine dell'equazione e t la variabile
indipendente (il tempo, per equazioni che modellano il comportamento di sistemi
dina.miei).
La chiamata nella sua forma più semplice è
(t,x]=ode45(~numeFunzione,Timeint,x0);
in cui norneFunzione.M è il function file che realizza la (9.1), che deve prevedere
i due argomenti in ingresso t e x e in uscita fornire la derivata temporale di ~
come vettore colonna, Time!nt è Pintervallo di tempo su cui integrare, ovvero l'in-
tegratore parte da Timelnt (1) e si arresta a Timelnt (end), e xO è un vettore
di condizioni inizia.li. In uscita x contiene la. soluzione dell'equazione e t i cor-
rispondenti valori della variabile indi pendente (tempo) i ciò è dovuto al fatto che
l'algoritmo di integrazione procede con un passo variabile, quindi gli istanti di
integrazione non sono conosciuti a priori e quindi sono forniti come argomenti in
uscita.
Consideriamo Pequazione di Van der Pol:
x+ (x:i - l):i:+ x = O
che possiamo riscrivere come:
Xl X2
3
Equaziont cHvan der Poi
-•,
\
/I
- • Ila
I I
I
2 I
I
I
I
'
I
1
I I
I , I ~'
l
I
, I
I
, I
I
I
.r I I
I
I ,j
;-
I, I I I I
I '
I
l
\ J
\
'\
-1 \
\
\
I I
I I I
-2
I I
I I
\I
I
I
I,
I
ì ~
-3
"
o 2 ◄ 6 B 10 12 1◄ 18 18 20
Ttmpo(a) ·, \
Figura 9.2: Soluzione dell' equazione di van der Pol.
global ab
a=l; b•1;
[t,x]•ode45(~vdpol1,[0 20] ,[0;2) ) j
Le routines di risoluzione dispongono di un altro argomento (opzionale) in ingresso: un
vettore di opzioni (in realtà è una struttura) . La chiamata diventa quindi
1 Per ulteriori considerazi oni sui metodi di integra.zione, si consideri anche il Paragrafo 12.3
CAPITOLO 9. FUNZIONI MATEMATICHE ·.
170
. ,.r,·. '
[t,x]~o~e45(~numeFunzione,Timalnt,xO,opz io ni ) ;
' .
I parametri che possono essere definiti sono : RelTol , AbaTol e HormControl, per quanto !~1
riguarda il controllo dell'errore; OutputFcn, OutputSel , Rafine e Stati per le opzioni di uscita / ~~
Jacobian, JPattern e Vactorized per fornire una matrice Jac obiana; InitialStep e Hu:Step pef. ·
la definizi one del p888o di int egrazione; Evant1 per rileva re II verifica.rei di eventi, e altri parametri '}
che si riferiecooo a.equaz ioni algebrico-differenziali o a opzioni specifiche per l'integratore oda16a. 1
Per defin ire i parametri si uaa il comando odent, nella forma: ·· ?
1
iI opzi oni=odeset('nome1',valore1,'nome2',valore2, . . . );
..
ad esempio
opzioni•ode11t('Re1Tol',1e-4,'Refine',3,'Stat1','on') ;
c!eflniece una tolleranza relativa dello 0.01 %, una suddiv isione degli Intervalli in tre lntervallinl $
in cui risolvere l'equazione e mostra un insieme di statistiche sull 'evoluzione dell'integraz ione
\ (numer o di passicompletati con successo e ins ucceeso, ecc.). -~ }
'
! Come esempio di problema stiff, consideriam o il modello di un motore elettriC9 ~-
in continua con eccitazione costante:
i
ì = =
dove: x 1 w è la velocità di rotazione del motore, x 2 i la corrente di armatura,
J è il momento di inerzia del motore (e del carico riportato all'aasedel motore),
/3il coefficiente di attrito viscoso, I< una costante per tener conto della copplli
elettrico e della forza controelettromotrice, R ed L le. resist enza e l'induttanza
di armatura, V la tensione di alimentazione. Il problema è chiaramente stiff, iq
quanto la dinami ca elettrica è ovviamente più veloce di quella meccanica . ·'
Scriviamo quindi il function file ·
function xdotmmotore(t,x)
global beta J K R LV
xdot=(-beta/J•x(1)+K/J•x(2); . ..
-K/L•x(1)-R/L•x(2)+1 / L•VJi
e calcoliamo la soluzione a partire da condizioni iniziali nulle, con tensione di
alimentazione V= lOV, tempo finale 60s:
global beta J K R LV
Jm1e-2;R=10;K .0l;beta•1e-3;Lc10e-3;V~10;
2
,0,------.----,-- ----,.---=
=~=====::!:=:======i
9
- velocità01
a - - correnlaI
s 1•
3 .· I
I I
I 1
2 '·
L 'i;
T&mp0(eJ
I
1 r. ' •
Figura 9.3: Soluzione dell'equazione del motore elettrico. 1
~ I
H
..
La soluzione è riportata. in Figura 9.3.
Si noti come la velocità sia molto più lenta della corrente, che va subito a
regime, come già previsto, quindi è corretto usare il comando ode 1511.Per inclao,
anche ode46 Cornlece la soluzione corretta., ma a scapito del tempo: ai provi a
digitare
tO=clock;
[t,x)=ode15s(Cmotore,[0 60),(0;0]);
etime(clock,tO)
'I'' l.
l ':
172 CAPITOLO 9. FUNZIONIMATEMATICHE
per prima cosa dobbiamo mettere l'equazione in forma normale e scrivere il relativo
file exode . m:
function dydx=exode(x,y)
dydx=[y(2);y(l)-x];
si noti che in ingresso abbiamo ancora una volta due parametri. Poi dobbiamo
definire le condizioni al contorno, nella forma / (y) = O; detto in altri termini, il
secondo membro deve sempre essere nullo, quindi scri,viamo la funzione exbc . m:
function res=exbc(ya,yb)
res=[ya(l);yb ( l)+1];
la funzione che definisce le condizioni al contorno accetta due para.metri in ingresso:
il valore dell'incognita agli estremi dell'intervallo; in generale, quindi, sex E [a, b]la
funzione avrebbe in ingresso y(a) (vettore, ovvero (y1(a), y2(a)) e y(b) e restituisce
l'errore corrente sul soddisfacimento delle condizioni al contorno.
A questo punto resta solo da creare la struttura richiesta in ingresso da bvp4c.
A tal fine ci serviamo del comando bvpini t, che è delegato proprio a questo scopo.
Usiamo delle funzioni di tentativo a ca.so, dato che non abbiamo altre informazioni,
ad esempio poniamo che sia yi(x) = sin x e Y2(:t)= cos x e scriviamo la funzione
exinit .m:
function yinit=exinit(x)
yinit=[sin(x);cos(x)];
-0 .7
- 0.8
-0.9
-1
-I.I
-1.2
-1 .3
-1 .4
-1.5
- 1.6
-1 .7 o.a o.e
o 0.1 0.2 0,3 0.4 0.6 o.a 0,7
9.4 Esercizi
Esercizio 9.1 Calcolarele radici dell'equazione
2
:z: - 3sinx +O.I= O
1' '
174 CAPITOLO 9. FUNZIONI MATEMATICHE
nell'interoallo x E [3,3.35).
Esercizio 9.5 Una fabbrica decide di iniziare la produzione cti un nuovo tipo di
caramelle dietetiche. Il costo di produzione è di L.1000 per confezione e t'ufficio
di marketing prevede una richiesta settimanale di 100000/p'.lconfezion~, dove p
è il prezzo complessivo al quale ogni confezione è venduta. Si calcoli il prezzo al
quale sarà messa in vendita tma confezione di cammelle in modo da mas8imizzarn
il p1·ofitto.
Suggerimento. Evidentemente in questo modello molto semplificato
il profitto settimanale è (p - 1000)100000/p 2 .
x = (a - by)x
il - (cx-d)y
r-riJ2
.. 2 .
0 + -i-0 - O
r
dove r è la distanza del 3atellite dal centro del pianeta, 0 l'angolo di azimut (detto
in altri termini l'anomalia, se pensiamo al riferimeuto che giace nel piano dell'or-
bita e un si3tema di coordinate polari 1>erindividuare la posizione del satellite) e
k la costante di gravitazione relativa al pianeta.
Si studi il moto del satellite in orbita intorno alta terra per quote variabili fra
350 e 500 km.
176 CAPITOLO 9. FUNZIONI MATEMATICHE ..
Esercizio 9.9 La ricerca dei punti fissi di una trasformazione F(x) è fondata
sulla soluzione dell'equazione
x = F(x) . .;,
1. F(x) - x2 - x/2
2. F(x) - x(l - x)
3. F(x) - (2 - x)/10
4. F(x) - x4 - 4x2 + 2
5. F(x) - 1r/2 sinx
6. F(x) - -sinx
7. F(x) arctanx
8. F(x) = tanx
9. F(x) = log lx - li
,.1'
I'I
l :I
:,j
1'1
l
:, !'ij
Parte II
n•;:
~
. ,,
·1
Il Siniulink
l •.
,,
I
1 •
l~
•
',,
,'j
n
IO
!'
\ ;
\...
j :
;
' :
'
Capitolo 10
Elen1enti fondaII1entali
sul significato dei risultati che Simulink potrà fornire, in partic olare sul fatto che
il risultato di ogni simulazione è quasi sempre esatto. È fondamenta.le compren-
dere appieno il significato delle parole in corsivo "quasi" e "esatto ". Iniziamo con
quest'ultima. Il risnltato di ogni simulazione è esatto nel senso che è la conseguenza
del modello adottato per la schematizzazione del fenomeno in esame. Un simulo.~
tore, di per sè, non può (e non potrà. mai) verifica.rese il modello è congruente con
la realtà. Un simulatore lavora, in ultima analisi, con una serie cli numeri fornendo
come uscita altri numeri. Non esiste alcun criterio per preferire un numero ad un
, I
altro, tutti i numeri sono leciti. La realtà fisica non è cosl magnanima: chiunque I •
I. '
• I
'I
utilizzi uno strumento di simulazione deve farsi carico di verificare che i numeri I
(. .
•
abbia.no un senso fisico, cioè che il modello sia aderente alla realtà . Questa verifica }.
non può essere in alcun modo delegata ad un programma per quanto sofisticato
f !
esso sia.
Analizziamo l'altra parola "quasi". Un computer, come una calcolatrice, non ~ ~·
è in grado di effettuare calcoli esatti, nell'eseguirli effettua una serie di approssi- • 'I tI
mazioni ed arrotondamenti che, soprattutto per operazioni complesse e ripetute, .f
iI
I
Ii
1 Da qui deriva la parola Link. ,, I
•! ;
!
I
I
I ! ~
I I I
l !' I I
~.:.i
11
180 CAPITOLO 10. ELEMENTI FONDAMENTALI
possono alterare in modo anche sensibile i risultati. Questo fenomeno diventa par-
ticolarmente rilevante quando si ricerca la soluzione di equazioni differenziali non
lineari. È infatti noto che per questa classe di problemi non esiste, neanche dal
punto di vista teorico 1 un metodo generale di soluzione: la soluzione va ricercata
tramite tecniche approssimate mirate alla soluzione di particolari classi di proble-
mi. Simulink dispone di un'ampia e sofisticata collezione di tali metodi ognuno
specializzato nella la soluzione di specifiche classi. L'utente non può, però, limitar.:-
si ad un ruolo passivo ma deve, sulla base delle proprie conoscenze ed esperienze,
indicare a Simulink il metodo di calcolo do. utilizza.re per il particolare problema
in esame e specificare gli opportuni parametri da usare. ,,.
Su questi aspetti torneremo in maggior dettaglio più oltre, per il momentò
vediamo come costruire uno schema Simulink. ··
y
I .
: .
u
m=l
. ''
ii+u=u (10.1)
I dove y rappresenta lo spostamento rispetto alla posizione di equilibrio, u è una
forza applicata dalt>esterno, m è la massa del sistema e k la costante elastica della
molla . I due punti sulla prima y rappresentano l'operatore di derivata seconda,
ovvero y•· -==dtd ( dtd y ) .
10.1. COSTRUZIONEDI UNO SCHEMA SIMULINK 181
Ingressoesterno
(forzaupplicuto)
-
Figura 10.2: Schema a blocchi del sistema massa-molla..
1 1
s s
Integrato, lntegrator1
Creazionedi
un OUOYO
schema
Blocchi
Descrizione della
R ili $......_
funzionale ; l fl~ libreria
del blocco • -il o.......
evidenziato I~'-""""..,,
•!!ti Mot,
,-~ N-•
~ i! Sii,Mlou,.-
- «tj Sti.t
Librerie àl ..,._,
J.JWCDMAfttl•-.8'dJII
f 111Jll~8lotittl
~ • c..rws..-
,_
m-JI OSPllod,MI
11)-IWOWt•O-llod,tll
mil r~8\id<..,
!11-
JWFuu,l•T-
I JWMl"t ,...., ll z.,.,,,...
[Il lii MalO!dlDSP8!oct-ut .J·, ,O.I
1BJIIMCD
811:d111
9l il HNII1111
..... llod.ttl
•A. ,..-.,,,-lo
"., 1'"..,·-::---·
·. _.....,.
Con un clic sul primo bottone a sinistra delia toolbar (quello a forma di un
foglio bianco) comparirà una nuova finestra denominata Untitled;questo è il foglio
sul quale dovremo disegnare il diagramma a blocchi del nostro modello.
Esaminando il disegno di Figura 10.3 vediamo che il primo blocco funzionale di
cui abbiamo bisogno è un nodo sommatore. Espandendo, tramite un clic, la libreria
Simuliuk e quindi la libreria Math comparirà una lista di blocchi il penultimo dei
qnali, denominato Sum, è il blocco sommatore che cercavamo. Per inserire tale
)
I blocco nel foglio di lavoro è sufficiente un 1'drag and drop": port&re il cursore
l sul blocco sommatore, premere il bottone sinistro del mouse e tenendolo premuto
spostarsi al centro della finestra Untitled e, quindi, rilascia.re il bottone. li blocco
aommo.toreè ora disegnato sul nostro foglio.
Nelloschema sono presenti anche due blocchi funzionali di tipo integratore. Per
inserire tali blocchi è sufficiente ripetere due volte la procedure descritta preceden~
temente, il blocco Integrotorè il secondo della libreria Continuous. Nel collocare i
blocchi Integratorsul foglio è opportuno avere l'accortezza di porli alla. destra del
blocco sommatore.
Nel disegno di Figura 10.3 i tre elementi sono allineatii sarebbe opportuno che
anche i blocchi sullo schermo lo fossero. Se così non fosse, è sufficiente fare un clic
con il bottone sinistro del mouse, sul blocco non allineato e, tenendo premuto il
bottone, allinearlo. ·
Fatto questo non ci rimane che disegnare le linee che connettono i vari blocchi.
I
l
I
I
I
1 I
10.1. COSTRUZIONE DI UNO SCHEMA.SI!vIULINK 183 l
Se si posiziona il cursore del mouse in prossimità della freccia uscente dal somma~
tore (le frecce uscenti da un blocco ne rappre sentano le uscite) il cursore assume
una nuova forma (una croce sottile). Se, senza rilasciare il botton e, ci si sposta
verso destra a mano a mano che il cursore avanza lascia una linea tratteggiata
dietro di sè. Arrivati in prossimità alla freccia entran te nel primo integratore (le
frecce entranti in un blocco rappresenta.no gli ingressi), il cursore cambia forma e
diviene una doppia croce. Rilasciando in questa posizione il bottone del mouse, i
due blocchi risulteranno connessi: una freccia piena indica che la linea è connessa
con uno degli ingressi del blocco destinazione e l'assenza della freccia uscente dal
blocco di partenza indica che la linea trae origine dal blocco. L'orientamento della
freccia. indica la direzione del flusso. Nel caso in cui il collegan1ento non fosse
andato a buon fine, le. linea terminerebbe con une. freccia. sottile che indice. che la I:
l
I~
linea è "sospesa.". ;I
Un modo alternativo per connettere due blocchi consiste nel cliccare prima sul
blocco di partenza (appaiono dei quadrati neri pieni nei vertici) e quindi tenendo
(
l
t,
Il
premuto il tasto CTRL cliccare sul blocco di destinazione; Simulink automatica- .,
mente disegnerà la linea di connessione. Utilizzando una di queste procedure si ~ ',
' I
colleghino fra loro i due integratori. ·' 1·
!~'.1:
Dall'ultimo integratore si faccia partire una linea. "sospesa 11 verso destra (è
t' '
sufficiente rilasciare il bottone del mouse non appena la linea è della lunghezza vo- ·:I
luta.}. Come detto una freccia sottile segnala che la linea è "sospesa". Si posizioni
il mouse a metà della linea sospesa e si prema il bottone destro del mouse: il cur-
sore assumerà la forma. della croce sottile. Senza rilasciare il bottone del mouse,
si tra.cci una linea verso il basso e, quindi, si rilasci il bottone del mouse. Si è così
creata. un nuova linea sospesa, introducendo anche un nodo di diramazione (evi-
denziato con un puntino nero). Posizionando il rnouse in prossimità dell'estremità
di questa nuova linea. il cursore assumerà., di nuovo, la forma della croce soUile, il
che indica la possibilità di far proseguire la connessione. Si connetta, quindi, tale
linea all'ingresso del blocco sommatore .
Ci si posizioni nei pressi dell'altro ingresso del blocco sommatore e si tracci
una linea sospesa verso sinistra. La presenza di una freccia sottile orientata verso
la linea. stessa indica che l'inizio della linea non è connesso a niente.
Un ultimo particolare: nello schema di Figura 10.2 la reazione è negativa.,
mentre quella dello schema Simulink disegnato è posi ti va. Per cambiare il segno del
sommatore si deve richiamare, con un doppio clic sul blocco sommatore, la finestra
Block Parameters. Questa finestra contiene, come vedremo meglio nel seguito,
i diversi parametri strutturali che caratterizzano il comportamento funzionale e
l'aspetto grafico del blocco. Nella sezione Parameters vi è il campo List o/ Si9ns:
che contiene una linea verticale I e due segni~. Questi ultimi indicano che il blocco
ha due ingressi e che l'uscita è la somma di questi. Si digiti
l+-
senza interporre tra i simboli nessuno spazio bianco. Ciò significa che gli ingressi
sono ancora due, ma il risultato sarà la somma del primo con l'opposto del secondo.
184 CAPITOLO 10. ELE!v.lENTIFONDAMENTALI
1
s -s1 1---~ □ .,
. :->··,
···b
Signa! lntegrator lntegrator1 Scope .. :!b
Generator
.:h
. .-y]
Figura 10.5: Schema Simulink del sistema massa-molla con opportuni ingressilct
uscite. ' :.;( !·♦
.
<
Un doppio clic sullo Scope aprirà la finestra di Figura 10.6. Questo blocco: 'z
riproduce un oacilloacopio: l'asse orizzontale è quello dei tempi e sull'asse verticaiel \.,
è rappresentata la grandezza misurata. L'asse verticale dello Scope è centra~ò .
sullo zero e varia di default fra +5 e -5. Per cambiare tali valori si può usliiel ·
il bottone destro del mouse. cliccando con tale bottone all'interno della finest Jaf· <
dello Scopecomparirà un pop-up menu la cui ultima voce Axes Propertiesconse~t~ -;;
di modificare gli estremi dell'asse verticale e di assegnare una etichetta al grafié6 1 _.,,
Si impongano quali estremi all'asse verticale i valori -2 e 2 e il titolo "posizion~ 11 t
(senza alcun segno di %). : ..
Adesso lo schema è completo ed è possibile effettuare la simulazione. Lasciando~ ·::
aperto lo Scope, premete il tasto di play t> nella toolbar dello schema (lo stessòj _
_..!
10.2. ANALISI DELLO SCHEMA 185
Propric1àdello Scope
10.4 Esercizi
Esercizio 10.1 Con riferimento alla schema di Figura 10.3 si modifichino i pa-
rametri del bloccosommatore. In particolare, si provino le seguenti stringhe all'in-·
temo del campo List or Signs: +-, I 11+- e le uarie opzioni del Icon Shape.
Suggerimento. La ban'a verticale I introduce uno spazio fra le porte.
Esercizio 10.3 Analizzare la risposta del sistema di Figura 10.S e quella dell'e-
sercizio precedente in presenza di un ingresso a gradiTlodi ampiezza unitaria.
i
I
. '
'
10.4. ESERCIZI 187
ii + wy = 10 sin(IO t)
ed analizzare l'uscita per w = 110 e 80. Che succedese w = 100 ?
Suggerimento. Per costruire lo schema utilizzare il bloccoGnin dei
Math. Si consideri che la ft-equenzanaturale di oscillazione del sistema
è pari a .,/w.
' '
..
..
I j
, I
Ir
'.I
j.
♦:, !
I
! i
\ I'
i"
I''I t
Capitolo 11
Nel capitolo precedente abbiamo visto come realizzare nn semplice schema Simulink,
vediamo ora come supplire ad alcune delle più comuni imperfezioni:
I
I
:I
t
..
• Duplicazione di un oggetto: selezionare l'oggetto da copiare ed usare i
·: il;
comandi di Gut & Paste del menu Edito il pop-up menu che appare premendo
il bottone destro del mouse o le usuali combinazioni di tasti: CTRL+C
per copiare l'oggetto nel buffer, CTRL+X per spostare l'oggetto nel buffer,
CTRL+ V per copiare l'oggetto dal buffer nello schema (l'oggetto apparirà
in corrispondenza del punto dove si era effettuato Pultimo clic con il mouae).
\
\ 11.1 Elementi testuali
I )
I
Prima di proseguire è opportuno introdurre un'altra classe di oggetti utili per
rendere più chiari gli schemi Simulink : i testi. In Simulink possiamo distinguere
fra Annotazioni, Nomi dei Blocchie Labels:i primi sono dei testi che descrivono
il sistema. ma non hanno alcun legame diretto con i vari oggetti dello schema, i
secondi consentono di personalizza.re la scritta che appare vicino ai vari blocchi e
ìI gli ultimi di dare un nome alla linee o meglio di poter dare un nome alle variabili
che fluiscono nelle linee.
Per introdurre un'annotazione è sufficiente fa.re un doppio clic su un'area
del foglio che non contiene alcun oggetto. Appare un piccolo rettangolo che si
espande man mano che si immette il testo (ENTER per andare a capo). Per
terminare l'inserimento basta fare un clic su un qualunque altro punto del foglio.
Per modificare una annotazione basta farvi un clic sopra.; un doppio clic seleziona
tutta una riga di testo (il testo selezionato è evidenziato). Se si usa il bottone
destro del mouse su un testo compare un pop-up menu tramite il quo.le è possibile
cambiare l'aspetto grafico della scritte impootando il tipo di font, l'allineamento,
il colore, ecc.
Per modifica.re il nome di un blocco basta un clic sulla relativa scritta,
valgono le stesse cose dette per le annotazioni con la sola eccezione che non è
possibile assegnare a più blocchi lo stesso nome. Gli aspetti grafici del nome sono
I p
i
modificabili tramite il pop-up menu che appare facendo clic col bottone destro
direttamente sul blocco.
Per introdurre una label, cioè un nome per la variabile che fluisce in u·na
linea, è sufficiente effettuare un doppio clic sulla linea che si vuole etichettare
(Simulink inserisce automaticamente il nome anche immediatamente a valle del
blocco da cui trae origine la linea). Se la Unea già possiede una etichetta questa
verrà evidenziata e duplicata nel punto in cui è il cursore. Si noti che non è possibile
spostare arbitrariamente una label, essa è confinata nelle vicinanze della linea. Se
si collega uno Scope ad una linea dotata di label, questa appare automaticamente
quale titolo del grafico (a meno che non si specifichi un diverso valore nella finestra
delle proprietà degli assi).
Per cancellare o modificare tutte le occorrenze di una. label è sufficiente cancel-
lare o modificare una di esse (alle volte è necessario aggiornare lo schema tramite
il comando Updatediagramdel menu Edit, ovvero CTRL+D, per rendere effettivo
il cambia.mento). Per cancellare una sola occorrenza, selezionare la label da can•
celiare avendo l'accortezza di tenere premuto il tasto CTRL, quindi rilasciato tale
tasto premere il tasto DEL.
: I
. ·'
.
I I
.I 192 CAPITOLO 11. GLI SCHE!vIISIMULINI<
(cioè il rilascio del bottone ìn una diversa posizione) comporta una azione che è
funzione dell'oggetto puntato.
Più in particolare:
• Lavorando sui blocchi
- Bottone Sinistro: serve a selezionare il blocco.
- Clic and drop con il Bottone Sinistro: consente di spostare il blocco nel
punto dove si rilascia il bottone del mouse.
- Bottone Destro: seleziona il blocco e, contemporaneamente, apre un
pop-up menu dal quale è possibile: eseguire le operazioni di Cut &
Paste, richiamare le proprietà, i parametri e le caratteristiche di visu~
alizzazione del blocco, nonché richiamare l' HELP.
- Clic and drop con il Bottone Destro: crea una copia del blocco che
viene posizionato nel punto in cui viene rilasciato il bottone (si noti che
accanto al cursore compare un segno +).
- Doppio Clic: permette di aprire la finestra Block Parameters del blocco.
• Lavorando sulle linee
- Bottone Sinistro: seleziona. la linea. Se si tiene premuto il tasto SHIFT,
con un clic si introduce un nuovo vertice nella linea.
- Clic and drop con il Bottone Sinistro:
* clic su una linea: permette di spostare un tratto della spezzata
(durante l'operazione di spostamento il cursore assume la forma di
una croce con le frecce ai vertici). La linea si può spostare solo
parallelamente se stessa.a meno che durante lo spostamento non si
prema. anche il tasto SHIFT.
* clic all testremita di una linea: permette di continuare la linea ag-
giungendo un ulteriore tratto di spezzata (durante l'operazione il
cursore assume la forma di una croce sottile).
* clic su un vertice della spezzata: permette di spostare il vertice
(durante l'operazione il cursore assumé la forma di un cerchio).
- Bottone Destro: seleziona. la. line e, contemporaneamente,
apre il pop-
up menu che consente di effettuare operazioni di Cut & Paste e di
richiamare la. finestra delle Signal Properties.
- clic and drop con il Bottone Destro: consente di creare una diramazione.
Operando all'estremità di una linea prosegue la spezzata.
- Doppio clic: permette di specificare la label della linea. Nel caso sia
. già stata definita una label per la linea, essa viene copiata nel punto
indicato con il cursore.
l non vi è alcun oggetto (il cursore assume la forma di una croce) la posizione del
' mouse individuerà il vertice mobile di un rettangolo tratteggiato. Tutti gli oggetti
che ricadono ali 'interno del rettangolo o che intersecano i sui lati al momento in
cui si rilascia il bottone del mouse risulteranno selezionati.
Nel caso si voglia seleziona.re,invece, tutto lo schema si può ricorrere al coman-
do Select Ali presente in tutti i pop-up menu e nel menu Edit (o la combinazione
CTRL+A). ' .
A prescindere dal metodo usato per la selezione, la combinazione SHIFT +
bottone sinistro del mouse consente di aggiungere o sottrarre un oggetto all'in-
sieme di quelli selezionati. Per eliminare completamente la selezione è sufficiente
effettuare un clic su un qualunque punto dello schermo.
I blocco).
•In particolare è possibile operare con le seguenti opzioni:
• Flip Name per spostare il nome del blocco da sotto a sopra o da sinistra a
\ destra e viceversa. ;..
l • Hide Name per nascondere il nome del blocco (quando tale opzione è attiva la ' tf
voce del menu è Show Name e consente di rendere visibile il nome del blocco).
. ,~1
. " ...
':I
rl!!:
Format String della finestra "Proprietà.del Blocco", e per alcuni blocchi, qua.lf a.clesempfb ;; ;~
Il Gain. sfruttare il fatto che r&ppresentanoall'interno dell'icona.i valori assunti dai cam~l :f
parametri. Il risultato di quest'ultima opzione è legato alla risoluzione grafica ed alle voitè;(:i ·
si remle necessario aumentare le dimensioni <lei blocco.
. .•sJ ;:,:-.,
,
... i,~~
• Show Drop Shadows: per inserire l'ombreggiatura al blocco (quando tale ~-
opzione è attiva la. voce del menu diviene Hide Drop Shadows e consente di'-,.
eliminare l'ombreggiatura). J·1:t'
j'I I ,
11.3. ATTRIBUTI DEI BLOCCHI 195
• Flip Block e Rotate Block per modificare l'orientamento del blocco, Flip
(CTRL+F) impone una rotazione di 180°, mentre Rotate (CTRL+R) di
90°.
• Color per gestire il colore tramite le opzioni: Foreground che definisce il
colore dell'oggetto e Background il colore di sfondo dell'oggetto. Un accorto
uso dei colori può aumentare la leggibilità degli schemi anche se un suo uso
eccessivo può disorientare l'osservatore.
' '
È possibile variare le dimensioni dei singoli blocchi: selezionare il blocco, con il
bottone sinistro del mouse cliccare su uno dei quattro quadrati pieni ai vertici (il
cursore si tra.'3formain una diagonale con due frecce alle estremità) e deformare il ,;
blocco in modo opportuno. I
IJ
I Parametri di un blocco servono a specificarne il comportamento funzionale, ,,i
essi variano per numero e significato in funzione della tipologia del blocco. Tutti i '·
blocchi dispongono di una finestra parametri alle quali si accede facendo un doppio 1·
,I
clic sul blocco stesso (oppure tramite la relativa voce del pop-up menu richiamabile
con il bottone destro del mouse}. Le informazio'ni che troviamo in questa finestra
sono essenzialmente (si veda ad esempio la Figura 11.1):
. :.. I,
• Nome del blocco e spiegazione sintetica della sue funzionalità; sono le stesse I
'I
informazioni che caratterizzano il blocco nel Simulink Library Browser. I !ti
• Cli eventuali parametri che caratterizzano il funzionamento del blocco.
• Il Tasto HELP che richiama i'HELP in linea dove è possibile trovare delle
'
informazioni più dettagliate sulle modalità di funzionamento del blocco ed il
significato dei singoli parametri.
I valori dei parametri (e il nome delle relative variabili) insieme con il nome
funzionale del blocco compaiono quando il mouse permane per un certo tempo sul
blocco.
È possibile specificare quali informazioni far visualizzare quando il mouse permane su un
blocco grazie a.Ile opzioni del comando Block data tips options del menu \liew.
La finestra Proprietà di un blocco, a cui si accede tra.mite il pop-up menu del
blocco (o dalla relative voce del menu EditL contiene gli stessi campi per tutti i
blocchi, e per la precisione:
• Description: è un campo "commenti 11 nel quale è possibile dare una breve
descrizione sull'utilizzo del blocco all'interno dello schema.
• Priority: consente di definire un ordine di priorità nella valutazione dei vari
blocchi 'durante w1a simulazione. Il valore di priorità deve essere un intero,
più è basso il valore più sarà alta la priorità associata al blocco. Ad esempio,
se associa.mo ad un blocco A la priorità 2 ed al blocco B la priorità 3, durante
l'esecuzione sarà prima valutato il blocco A (cioè sarà calcolata l'uscita del
blocco A in funzione dei suoi ingressi) e successivamente il blocco B (che sarà
valutato anche sulla base della nuova uscita di A).
I
Parametri
Teseoperlo
HELP
Pri•¼<Priority> \n IC=¼<InitialCondition>
•I
fa apparire al di sotto del nome del blocco il valore del campo priority ~
il valore della condizione inizìale 1 il parametro "\n" impone una andata
a capo (si veda la Figura 11.2). È possibile visualizzare solo stringhe e
valori numerici, se un campo assume valori diversi apparirà la stringa N/S
(not supported), se si fa riferimento ad un parametro inesistente apparirà la
stringa ??? . Si faccia attenzione al fatto che i nomi delle variabili da usare
J
r
. i•
I
l
11.4. UN ESE!vlPIO NON LINEARE: !vlODELLO DI UNA.NA.VE 197
\.
sono quelli che compaiono soffermandosi con il cursore sul blocco che non
sempre coincidono con le etichette dei relativi campi parametri.
J
ill
lntegrator
Pri;::12
IC=2
\ u
l
l
L'angolo di rollio, cioè l'inclinazione della nave nel piano trasversale, è gover-
nato dalla seguente equazione differenziale non lineare del secondo ordine
simin
slmoul
From
Worlc5pace
lntegrator lntegrator1 To Workspace
Fcn
.I
11.5. SINKS - BLOCCHI DI USCITA 199
II potendo utilizzare tutta la potenza di MATLAB sia per creare gli opportuni segnali
con cui sollecitare il sistema, sia per analizzare la. risposta del sistema. stesso.
Volendo definire un ingresso, cioè il momento sbandante dovuto al moto ondoso,
i'
''
• 1
I ,...,, ..,.
l . '.Sempiet\lne:
•1
I
I'I
202 CAPITOLO 11. GLI SCHElvll SI!vIULINK
)
'} La scala dei valori sulle ordinate e, l'eventuale, titolo dei grafici sono definiti
nella fìnestra delle proprietà degli assi richiamabile tramite il pop-up menu che si
attiva cliccando con il bottone destro del mouse in prossimità dell'asse stesso.
L'opzione di default 7.<SignalLabel> indica che il nome dell'asse è quello della label della
li primo blocco nella libreria Sinks è il Di8play che visualizza il valore numertCO:
inatantaneo del suo ingresso. '
È posaibile indicare il formato della rappresentazione, un eventuale fattore di decimazione e..
un passo tli ca.mpionamento.
li Display può lavorare anche con segnali multi-variabile . Se la dimensione del blocco aon
consentono la visualizzazione di tutte le grandezze in ingresso appare una piccola freccia con la
punta rivolta nella direzione nella quale è necessario espandere il blocco per visualizzare tutte le
grandezze.
ì Se è attiva l'opzione floating , il blocco mostra il valore istantaneo delle grandezze che fluiscono
sulle liuee di volt.ain volta selezionate.
Con il blocco X Y Graph è possibile rappresentare sull'nsse delle ascisse una
grandezza differente dal tempo, in particolare viene utilizzata qualé valore di ascis-
sa la grandezza collegata al primo ingresso. È utile, ad esempio, per rappresentare
le granùezze sul piano delle fa.ai.
Il blocco XY Groph lavora esclusivamente con grandezze scalari. L'utilizzo di questo blocco
potrebbe aumentare li tempo necessario per completare la simulazione.
t li blocco XY Graph non è un blocco elementare, è un blocco che "m113chera" un sottosistema
ed è ottenuto come un mask (si veda il Paragrafo 14.4). Nel pop-up menu del blocco sono presenti
un maggior ,numero di opzioni e la finestra parametri si attiva, oltre che con un doppio clic sul
blocco, con l'opzione Moslr.parameters mentre l'opzione Block parometers gest isce i parametri del
sottosistema. li fatto che il contorno del blocco sia più speeso indica. che si tratta di sottosistema di
tipo atomico (come indicato dalla opzione Treot as atomìc unit delle proprietà del sottosistema).
Fra.i Sinks vi è anche il blocco ToFile che consente di memorizzare le variabili di lntereese
in un file .mbt. Il file conterrà un'unica matrice le cui righe rappresentano i valori assunti dalle
varie grandezze durante la simulazione {rispetto al modo di operare del To Worlr.spaceè invertito
il significato deUe righe e delle colonoe). La prima. riga della matrice è costituita dal vettore dei
tempi. Analogamente al blocco To Worlr.spaceè possibile indicare dei fattori di decimazione ed
un passo di campionamento fi880.
Un altro blocco importante è il Outport che consente di individua.re le uscite
,t di un sistema. Simulink, infatti, individua come variabili di uscite di uno schema
I t esclusivamente quei segna.li collegati a.cluna porta Outport. È importante tener
presente cioò quando si utilizzano gli strumenti di analisi (vedi Paragrafo 16.1)
11.6. SOURCES - BLOCCHI DI INGRESSO 203
..
I
t•0:0.1:10;
eimin. time=t';
simin.signals.values=[3•sin(t')+0.7+sin(0.3•t')];
simin.signals.dimensions=1;
• Limit output: Consente di imporre un limite sul valore di uscita.. Quando il valore del•
l .:
l'integra.le raggiunge uno dei limiti (specificati nei campi Upper saturation limite Lower
saturation limit) l'azione di integrazione è sospesa fin tanto che il segno dell'ingresso è
concorde con quello dell'integrale e il valore dell'uscita è mantenuto costante. Quando
questa opzione è attiva nell'icona del blocco compare il relativo simbolo. Questa opzione
consente di evitare il così detto fenomeno del wind-up negli schemi di controllo.
• Show aaturation port: abilita la. presenza di una seconda porta di uscita Il cui valore è
pa.ri & 1 o & -1 a secondo che il valore dell'integrale superi il limite superiore o inferiore
rispettiva.mente; se i limiti non sono superati l'uscita è pari & O.
• Show state port: abilita una porta di uscita. sulla parte superiore del blocco che rende
accessibile il valore dell'integrale. Sebbene questa quantità coincida con il valore deH'uscita
del blocco, essa. è ca.lcola.to in un istante dl tempo precedente e cib permette, in alcuni casi
particolari (ad esempio segnale di reset o condizione iniziale dipendenti direttamente dal
valore dell'integra.le) di superare alcuni problemi di implementazione .
t Stato
Ingresso
out ut
Nella Figura 11.6 sono mostrate tutte le porte del blocco Integrator.
I Nelle versioni precedenti di Simulink esisteva un blocco Jntegrotorelementare ed una serie di
blocchi specializzati, dalla versione 3.0 vi è un unico blocco in grado di gestire tutte le situazioni.
Un altro blocco di largo uso è il Gain della libreria. Math. Esso amplifica
l·-:..• ~~~
"' :
""
_,. I ~
,._ ii
'
11.8. LOOK UP TABLE 207
possibile utilizzare il comando help per una loro succiuta spiegazione. Fanno ec-
cezione le seguenti funzioni: ln(u) che restituisce il valore del logaritmo in b~e
naturale di u (analogo all'istruzione MATLABlog che è comunque supportata),
power(u, v) e pow(u, v) che forniscono entrambe il valore di u 11 (è l'analogo del-
l'espressione MATLABxAy, che è comunque implementabile anche all'interno del
blocco Fcn), hypot(u,v) che restituisce il valore z = ✓u 2 + v2 • È anche con-
sentito l'uso delle parentesi tonde O, degli operatori binari + - • / • ed unari
+ - con l'usuale significato, dei seguenti operatori di relazione == ! = > < >= <..
con l'analogo significato visto nella parte MATLABcon la sola eccezione che la
relazione di dive1·so da è indicata con il simbolo ! = (al posto di -=) e,dei seguenti
operatori logici
&&: AND logico analogo a1l di MATLAB
11 OR logico analogo al I di MATLAB I
NOT logico
È facile intuire che alimentando il blocco Fcn con l'uscita di un Clocksi può
costruire un «generatore di segnali" arbitrario .
L'uscita del Fcn è sempre una variabile scalare, ma il blo cco può operare anche con più
segna.li di ingresso i quali vanno multiplati sull'unico canale di iugresso. I vari ingressi saranno
poi indicati rispettivamente con u(l], ... u(n]. Si noti che il valore dell'indice va racchiuso fra
parentesi quadre anziché tonde come usuale nelle espression i MATLAB.
Tutte le eccezioni elnte.ttiche presenti nelln scritture delle espressioni dello. Fcn sono dovu~e
e.I fatto che tale blocco implementa delle espressioni C.
l ..f
',,,
1
J. ·i
208 CAPITOLO 11. GLI SCHEMI SIMULINK
tutti i possibili valori degli ingressi: l'uscita è calco lata per un ingresso generico
come interpolazione delle uscite specificate in corrisponde nza degli ingressi pi~ '
prossimi a quello di interesse.
Simulink dispone di diversi blocchi per l'implementa2ione delle funzioni look
up contenuti nella libreria Punction & Tablee rappresentati in Figura 11.7.
83 :~-
Look-Up
Table
Look-Up
Tabla (2-0)
Look-Up
Table (n-D)
2-0 T[k]
~
™PreLook-Up
lndex Search
lnterpolation (n-0)
us ing Prelook-Up
Direct Look-Up
Tabla (n-D)
.. f\.
f. Pinterpolazione e Pestrapolazione devono essere di tipo lineare, tramite una funr _ii
zione spline o costante a tratti. Inoltre è possibile indica.re se deve esserci unà • ,l
segnalazione di errore o di warning allorquando l'input eccede il range specificatp., -,
nonché il metodo di ricerca dei breakpoints più prossimi al valore dell'ingresso:.
Per questa opzione sono possibili tre diverse scelte: d
11.9. I SEGNALI 209
Alle volte può succedere che una stessagrandezzadebba pilotare più look up tabla. In
questo caso pe1·rendere più efficiente lo schema è possibile ricorrere al blocco Preloolc• Up lnde:,i
Search che produce in uscita i valori degli indici con cui alimentare i blocchi Interpolation (n•
D) Using Prelook-Up o i blocchi Direct look up To.ble (n-D). La differenza fra i due tipi di
blocchi è che i secondi non effettuano alcuna interpol&zione dei valori di uscita, di conseguenza
è necessario attivare l'opzione Output only the indez del Prelook-Up Index Search (l'icona del
blocco cambia in modo da. evidenziare che lo stesso restituisce solo il valore dell'indice e non la
distanza dell'ingresso da.I breakpoint) Inoltre tale blocco può generare come uscita anche va.lori
vettoriali e matriciali.
11.9 I segnali
Prima di concludere questo capitolo è doveroso dare un'occhiata più approfondita
anche all'altro elemento fondamentale di ogni schema Simulink: i segnali. I segnali
rappresentano gli ingressi e le uscite di ogni blocco e sono l'elemento che permette
di interconnettere i vari blocchi. Non dimentichiamo però che lo scopo di una
simulazione è lo studio dell'andamento nel tempo di alcuni segnali.
Graficamente un segnale è rappresentato da una linea. Ad ogni segnale è possi-
bile attribuire alcune proprietà trnmite la finestra dei Signal Properties richiama-
bile tramite il pop-up menu che compare cliccando con il bottone destro del mouse
sulla linea (Figura 11.8).
In particolare è possibile definire i seguenti parametri:
• Signa/ name: è la label del segnale (assegnabile anche tramite un doppio clic
sulla linea).
Presenre
solo in
presen1.a
Click qui di segnali
per ;utivarc virtuali
la funzione "'. ! ' ~I 'l~ ..
specificata
f
•I
nelcompo
p!ll1lnlelrl
l~~tlwJ~~tt~I ' •~ ~/
Ij I ,:r.r., I •• , . ·•
·· ~TW
~" ~ ! JA1io • • _. i=..~-4?~
... fiN/~~1~'<iilAiti~
• •
'-.
" ' 1'41~1\l 1~r
;:1,r1•pi,.
ol I
~ ili'
J !i {
·, I I
~·\
~,,.. ~,.~,!~ ,)_,
-r,- ~ .... ..
,' ''
Figura 11.8: Finestra ùelle Proprietà. dei segnali.
:~ .
·l i~
~ · J\~ t.
richiama il .file htrnl info..signal.htm.
• Show propogatedugnal; Queetn opliione appare solo In preeeoZ& di segnali vlrtuall. L'op-
zione on evidenzia le label del costituenti di primo IJvello, mentre l'opzione all evidenzia
le label dei costituenti elemeute.ri, si veda la Figura l 1.9.
Genera.lmen~e un blocco manipola i segnali in ingresso per generare nuovi segnali in uscita.
Fanno eccezione alcuni dei blocchi della libreria Signals & Systerns che producono in uscite., come
li definisce il manuale di Simulink, dei "segnali virtuali ". Tuie locuzione, la cui scelta non è delle
più felici, &ottlntende il fatLo che il blocco che ha generato il segnale non è un blocco funzionale
vero e proprio (nel senso che non effettua alcuna manipolazione sui dati di iugreeso), ma un
blocco "virLuale" che ha il solo scopo di organilizare in maniera più efficiente i segnali. A questa
categoria appartengono blocchi come: Mux che multipla su un'unica linea più segnali o il From
che preleva il segnale da una differente locazione dello schema senza la necessità. di tracciare
gralìcamen\e la linea di connessione, ecc. In presenza di "segnali virtuali", se come nome del
segnale si inserisce <, Simulink mostrerà automaticamente le label dei segnali costituenti.
Un segnale può essere a.nche tempo discreto, cioè generato da. un blocco la
cui uscita varia solo in determinati istanti di tempo. Il parametro Sample Time
rip orta. l'ampiezza dell'intervallo fra due variazioni ( -1 indica un segnale continuo
nel tempo).
Si noti che , a differenza dei "veri" segnali cam pionati, i segnali Simulink non sono definiti
11.9. I SEGNALI 211
Opzior,eall
Opzione on
<ABC,d >
Figura 11.9: Significato delle opzioni Show propagatedsignal delle Proprietà. dei
segnali.
solo negli istanti di campionamento. Simulink, infatti, assume che a va.Ile di ogni blocco tempo
discreto vi sia un organo di tenuto. di ordine zero (cioè un Sample and hold} che mantenga
costante li va.loro di uscita Ano al aucceaaivo istante di campionamento.
Un segnale può rappresentare ,sia quantità rea.li che complesse, sia. quantità
scalari che vettoriali (sia di tipo 1-D che 2-D)i nonché essere caratterizzato da uno
specificato formato di rappresentazione (Data Type).
Il Data 7\tpeindica il modo in cui i numeri sono rappresentati in memoria. Simullnk supporta
i seguenti tipi:
Per default tutti i segnali di uno schema. Simulink sono di tipo double, con la sola eccezione delle
uscite dei blocchì logici che, se è attiva l'opzione Boolean logie signals dei Simulation Parameters,
sono di tipo boolean.
L'opzione Port data types del menu Format consente di evidenziare il Data Type di ciascun
segnale.
Specificare il Data Type di un segnale o di un parametro è utile quando si vuole simula.re
il comportamento di un sistema che includa la presenz11di un dispositivo digitale che operi in
tempo-reale. Infatti per ra.gionì di costi e di efficienza. molti apparati digìtali che operano sul
campo (sistemi embedded) non sono in grado di lavorare con numeri rappresentati in doppia.
precisione (doubla).
Purtroppo in Simulink non è possibile specificare direttamente la modalità di rappresen-
tazione dei numeri per ciascun blocco (con la sola eccezione ciel blocco Constant), ma ogni
segnale di uscita di un blocco eredita. il tipo del segnale di ingresso. È possibile utilizzare, in
1
,'•
1.
l
212 CAPITOLO 11. GLI SCHEMI SIMULINM -~
a.lcuni campi para.metri, delle variabili MATLAB con tipo diverso da. double, in questo caso il
tipo del segna.le di uscita sarà determ inato utilizzando le usuali regole per il casting dei tipi2 , .
In a.lcuni blocchi è presente l'opzione Satumte on integer overftow che, in presenza dì un
segnale di tipo intero che ecceda il suo range di rappresentazione, satura. il valore dell'uscita. al
massimo valore consentito. Qualora. questa. opilone non è attiva., le conseguenza di un overflow
sono quelle epeclflcate con l'opzione Data overftow del Simulntion Parameters.
SI noti che tutti gli Ingressi di un blocco {e clb vale anche per I blocchi virtuali) devono
essere del medesimo tipo. L'algoritmo di zero-croselng detectlon è attivo solo per i segnali di tipo
double.
Blocchi quali Signol Specifico.tion,Data Type Conversion, Probe, Width consentono di speci-
ficare e monitorare il valore delle carat teristiche dei segnali.
11.10 Esercizi
Esercizio 11.1 Dare un nome opportuno a tutti i blocchi presenti nello schemd
di Figura 1O.:i, ed aggiungere il seguente titolo allo schema: Schema S imul ink di'
un sistema massa molla.
Esercizio 11.2 Costn,ire lo schema Simulink dell'equazione
x + 0.5:i:+ 2x + x2 = u(t)
ed analizzarne la risposta ad un gradino unitario.
S'-;1ggerimento. Considerare i coefficienti. come dei guadagni applicati
ai singoli termini dell'equazione.
my + cy+ ky = u
assegnando per la simulazione i seguenti valori ai parametri: m - 2 kg, e -
2.5 kg/se k = 40 N/m.
Esercizio 11.4 Analizzare ìl comportamento del sistema descritto dall'equazione
± = -x + x:;a, al variare della condizione iniziale; ed in particolare quando la
condizione iniziale vale 0.5, 1, 1.5.
Suggerimento. Il sistema è stabile per lx(O)I < 1.
x + Ix2 - I
1 ±3 +x = sin ( 1r2x)
a partire dalle condizioni :z:(O)= 1, ±(O)= 0,5. I,
Suggerimento. Utilizzare il bloccoAbs.
Esercizio 11. 7 Analizzare l'uscita del seguente sistema descritto dalla funzione
di trasferimento:
1
f (s) = 1 + l.JIS,!l
r
in presenza dell'ingressou = sin(t) + 2sin(300 t).
Suggerimento. Utilizzare il bloccoTransfer Fcn della libreria Con-
tinuous. È interessante confrontare lo spettro del segnale di ingresso ed
uscita {si puè, utilizzare il bloccoPower Spectral Density della libreria
Simulink Extra.s - Additional Sinks). n sistema in esame è un passa-
basso, di conseguenza la componente in alta frequenza è fortemente
attenuate rispetto a quelle in bassafrequenza.
Esercizio 11.8 Sollecitare il sistema massa molla dell'Esercizio 11.3 con un in-
gresso sinusoidale a varie frequenze. Il sistema è passa ba.aso?È possibile stimare
la prima frequenza di taglio?
Suggerimento. Si ricorda che, per un sistema passo basso, la fre·
quenza di taglio è la più piccola frequenzaper la quale l'ampiezza dell.a
risposta in frequenza è attenuata di 3 dB. '
11
214 CAPITOLO 11. GLI SCHEJ\lI SilVIULINK
dy
dt
- {3xy- -YY
dz :d '
-dt - "fY d1
I
.
.,
R L
I ,
216 CAPITOLO 11. GLI SCHE!vIISI!vIULL'lK
.,
0.9
''\ : I
o.e
7\: I
07
7 \ I
I
I
'
I
I\ 71
\ I
03 ' r,,........... I
I
~"'
i
r,...... j
0,2
OI
I
/ I
!
I
o
o 50 100 150 200 250 300 350 400 450 500
Tenllon•1mv1
Esercizio 11.16 Analizzare la rìsposta del sistema di Figura 11.13 assumendo che
R = 2 mO, C = 0.2 F quando la tensione di alimentazione ~ pari a 10+ 2 sin(O.lt)
V ed in presenza di una sorgente luminosa che irradia il fot otransistore con una
potenza incidente di 5 + 4sin (t) mW cm- 2 • Le caratteristiche del Jototrasistore
sono rappresentate nella Figure 11.14,
Suggerimento, Utilizzareil bloccoLook~UpTable (2~D).
.·,.
~
11.10. ESERCIZI 217
IJ
Co//111or,
R ,,..
'
Vce e
114diot,o,ul,_,.ow
WWHIIU
Emt11/1ort
\.
y(t)
ix(t) - -yz(t) - p
y(t) -
.i(t)
= o--yy(t)- 6
z(t)
dove x(t) rappresenta la popolarità dell'uomo politico, y(t) le "ricchezze" occulte
che l'uomo politico possiede, e z(t) l'azione di repressione da parte della magis-
tratura e delle forze dell'ordine. I parametri µ+ e µ- esprimono l'intensità della
opinione pubblicanei confronti del manifestarsi di comportamenti onesti e di f at-
ti di con-uzione, o- rappresenta il supporto immediato alle azioni investigative, 6
la persistenza delle azioni investigative, p tiene in conto il tasso di sconto e la
propensione dei politici ad utilizzare i frutti della corruzione per i propri consumi
privati, f misura lo stile· di vita dei politici {"bella vita II piuttosto che una vita
ritirata e riseroata). La storia italiana dalla fine della Seconda Guerra Mondiale
(precisamente dal 1948) fino alla metà degli anni novanta risulta descrivibile da
questo modello adottando i seguenti parametri:
µ+ = 1, µ- = 10, k = 1, o= 1.5, /3= 0.5
p = O.I t = 0.4, o= 2, -y = 1, o-= 2
ed assumendo che nel 1948 In popolaritàdella classe politica fosse la metà del suo
valore massimo x(O) = 0.5, ridotti capitali occulti y(O) = 10- 5 e limitata azione
investigativa z(O) = 10- 5 • Analizzare la dinamica della diffusione della corruzione.
C11aner1suca
d uscilad<llloklltanskore
12
~
,.,,v
11
IO
10,~./
g
/
/
/
-
V
_/ 1.0
- i--~ ! ·-
3
,,,.V
I
uI
L..- ~--- I
I
I
~~
~
! •11
i
I
'
I
301
I 20 l
I
,
j I
3 9 T 8 11
I
13 15 11 111
I
I
ZI
'11.0
2:1 25
t1111t1on•
CciltllOI•
tmdllort 1v1
Capitolo 12
I
La simulazione in Silllulink
I
y y
..
y d d
dt dt
:{
.'•,',
•.;,,
#··•'\
•
~:i ~
•J
- --~
.. :, .. s
. ;
/)?
..
u
t
,.
\'...~~
S,.1 '
...
-- ~1}j
. ..~~l
-~·· }'
12.2. PRODLEMI DI SINIULAZIONE 221
1 1 ---91 □
1----w:
...
s
><1 Scope_x1
Scope_><2
d ()w
J dt == k••
L ~ (i) - -kw - Ri +V
dt
dove i, V, R, e L sono rispettivamente: la corrente di armatura, la tensione di
armatura, la resistenza e l'induttanza del motore; w e J rispettivamente la velocità
It
222 CAPITOLO 12. LA SIMULAZIONE IN SIMULINK
<
"'r
.,·~-
angolare e il momento d'inerzia all'asse, ed infine k è la. costante di coppia. Il 1
"; #:
~
uno dei blocchi To Workspace abbia una uscita del tipo Structure with Time. Si -~
considerino i seguenti valori per i parametri:
J 6 kg mi
L 1 µH
R 0.3 n {',.
·.J,..~.
:{'i..•.
k 0.5 J..i,
r.~
e una tensione di alim entazione a gradino di ampiezza 1 V. -~- ., l,~.
•• ~i?;
i,
•••Jt.
-t~
velocita
velocita
Scope
corrente
corrente
Tensionedi
Alimentazione
Step nme:1 ;»,'.1• ~(
't ir <~;/\·
., \ .,.l,f:
~,··~:
··
._,. ~-
• f. 'l
.:l l. ,:
Figura 12.5: Schema Simulink di un motore a corrente continua.
Questo è dovuto al fatto che, nonostante il sistema sia lineare, il metodo di .f;~
.+ , c.1•
0
la separazione delle scale temporali è dovuta alla notevole differenza (sei ordini di
grandezza) fra i valori di induttanza e momento di inerzia, e di conseguenza fra i
tempi di evoluzione propri della parte elettrica e di quella meccanica.
E necessario, pertanto, l'icorrere ad un differente metodo per il calcolo della
soluzione. I parametri che determinanole modalità di calcolosono raccolti nella
finestra Simv.lation Parameters nel menu Simulation (richiamabile anche tramite
CTRL+E). La finestra è organizzata in quattro pagine: Solve1\ Workspace I/O,
Diagnostic e Advanced.
Se si installa anche il Real-Time Workshop Toolboxapparirà anche una quìnta pagina per la
gestisce dei parametri nece88ad per la traduzione automatica. dello schema. Simulink in C.
Nella pagina Solver sono presenti i campi per la scelta, dell'istante iniziale (Start • I
Time) e finale (Stop Time) della simulazione. Più sotto vi sono i-campi per la scelta i
I
. '
dei metodi di integrazione e dei relativi parametri. I metodi di integrazione sono )i
I I
distinti in due grandi classi: quelli a passo fisso e quelli a passo variabile. In I I
funzione della scelta del campo Type compariranno due elenchi distinti di metodi ! 1
(12.3)
devono essere scelti in modo opportuno per garantire che la soluzione .Siiì\,~Ù ·. ·
cientemente precisa ed al tempo stesso che l'onere computazionale associa;tp_~·~.
contenuto . :i,{ ~ · 1
...
X (t·+ ~)
I 2 ~X
~ ·+ ~j(t
2 · X·)
I Il t .I
si ha che la soluzione della (12.5) si può calcolare come
Xn+l = Zn + hk'J
k1 - f(tn,Xn)i
Il
226 CAPITOLO 12. L.t\ SI!vIULAZIONE IN SIMrJLJN,'"
. ·1dq1\1tl
• :1 ,r thdl;
Alcune possibili particolarizzazioni nella scel\a dei parametri sono: ...,A!-tO
?,t,
1
• Metodo di Eulero modificato: è un metodo del secondo ordine che ei ottiene imponenli'Jij·◄,
coincidenza del coefficienti delle potenze di h con quelli presenti nello sviluppo della ;(J.2tt~
z 1+1 =Xi+
h
-(k1 + 2k1 + 2k3 + k4) •../ li'f '
,:·•·I·-:.
I
6
~,I
Jir-··. I
(12.7).
dove f' indita lo Jacobiano cli / (generalmente calcolat o per differenziazione numerica). Si not
che quando --,= -Yv = Osi riottengono le formula di Runge-l<utta.
Nei metodi Runge-Kutta la quantità Xi viene sfruttata per il calcolo della
soluzione in Xi+l e poi 11dimenticata 11• I metodi multistep utilizzano , invece, nel ..
. \l"
/.I
1.-
, I
;I
I i
. i
calcolo della. nuova soluzione esplicitamente alcuni dei va.lori Xi,Xi-i, •• •t Xi-r
precedentemente calcolati.
Il grosso problema nell'implementazione di questi metodi risiede nel fatto che la condizione
iniziale è una sola (lazo) e quindi bisogna trovare un metodo per indica.re all'algoritmo le altre
condizioni iniziali. Questo problema è particolarmente cruciale in presenza. di implementazioni
a passo variabile dato che ei ripresenta ogni qua.I volta ai cambio l'ampiezza del passo. Una
soluzione adottabile consiste nel partire con un metodo ad uno step ed un °piccolo" valore di h
per poi passa.re ad un metodo a due step con un h più grande e così via.
Nell'ambito dei metodi multistep si distinguono due famiglie: i metodi Adams
e le formule alle differenze all'indietro (BDF Backwurd Differentiation Formu-
las). Con i metodi Adama la soluzione è calcolata utilizzando particolari polinomi
interpolanti la f(t,x) e la soluzione è espressa. come
m
p;
p
X,+t -
_ e + h ( 31ic ~ 1i-1
c } predictor
Xj
2
,:orrector
Si noti che questa. tecnica fornisce a.d ogni passo due valori con precisione diversa utili per stimare
l'errore locale di integrazione.
' , II
I
:;. '\-'.
I metodi BDF (noti anche come formule di Gear) sono formulazioni di .ti~~
implicito particolarmente adatte per la soluzione di problemi stiff. La soluzìon6!1t. 1
calcolata nella forma ·,.. ,r-
·~· ·
m 1
~ .
L kv'k:Z:Hl - h/(tH1iZ1+1)= 0 (12.9
•. ,t'f
k=l
. ·cf·
dove si è introdotto l'operatore di differenza all'indietro 'vxj = x, - x;- 1. ,;J.)Ò(--:
Alcuni problemi legati alla soluzione delle BDF sono risolti ricorrendo all'approccio ~DP i~
Implementa una coppia di metodi Runge-Kutta di ordine 4,5 nella formulazione proposta
da Dormand-Prince. È un metodo esplicito one-step cioè utilizza. per il calcolo della
soluzione in ti solo informazioni sulla soluzione in t,-1.
.' '·•
• ode23 È un metodo più efficiente del precedente quando è richiesta un
precisione non molto spinta. È in grado di lavorare anche con sistemi j
moderatamente stiff. .i
Implementa una coppia di metodo Runge-Kutta di ordine 2,3 nella formulazione proposta ~,~!,.a
I,,
da Bogacki e Sha.mpine. È, come il precedente, un metodo esplicito one-step.
'• '.,1
.-t·
• o del 13 È da impiegarsi quando è richiesta una soluzione molto accurata e .
.,:t_..
(f
~
.,J,.
se l'onere computazionale legato alla valutazione della funzione integranda è • ·i"
notevole. È poco efficiente in presenza di sistemi ibridi.
.,,
.,
12.4. SOLUZIONE DELLE EQUAZIONI DIFFERENZIALI IN SI!vlULJNI(229
t
• ode23s È un metodo per sistemi stiff più efficiente del precedente quando è
richiesta una soluzione non molto accurata.
È basato sul metodo di Rosembrock dì ordine 2. Essendo on metodo one-atep risulta più
efficiente computazionalmente ed è in grado di risolvere anche problemi stiff per i quali
ode15s non è appropriata..
• discrete È il metodo che Simulink usa per default allorquando nello schema
non è presente nessun elemento dinamico tempo-continuo. Il metodo sceglie
automaticamente il più ampio passo di integrazione possibile (si veda il
Capitolo 15.1 per maggiori informazioni).
I:
ti
I
230 CAPITOLO 12. LA SI!vIULAZIONE IN SIM[4llfJ{.•
Una volta individuato il metodo più appropriato per il problema. in esame bisogna. t
definire in maniera. opportuno. i parametri il cui numero e significato dipende anche ·
ùal metodo scelto. ~
In presenza di algoritmi a passo-variabilei parametri da definire sono: . i. :~1.
: )' i•
.t l ~
• Max step size: definisce la massima ampiezza del passo di integrazione. Il .., ·.
metodo di integrazione, in presenza di una funzione integranda sufficiente- .,,.
mente regolare, aumenta progressivamente !,ampiezza del passo fino a ques~ç>
valore. Un valore eccessivamente grande per il passo di integrazione potrebb~
mascherare alcuni aspetti interessanti della soluzione. Il valore di defaµ lt
auto è pari a.d un cinquantesimo dell'intervallo di integrazione. In presenza.
di un sistema. periodico è consigliabile porre Max step size ad un valore par.i
ad u11afrazione del periodo.
• lnitial step size rappresenta il valore iniziale dell'ampiezza del passo di inte-
grazione. Con il valore di default auto, Simulink calcola tale parametro in
funzione della. derivata dello stato nell'istante iniziale.
i
- Rel Tol definisce sostanzialmente il numero di cifre esatte nella soluzione.
Il valore di default ie-3 corrisponde ad una precisione dello 0.1 %i
I.
. - AbsTol definisce la precisione della soluzione quando la variabile tende
a zero, rappresenta una "soglia" al di sotto della. quale i va.lori assunti
I.
dalla. soluzione possono considerarsi irrilevanti. Il valore di default è II
ie-6.
I I
I
.. .:r, .
~ .~
,! ~ . .
·l-~-.
232 CAPITOLO 12. LA SllvIULAZIONE IN SIMfJLit{~ ,
.,. !1
.,~,:4
xout ==
time: [)
aignala: (txn atruct]
valuea
dimenaione
label
blockNaroe
dove n rappresenta il numero di blocchi dinamicì presenti nello schema, il campo label Msume il
valore CSTATEo OSTATEin funzione che si tratti di un elemento tempo-continuo o tempo-discreto.
La. pagina. Dfo9nostic, permette di definire, per ciascuno degli eventi che Simulink rivela
durante l'analisi dello schema, la tipologia dì messagg i da visualizzare (in presenza. di un errore
la simulazione non prosegue).
Nella stessa pagina. è possibìle attiva.re due opzioni che prevengono anomali comportamenti
in presenza. di S-function definite dall'utente in maniera non corretta : Consìstency checking e
Bounds checking. L 'attivazione di queste opzioni aumenta notevolmente l'onere computazionale .
Nor malmente gran parte dei parametri dei blocchi di un o schema Simu link possono essere
modificati "al-volo" durante una simulazione. Tale possibilità è inibita , a vantaggio della. velocità
di simulazione, attivando l'opzione lnline parameters della pagina Advanced. Tale opzione fa si
che i parametri vengano trattati come delle costanti. È, comunque, possibile specifica.re alcuni
parametri , definiti tramite variabili MATLAB, per i quali è consentita la modifica durante la.
simulazione tramite ìl bottone Configure.... Si noti che, una volta modificata la. variabile, è
necessario attivare l'opzione Update Diagram per renderla efficace.
Nella stessa. pagina è possibile specifica.re alcune scelte che consentono di ottimizzare la
simulazione :
II I
II I
I.i' rf._•
. ,;~
-l~A
'~
'-~
Condizione inizialedo il reset ~
~
i
-~
..~~~:.~
-·
·,k•
~.,
1
s
Velocità 1
s ------□
Scope
\*
·-~1-
~i:'i·
·J,'..,
'1l:
t-rC
f /)lt.
.•01t1
~,,1t
~
.... ' t·
Hlt
Croeelng I
..
;\ lii.•
L'*
t'.}h~~
,.fii,<•·
~
...
·-~
~ --:-
- -~-
._ '1~.
Figura 12.6: Biglia rimbalzante. X~-
•·;,;}l.
. :,
Per evitare l'insorgere di loop-algebrici si è utilizzata la porta state del blocco · Integrator. ,t.
Tale soluzione cleve essere utilizzata ogni qua l volta la condizione di reset o la condizione in iziale
di un integratore dipendono direttamente (cioè in assenza di elementi dinamici nel per corso del
segnale ) dal valore dell'integra.le stesso .
La presenza del blocco Hit Crossingserve ad indicare all'algoritmo di inte~
grnzione di infittire il pa.Bsodi campionament.o nell'intorno del pMsaggio per lo
zero della posizione.
Lo et.ess
o risultato, in u~ modo più elegante, ai poteva ottener e introducendo nel secondo inte-
gratore un limite inferiore par i a O, infatti il blocco lntegration aUiva int rinsecamente l'algoritmo ,
di .sero croseing detection quando la variabile di integraisione raggiunge I limiti Imposti. t 1 .I
X 1
s
Produot Scope
Integrator
sin x
sin
Trigonometrie r•'
.'
Functlon '
1 1
s s
Integrator lntegrator1 Scope
X t
~~
X 1-0.5 ffi
- Vi/ ..,.__
Transport
Delay
Time Oelay = 0.5
I modelli matematici dì alcuni processi fisici sono validi fin tanto che alcune
variabili (o una loro opportuna combinazione) appartengono a determinati inter-
valli. Se una variabile supera uno di tali limiti 1 le equazioni matematiche (che
continuano ad essere formalmente corrette) non hanno più alcun significato fisico.
Ad esempio, si pensi ai modelli che descrivono la balistica di un proiettile che
risultano valide finchè lo stesso non colpisce il bersaglio, o ai modelli biologici ove
non ha alcun senso considerare un numero di individui minori di zero.
In questi casi la simulazione deve essere interrotta non appena la soluzione
raggiunge i valori estremi, questo può essere fatto utilizzando il blocco STOP
Simulation della libreria Sinks. Il blocco STOP Simulation interrompe la simu-
lazione non appena il suo ingresso è diverso da zero, quindi se lo STOP Simulation
è comando da una condizione logica, la simulazione è interrotta non appena la
condizione è verificata. ..:k~~t ~.'
-1
:,;i',éL~ 1- ~
!fj!, ..
Se l'ingresso del blocco STOP Simulation è multi-variabile, la simulazione è interrotta non
appena. una delle componenti a.ssume un valore diverso da zero. .,
non hnnno memoria della storia passata, cioè sono blocchi algebrici e quindi non dinamici.
Ad esempio, si consideri il seguente sistema di equazioni ordinarie non lineari
z2 + z1 - 1= O
{ z2 - z1 - 1=O
Lo schema Simulink di Figura 12.9 è in grado di calcolarne la soluzione.Si noti
come l'ingresso del primo Algebraic Constraint coincide con la prima equazione del :1
sistema, mentre quello dell'altro blocco è pari alla seconda equazione. La presenza
di un loop algebrico è riconosciuta da Simulink e segnalata tramite un warning.
z2
1--.:::z2:.:.+Z::..:1..;..-.:..I
--1~ l(z) Solve
f(Z) :o 0
Algebraic Constraint Display
Per la soluzione Simulink utilizza un algoritmo basato sul metodo di Newton calcolando la
matrice dello Jacobiano delle derivate parziali tramite tecniche di differenziazione numerica.. È
possibile indicare all'algoritmo un valore di iniziale ( lnitial Guess) da cui partire nella ricerca.
della soluzione. Si sottolinea che questo valore, a.differenza. delle condizioni inizia.li di un elemento
dinamico, non ha alcun significato fisico diretto ma. rappresenta esclusivamente un "e.iuto•i, alle
volte necessario, per Palgoritmo di soluzione.
Questo modo di utilizzo del blocco Algebraic Gon8traintè, però, a)quanto im•
proprio dato che lo stesso risultato si sarebbe potuto ottenere più facilmente ed
efficacemente direttamente tramite i comandi MATLAB (si veda il Paragrafo yy
a pag. yy). Infatti, questo blocco è stato ideato per la simulazione di modelli
descritti da equazioni algebrico/differenziali. Si consideri, ad esempio, il seguente
sistema che descrive la cinetica di una reazione chimica
-0.04y1 + l0 4y2y3
'il2 0.04y1 - 104y2y3 - 3 · 107 Yi
o - Yi + Y2 + Y3 - 1
238 CAPITOLO 12. LA SIMULAZIONE IN SIMULINI(
i----......__--+---.i D
Scope y1
Scope y2
3
1+ 2+ 3-1
l(z)
Solve
f(z) = O z ~y3~-~
D
Scope y3
Constant
4
Lo Jacobia.no del sistema. ridotto (ottenuto eliminando la pact.e a.lgebric&) deve essere non
singolare.
12.9. ESERCIZI 239
12.9 Esercizi
Esercizio 12,1 Si analizzi l'uscita di un bloccointegratore e di un bloccoderiva-
tore sollecitati dal segnaleein(t) in presenza ed assenza di ttn rumore additivo del
tipo 0.001sin(lO00 t) sull'ingresso.
Suggerimento. Si noti come il derivatore amplifica il rumore .
x = f(t) - ay
?i=g(t) - {Jx
I
Ij:
I
240 CAPITOLO 12. LA SIMULAZIONE IN SIMULINK
x = f(t) - cxy
Y = g(t) - '"'fXY
Rispetto al casoprecedentesi ~ introdotta una nonlinearità che modellale incog-
nite sulla dislocazionedei guerriglief'inel campo di battaglia. La letalità dei colpi
in/ erti dall'esercito regolare dipenderà anche dal numero di guerriglieri presenti
nell'area dello scontm.
Analizzare gli esiti dello scontro utilizzando le stesse condizioni usate nell'eser-
cizio precedente con 1 = ,8/10.000.
Esercizio 12.5 Costrufre uno schema Simulink la cui uscita sia una sinusoide la
cui frequenza di pulsazione oscilla lentamente nel tempo. Una possibile schema-
tizzazione è la seguente y = sin ( lOt + 2 cos(2t)) .
Suggerimento. Utilizzare i blocchiClock e Fcn e scegliere opportu-
namente il Refine Factor.
Esercizio 12.6 Il controllo in tempo minimo di assetto di un satellite lungo un
solo asse può essere, in prima approssimazione,effettuato tramite la tecnica "bang-
bang" (massima potenza degli attuatori alternativamente nelle due direzioni). In
tal caso la dinamica controllata può essere schematizzata come
.. { U se O(t) ~ O
B(t) = u(t) dove u(t) = -U se O(t) < 0
.Jf.
:'J'
u=5 + """·~-'
;; t1};.;
·)~{•· •
...l•tf~
•• ..ì"-'•j:
~,.
~:;~.,.
I
I
~
Il
j
j
5
-2
• I
I
.
~ I
:I I:I
:i
Capitolo 13
Sisten1i multi-variabili .
'r
I
I
Tutti i blocchi fìno ad ora considerati lavoravano esclusivamente con segnali scalari.
In questo capitolo verrà mostrato come costruire schemi multi-variabili, caratter-
izzati dal fatto che i blocchi possono avere più di un ingresso ed uno. uscita . In
\ !
Simulink è possibile costruire schemi multi-variabili sia utilizzando blocchi carat-
terizzati da più punti di entrata ed uscita., sia blocchi in cui l'unico punto di
ingresso (uscita) fìsico corrisponde ad n-ingressi (uscite ) logici. L'uso di segnali
multi-variabili consent e di migliorare la leggibilità e la chiarezza degli schemi.
o o 1.1320 o -1.0000
o - 0.0538 -0.1712 o 0.0705
o o o o
A ==
o 0.0485
o -0.2909
o
o
1.0000
-0.855 6
1.0532
-1.0130
0.6859
l ~
l
l1
246 CAPITOLO 13. SISTEMI MULTI -VARIABILI
o o o
-0.1200 1.0000 o
B= o o o
4.4190 o -1.6650
1.5750 o -0.0732
o o o
c-(1
- o 1 o o ~)
o o ~)
o o
D=(
In casi come questo 1 ove è già nota la descrizione del sistema in termini delle
matrici caratteristiche conviene utilizzare anche in Simulink tale forma utilizzando
il blocco State Space della libreria Continuous.
Nei campi parametri del blocco è possibile sia far riferimento a matrici definitè,
in MATLAB che inserire direttamente i valori numerici nei vari campi; in questo;
ca.so le quantità vanno racchiuse fra parentesi quadre ed utilizzato il separatore ";"°
per indico.re il termine di una riga. ..
Nella Figura 13.1 è rappresentato lo schema. Simulink della dinamica del-;
l'aereo avendo considerato degli ingressi di tipo sinusoidale ed un blocco Scope
qunle elemento di uscita. Se avessimo voluto adottare una schematizzazione all~
r---+CJ
Scope-Ingresso
~
...
~
x' = Ax+Bu ... CJ
...
y = Cx+Du
State- Space Scope- Uscita
Dinamicalongitudinaledi un aereo
.·,
(1 1.5 0.5]
Il blocco Sìne Wave genererà tre sinusoidi con la medesima pulsazione e fase,
ma di ampiezza rispettivamente pari a 1, 1.5 e 0.5, rome si può vedere tramite
lo Scope-Ingresso,mentre lo Scope-Uscita mostrerà. l'i:ivoluzionedelle variabili di
uscita che, coerentemente con la forma della matrice C, sono la quota e la velocità
in avanti.
Ognuna delle linee dello schema rappresenta un segnale multi-variabile che
raggruppa, o più correttamente rnultipla 1 più grandezze.
Si noti che automaticamente i blocchi Scope si sono adattati alla cardinalità
del segnale di ingresso. Questa caratteristica è comune a molti blocchi Simulink.
Per comprendere meglio il modo in cui i blocchi Simulink operano con segnali
multi*varia.biliai consideri lo schema di Figura 13.2! dove sono sta.te attivate le
opzioni del menu Format: Signal Dimensions che fa apparire il valore della co.rcli-
nalità dei segnali nelle diverse linee, e la Wide nonscalar line che rende più spesse
le linee multi-variabili.
Il blocco Sine Wave genera tre sinusoidi di eguale ampiezza e diversa frequenza.
Nel campo parametri del blocco Gain nel ramo superiore dello schema è presente I
• j
un valore scalare, tutti i segnali di ingresso vengono amplificati dello stesso fat· I j
I t
tore. Diversamente nel ramo inferiore, dove il campo parametri è una grandezza I:
vettoriale, ogni componente del segnale di ingresso al Gain è amplificato di un I!
differente fattore. I
Il blocco Gain nel ramo superiore ha effettuato una ·'espansione scalare" (scalar l
expansion) cioè in presenza di un ingresso vettoriale gli eventuali parametri scalari 1
vengono utilizzati per tutti i segnali di ingresso. Simulink sostituisce i valori scalari
con un vettore di elementi di cardinalità pari alle dimensioni del11ingresso. Ovvi-
amente è sempre possibile usare dei parametri vettoriali per specificare valori dif-
ferenti del parametro per le diverse componenti del segnale di ingresso; in questo
caso la cardinalità del segnale d'ingresso e dei vettori-parametri devono coincidere.
Si noti che non tutti i blocchi di Simulink sono in grado di gestire ingressi
multi-variabili né di effettuare l'espansione scalare. Alcuni, quali lo Fcn, sono
in grado di generare esclusivamente uscite scalari (anche se supportano ingressi
di tipo vettoriali), altri, come il blocco Transfer Fcn, accettano esclusivamente
ingressi scalari (pur essendo in grado di generare usdte vettoriali). Condizioni I
, l
I
vettoriali non sono lecite in tutti i campi parametri dei blocchi (ad esempio il
campo Sample Time deve essere uno scalare). Anche se a prima. vista potrebbe
1 È logicamente analoga a quanto avviene nell'ambito della trasmissione dei segnali: più segnali
vengono trasmessi "contemporaneamente" sul medesimo supporto fisico grazie od un'opportuna ~
multiplazione nel tempo o in frequenza. I
j
248 CAPITOLO 13. SISTElvII NIULTI-VARIABILI
O•lft
sembrare che le eccezioni siano più delle regole, in breve tempo sarà chiaro come
operare proficuamente con gli schemi multi-variabili.
li blocco Willth della libreria Si9nals & Systems ha come uscita la. cardinalità del suo ingresso.
Il valore della cardinalità è rappresentato anche nell 'ìcona del blocco.
,.
13.3. MANIPOLAZIONE DEI SEGNALI MULTI-VARIABILI 249
Ax = b
Per la costruzione dello schema si sono sfruttate la capacità del blocco Product.
In particolare nel campo parametri si è immessa la stringa\ • che sta ad indicare
che il blocco avrà due ingressi, il primo dei quali è un divisore del risultato mentre
il secondo un moltiplicatore. Inoltre il blocco automaticamente si accorge che il
segnale EUisociatocon il primo ingresso è un segnale 2-D e, di conseguenza, al posto
dell1usuale operazione di divisione, Simulink provvede ad effettuare l'inversione del
segnale.
§J A (2x2)
lnv
l~~l I X=inv,Ar b
-SI
12x1I • 11
- :I s1
§ b
Product
Il blocco Mux è in grado di raggruppare fra loro anche segnali a loro volta multi-variabili.. ,
Se si desidera multlplare sullo stesso canale due segnali, di cui il primo scalare ed il secondo
multi-variabile con cordinalità 3, è sufficiente in8P.rire nel campo Number o/ inputB Il vettore (1
a] che specifica che il M~ sarà dotato di due porte, alla prima andrà connesBo un segnale scalare
ed alla seconda un segnale vettoriale con cardinalità 3. Nel ca.so in cui si voglia specificare la
dimensione anche iu presenza di segnali 2-D, si deve utilizzare la notazione tramite array di c;elle.
Ad esempio introducendo la stringa {1, [2 3), 4 } il Mux si aspetterà di ricevere in ingrèl!~~
tre segnali; il primo scalare, il secondo 2-D di dimensioni 2 x 3 ed il terio 1-D di cardinalità 4:
Si noti che quest'ultimo deultato è ottenibile inserendo nel campo parametri la quantità scalare)
3 (o analogamente il vettore [-1 -1 -1]}, in questo caso Simulink non effettua nessuna verifi~~
preventiva sulle dimensioni dei segnali di ingresso raggruppando tutti gli ingreael in un unièò_.
segnale multi-variabile. · ,,
È possibile scegliere la. forma dell'icona del blocco Mw=tramite l'opzione Diaplay option. Lb '
possibili scelte sono: .,, ,
• Bar una linea verticale piena {è il valore <li default).
• None la scritta MUX appare all'interno del blocco.
• Signalsviene indicata In corrispondenza. di ogni ingresso la label del corrispondente segnale
{ di lngreseo, In presenza cli eegne.11privi di la.bel cornparlrà la generica stringa lignal.
I
I È anche possibili! Inserire direttamente la. lista dei nomi del segnali In Ingresso al MU$.'.ln
questo c8801 se le linee connesse con il Mu:t non sono dotate di label, Simulink automaticamente
pone quali label quelle specificate nel Mux. Si noti, però, che qualora i segnali abbiano una loro
label, Simulink non effettua alcuna verifica di congruenza ev idenziando in corrispondenza della
porta del Mu,: il nome specificato nel campo parametri e non quello vero <lei segnale.
Il blocco Demu:c ha una gestione un pochino più sofisticata io funzione sia della tipologia
di parametro inserito nel campo Number o/ outputs sia della dimensione del vettore di ingresso
nonché dall'aver selezionato o meno l'opzione Bus selection mode. Infatti, nel caso tale opzione
non sia aUiva il DeMux non è in grado di lavorare con segnali 2-D; cosa che è possibile fare
quando l'opzione è attiva, ma in questo caso è obbligatotio che l'ingresso del DeMuz sia u11Bu,
Signa/. . ?
( .
In funzione del valore inserito nel campo Number o/ inputs si avranno i seguenti comporta..:: ·
menti: ·.. '
• Parametro scalare
- Se la cardinalità del segnale di ingresso coincide con il valore del parametro, ogni
uscita del DeMux sarà. scalare e coinciderà, con l'omologa componente dell 'ingress~ .
- Se la cardinalità del segnale di ingresso è un multiplo intero del valore del parametro,
.I
13.3. MANIPOLA.ZIONE DEI SEGNA.LI MULTI-VARIA.BILI 251
Si consiglia di definire sempre esplicitamente la cardinalità. dei segnali in lngrèsso ai blocchi Mu-r.
e di quelle di uscita dei blocchi DeMuz limitando l'utiliizo delle altre opzioni.
Un 'alternativa. al DeMuxè offerta dal blocco Bus Selection che consente di
specifica.reda.li'Interno della. finestra dei pa.rametri quo.lifra le componentidel seg-
na.le di ingresso devono costituire l'uscita. L'ingresso di questo blocco deve essere
un Bu3 Signal; il numero delle uscite sarà pari al numero dei segnali selezionati
a meno che non sia atti va l'opzione Muxed output nel qual caso il blocco avrà
un 'unica porta di uscita.
Una soluzione differente è offerto dal blocco Selector che consente di specificare
quale fra le componenti del segnale di ingresso costituiscono l'uscita ordinando le
stesse in modo opportuno. Il blocco può avere anche un'ulteriore porta opzionale
tramite la quale specificare dinamicamente quali componenti selezionare.
Il blocco Mux si rileva utile anche in quei casi in cui si vogliano raggruppare
più segnali differenti al fine di realizzare un 'unica funzione. Ad esempio , se si ha la
necessità di memorizzare alcune variabili su file una 5oluzione è quella di ricorrere
a tanti blocchi To File quante sono le variabili di interesse. Questa soluzione è
poco efficiente sia perchè costringe ad operare con più file (che devono essere aperti
contemporaneamente) sia perchè crea una notevole ridondanza nei dati, infatti la
prima riga di ogni file conterrà il medesimo vettore base dei tempi. Una soluzione
decisamente più elegante consiste nel connettere le diverse variabili ad un Mux e
quindi connettere l'uscita di questo al blocco To File.
In molte applicazioni il blocco Mux è utilizzato in serie al blocco Fcn. Que-
sto è, infatti, l'unico modo per gestire più variabili all'interno del blocco Fcn. Si
consideri, ad esempio il problemo di convertire la posizione di un oggetto rapp-
resentata in un riferimento cartesiano in quella polare. Una possibile soluzione è
rappresentata dal blocco Cartesian to Polar della libreria Simulink Extms il cui
schema è mostrato nella Figura 13.4.
Nello schema si è attiva sia l'opzione Wide non3cal<ir lines(che rende più doppie
le linee multi•variabili) che l'opzione Signal dimensions che mostra le dimensioni di
ogni segnale in corrispondenza delle porte di ingresso ed uscita dei blocchi. Come
visto nel Paragrafo 11.7 a pa.g. 2051 le componenti drl segnale di ingresso aJl'Fcn
sono indicate come u[1], . ..• u(n].
.l
252 CAPITOLO 13. SISTKMI !vIULTI-VARL4BILI
hypot(u(1),u[2))
Fcn
X->r
atan2(u(2J,u(1
I)
y 2
Fcn theta
X->lheta
13.4 Esercizi
Esercizio 13.1 Una alimentazione elettrica trifase consiste di tre onde sinusoidali
della medesima ampiezza e frequenza sfasate fra loro di 120 gradi in modo che la
loro somma istantanea sia nulla. Realizzarelo schema Simulink di un generatore
ideale di tensione trifase a SO Hz e 220 V utilìzzan4o un unico blocco. Verificare,
inoltre, che la somma delle tensioni è istante per istante nulla.
Suggerimento. Basta inserire l'opportuno vettore dei parametri nel
campo Phase di un bloccoSine Wave. Per il calcolo della somma è
sufficiente usare un Sum con un unico + nel campoparametri: ·il blocco
avrà una sola porta di ingresso, nell'icona del bloccoappariràil simbolo
di sommatoria (L) , e l'uscita è pari alla somma istantanea dei valori
delle varie componenti del segnale dì ingresso.
dove la x rapp1'esentalo spostamento dei solai dei singoli piani rispetto alla loro
posizione di equilibrio, Nl è la matrice delle masse e K è la matrice di rigideziq
della stmttura. In particolaresi considerino i seguenti valori
: I
1 -1 O] [ 1 O O]
K = 107 -1
[ O -1
2 -1 ' M = 104 o 1 o I
2 O O 2
l
..
13.4. ESERCIZI 253
x - Ax + Bu.
y Cx
dove il vettore di stato x rappresenta le seguenti quantità
angolo di rollio (roll)
angolo di sbandata (yaw)
angolo di sideslip
x=
angolo di bank
deflessione del timone (rudder)
deflessione degli alettoni (aileron)
u =[
Ore ]
Oac =
[ comando di deflessione del timone
comando di deflessione degli alettoni
l
e le uscite misurate so-nol'angolo di rollio e di sbandata.
Si assuma i seguenti valori per le matrici:
1 O O o
C= ( o 1 O o
e si analu.u .f'andamento dell'aereo quando la deflessione del timone abbia una perturbazione
a gradino di ampiezza unitaria in pre3enza di un sistema rii controllo a ciclo chiuso pari a
u = -I<x dove
[( = ( -0.13 -0.88 1.58 0.03 0.68 -0.03 )
0.52 0.42 -2.83 0.02 -0 .01 0.86
Sottosistellli
14 .1 Creazione di un sottosistema
Realizzare uno schema modulare permette di rendere più leggibile uno schema e ne
facilita le modifiche. Ad esempio in Figura 14.1 si è riorganizzato lo schema della
Figura 12.10 (pag. 238) introducendo tre sottosistemi ognuno deputato alla rapp-
resentazione di un1unica equazione. Questo schema, nonostante che dal punto di
vista. funzionale sia perfettamente equivalente al precedente, è molto più semplice
da leggere.
Con Simulink si può procedere sia. decomponendo uno schema complesso nei
suoi costituenti elementari (utilizzando i blocchi della libreria Subsystemscome dei : J
template all1interno dei qua.li andranno poi descritte con sempre maggior dettaglio I, •
le caratteristiche delle differenti parti del modello), sia raggruppare una serie di i I
I .
!
ir ..
f I
Il
t j
I I
256 CAPITOLO 14. SOTTOSISTElvIJ
v1 .._
,.. ln1
v2 ..._
,.. ln2 Out1 y1
.. D
..._
v3 .._
,.. 1n3 Scopey1
PrimaEquazione
Dltferenziale
v1 .._
... ln1
v2 ....
... ln2 Out1 ,.. D
""- ·
y2
v3 .._
... ln3 Scopey2
SecondaEquazione
Differenziale
\' 1 ..._
... lnl
... D
....
v2 ...
.. ln2 Outl y3
v3
.. ln3
...
Scopey3
EquazioneAlgebrica
[:1nave_group l!I(!]EJ
I fili!
(f~t'1 Y\~W'!,Sim\jl6lion .f J , .. . . '
~li,Q!fl)llt . .!/,~t
·~-r.iai1:-~~:ittre· ·il:..
·\tf 1
~...-.."-! j ~..., ., •·, ~ ~ ~~ I "" (i- • 1, .
. . ,!itt
•;-,.}111,t,.,t;-.,
~~,rr.,
t
lI
'1-. •· '1 ,
To Wodclp10•
l
Figura 14.2: Sottosistema "nave' .
confusione conviene cambiare immediatamente tale nome con uno più mnemonico,
i
tipo nave. In schemi in cui sussistono più blocchi creati dall'utente sarà il tito•
lo l'unico elemento distintivo (si sconsiglia, pertanto, J>usodell'opzione Hidden).
L'oggetto così creato è un nuovo blocco Simulink e potrà essere utilizzato come
tassello con cui simulare, ad esempio, un sistema di controllo per lo smorzamento
delle oscillazioni della nave. Tornando allo schema, si può nota.re che le connessioni
con gli oggetti esterni al sottosistema sono state conservate. \.
Per meglio comprendere come ha operato Simulink è opportuno ''esplodere 11
il blocco creato effettuando un doppio clic sul blocco nave (lo stesso risultato si
ottiene con il comando Open block del pop-up menu). Comparirà una schermata
come quella riportate nella parte inferiore della Figura 14.2. Si può riconoscere
lo schema iniziale della nave, inoltre son.o presenti alcuni blocchi "nuovi": Inl
(Inport) e Outl ( Outport). Essi indicano gli ingressi e le uscite del sottosistema.
In presenza di sottosistemi con più ingressi e/o più useite queste potranno essere
distinte grazie al numero che contraddistingue ogni "porta" oppure associando ad
ognuna di esse un nome significativo (che comparirà anche all'interno dell'icona del
sottosistema). Non esistono limitazioni al numero delle porte di ingresso ed uscita
di un sottosistema. Un numero eccessivo di porte, però, riduce la leggibilità dello
schema. In tali circostanze può essere preferibile multiplare pii1 ingressi (uscite)
su un'unica porta.
Come accennato, i sottosistemi sono dei veri e propri blocchi dotati come gli
altri della finestre delle proprietà e dì quelle dei parametri. Quest'ultima, però, non
compare facendo doppio clic sul blocco, ma si deve utilizzare il relativo comando
258 CAPITOLO 14. SOTTOSISTEMI
.. !
del pop-up menu.
!:
Fra i para.metri di un sottosistema è importante soffermarsi sul significato
.,
del!'opzione Treat as atomic unit. ,:,,.,
Abbia.mo introdotto la decomposizione di uno schema. in sottosistemi solo per ~:
migliora.me la leggibilità. Questo significa che la presenza dei sottosis temi influen- •.
za esclusivamente l'aspetto grafico. Infatti durante una simulazione l'ordine di .· ..:\
valutazione dei vari blocchi è deciso da Simulink (sulla base delle regole di es- •t.!:i
·,1\ 1:~
,..~.
,,..,,.
ì ecuzione e della priorità attribuita dall'utente ai singoli blocchi) senza tenere in
alcun conto della decomposizione effettuata. In altri termini durante la simulazione
per Simulink lo schema è "piatto" . ··
:, ,..
'/,'!~
/- \.
•,:J.;.11
~r;~
.
,1.t~
-i«,~
In alcune circostanze, invece, è importante che venga conservata, anche durante .~ •i~
il calcolo della soluzione, la gerarchizzazione introdotta con i sottosistemi: quando
Simulink inizia la valutazione di un elemen to di un sottosistema deve continuare
a valuta.re tutti i blocchi presenti in questo prima di passare alla valutazione di
altri elementi. Questo vuol dire che la valutazione del sottosistema deve essere
atomica,indivisibile cioè: deve avvenire per tutti gli elementi del sottosistema o
per nessuno di essi.
Come è facilmente intuibile, nel caso in cui l'opzione Treat as atomic unit
è attiva il sottosistema sarà considerato durante la simulazione come un unità
indivisibile. Simulink per sottolineare questo aspetto delimita. i blocchi atomici
con una linea più spessa.
)r-.:>":{:
•1 "t" r,.
·:'-' l.'...
:I ~ "
,ti,ft.P.-
14.2 Collegamenti senza fili •• ,.:.'
·,J
.....~~·..
~~.
, ~--!
: l
I
•• I :r:~.I
•• I
In presenza di schemi complessi tracciando tutte le linee necessarie al collegamento : i
dei vari blocchi si potrebbero venire a creare veri e propri grovigli di fili tali .da I
!
rendere praticamente incomprensibile lo schema. La situazione peggiora ulterior- I
'I
I Per ovviare a questa difficoltà Simulink mette a disposizione i blocchi From
e Goto che consentono di effettuare collegamenti senza la necessità di tracciar~ -· i
· --,:tit1k-t
I
fisicamente le linee che collegano i due blocchi (si veda la. Figura 14.3).
u"l;'
~-- .':.i.
;H ,
i
i
I
I
''7•'tY.I'·
....
.·~...:, l
,. .., •
,..-~
. I
i
►:IlI
l.SI
--+G 8
i
I
Si faccia attenzione che quando il From non riesce ad individuare il Goto corriepondenie
viene segnalato un warning e l'uscita del F'rornè un segnale di vo.loreO.
Non è facile dare delle indicazioni sulle modalità di utilizzo dei collegamenti
senza fili. Infatti mentre da un lato il loro utilizzo consente di evitare i grovigli
di fili e quindi migliorare la leggibilità di uno schema; dall'altro il Goto ha. gli
stessi aspetti negativi del famigerato comando goto presente in molti linguaggi di
programmazione non strutturata: rende difficile la tracciabilità dei legami causa-
effetto ed aumenta la possibilità di utilizzo improprio di un determinato segnale
(collegamento di un segnale sbagliato ad un blocco).
Per ovviare a questi inconvenienti è consigliabile limitare al massimo l'utilizzo
dell'opzione global e, soprattutto, dare una label a tutti i segnali di ingresso ai
Goto e verificando sempre con l'opzione < (come fatto nell'esempio) che i segnali
in uscita dal From siano proprio quelli desiderati.
14.3 Mask
Nel paragrafo precedente abbiamo visto come realizzare sottosistemi in Simulink .
Purtroppo i blocchi così realizzati hanno un aspetto grafico standard e possono es- ·
sere riconosciuti solo grazie al loro nome, inoltre non è prevista alcuna spiegazione i
• I
sul loro funzionamento (cioè non esiste un help). Infine risulta difficile assegnare i
valori ai variparametri.
Per superare queste difficoltà è possibile maschemre il sottosistema tramite
1'operazione di mask.
Il modo di procedere è il seguente: selezionare il 3ottosistemain oggetto, quindi
eseguire l'operazione Mask s11.bsystem del pop-up menu che compare con un clic
' '
i
!
260 CA.PITOLO 14. SOTTOSISTEMI
i.f~
••R~,.
ì~Jfr.
...:,;it;?
,.u..,
con il bottone destro (o equivalentemente usare la medesima voce del menu Edito 'J:,
;_
con la combinazione CTRL+M); comparirà la finestra del Mask Editor, raffigurata '; ,,,
in Figura 14.4. ;_';,;w,~..·
. .:.ti:t~;.-~
·!1$1:i'"?:
:lii~
:;;i,~
•) Masi<Ed1to1. sch _milsk2/5moolh !lqud1e W<Jvtt f'ilOOD
•'
Una volta creato un mask con un doppio clic si accede ad una finestra dei
parametri del tutto analoga a quella di un blocco Sirnulink. Nel caso in cui si voglia
esaminare (o modificare) lo schema sottostante è necessario ricorrere all'opzione
Look under mask.
14.3. lvl.4.SK 261
max(X), max(Y) I. I
• Disegni tramite il comando plot con la stessa sintassi dell 1analogo comando
MATLAB (non sono però ammessi i modificatori che specificano il tipo e·
colore delle linee).
• Immagini tramite i comandi: image per mostrare un'immagine e patch per
creare un poligono colorato (il colore utilizzato per il riempimento è quello
del foreground). La sintassi di entrambi i comandi è la stessa degli omologhi
comandi di MATLAB.
• Ftmzioni di Trasferimento tramite i comandi: dpoly e droots che mostrano,
rispettivamente, la funzione di trasferimento e la sua rappresentazione in
termini di zeri e poli. Nel primo caso si devono fornire quali argomenti della
funzione il numeratore ed il denominatore, mentre nel secondo gli zeri, i poli
ed il guadagno statico. In entrambi i casi è possibile aggiungere un ulteriore
262 CAPITOLO 14. SOTTOSISTElvfI ·
: ..~--·.,:
argomento che specifica l'incognita e se la funzione va espressa in termini di- ,.,_ ~.'\.;.•,"::;.
, ~.._.l, •.
• ~ t1f.'i;~
potenze positive o negative della stessa . ... itiçJ;~~~
')'l'Nr..~,
--
Nel campo Drawing commands possono essere inseriti più comandi che ver- ~~....
,..-.!,,.,~
"''.
ranno eseguiti nell 'ordine in cui appaiono. Si noti che è possibile far riferimento
esclusivamente a variabili definite nel campo lnitialization commands della pagina
lnitialization. Nel caso in cui si introduca un comando errato o si faccia. riferimento
.
.1;11!'.
.
...·.,~~~~-
l a variabili nçm valide Simulink mostrerà la stringa ??? all'interno del blocco .
È possibile realizzare l'icona del un blocco anche tramite la funzione iconedit
da MAT LAB, che permette di effettuarne il disegno tramite il mouse.
richiamabile
·: ~~n ~
~41/t~-
<•"
...-,, ·.t
l
. ·.tt~....
\"""
f::~i
~~ "-ti~-.
·
"',lf.i .
~
f~:rt
. ,·::1_
14.3.2 La pagina Initialization
Consente cli definire i parametri del blocco mascherato, il legame esistente fra.questi
ed i parametri presenti nel sottosistema di partenza, nonché definire le variabili
necessarie per il disegno dell'icona del blocco.
La pagina è quasi interamente dedicata alla definizione dei campi che appari-
~-"......
ranno all 1interno della finestra dei parametri del blocco. Essi sono rappresentati in -~-~-~
una lista dove è specificato per ognuno di essi l'etichetta che accompagna il campo, . ·l~ · j.
• : ;.t
il tipo di dato ed il nome della variabile. Sulla sinistra di tale lista sono presenti •t~'' t\
dei pulsanti per aggiungere, eliminare elementi oltre che per ordinarli (l'ordine
con cui i campi ai presentano nella finestra dei para.metri coincide con quello delle
variabili all'interno della lista).
ì Per definire o modificar e un campo è necessario selezionarlo e quindi agire sui
valori dei campi dati presenti al di sotto della lista. In particola.re: -: ~-
. .J,,(f:
• Prompt: specifica l'etichetta del campo; ) ,.
....
'i:
~i
• Variable: il nome della variabile nella quale andrà memorizzato il valore;
,1~.lil
• :,\.-1:fi
• Control type: specifica il tipo di campo parametri. Le possibili alternative \v:'~r?•
sono: Edi t che specifica un campo editabile, ovvero un normale campo per tiri,:f'-~ ~t'-
"•"~-t
·.,.~
immettere i valori; Checkbox per campi di opzione (ON/OFF); Popup nel •~li'?-~
caso la scelta deve avvenire fra più alternative (queste vanno inserite nel
~~t il ì
: f:ti~t ~
1
.. ~.t· -t•i
I l campo Popup strings separate da una linea verticale I);
{
I
I • Assignment: specifica se il valore immesso dall'utente deve essere valutato .
'
da MATLAB prima di essere assegnato alla variabile (opzione Evaluate) o ·-~.--
lb~ .t •
•·t:t. i-1-'.!>l
assegnato dir etta.mente come stringa alla variabile (opzione Lit er al). Si noti
che in pres enza di Popup l'opziomi Evaluate assegna alla variabile l'indic e
~i~ I
1J>f\'; ~
dell'elemento selezionato nella lista partendo da 1 per p primo).
-;,~
;, '~
- ~~i~
: ..... \
:!',.~\:/
Volendo definire dei valori di default per i singoli campi è sufficiente inserirli
;:}i1
una prima volta. Tutte le repliche del blocco avranno memoria di tali valori.
Nella parte baasa della pagine vi è il campo Initialization Commands dove è
~rliW1
J;~tlfj !y
.,,.:.;;.
....
,,::,f
\,
,ln 1t
.~{1~!\ it,
.
possibile specificare delle variabili locali al workspace del blocco . In particolare
14.3. MASK 263
queste variabili possono essere utilizzate sia per il dise~no delPicona del blocco che:
per la definizione dei parametri dei blocchi che formano il sottosistema. '
• Block help: è il testo che compare (in formato html) quando si preme il tasto
HELP. È possibile inserire: un URL, un comando web, un comando eval o
del testo statico.
La Figura 14.6 mostrata il significato dei vari campi (ed il risultato dell'esempio
svolto nel successivo paragrafo).
••
•• •
•) lli-lp .. r.llJ
~l'.f ,~ lìe>W~ ~ ., ; .; ~
111\!1 ' ,.. r · · 'f '
• - .• . •. ~ .:.....!...~1.'1-~ ~ .....f
4--!-: P.H!i;.:;....it~
- -OK-
t.~ . _,-1
.,-, !-..;-~-~-_- ~-u-
- 1- ,~ ,);(zh~t .~,·':tt;·t
I tJ 't . • I• lrfdt,...;;_,....------
1qua11WIV901n1utor
Muked 81otk:lolodlled • AddloF~t I
i Uat1111SlltlUllnk- .- • .,,_,_,,.,. w • ; ~ - • ~CkR;{trenca J.
' ModiRed square wave generator· • ·
auulo blouo è unan1110n1mod,~caladelgenar110,1 di onde qualltt.
- .
Figura 14.0: Significato dei ce.mpi delle. pagina Docmnentation del Mask Editor.
264 CAPITOLO 14. SOTTOSISTEMI
Nella Figura 14.7 è mostrata l'icona del blocco così realizzato e la corrispondente
schermata dei parametri.
N@ffit s!Q!•I
I
........
,_, t i .... ,•
-··
,_.,
mezzo di alcuni blocchi particolari che vannÒ inseriti all'interno del sottosistema
stesso:
I Si noti che nei sottosistemi con trigger non è possibile utilizzare elementi dinamici tempo-
co~tinuo, mentre per i blocchi tempo discreto si deve settare il Sample Time al valore
inherited.
I
Nella libreria Subsystems sono presenti dei modelli base che possono essere
utilizzati dall'utente per costruire i vari sottosistemi. Ad esempio travia.mo sia
il blocco Subsystem per la costruzione di un sottosistema elementare, l' Atomic
Sub8ystem per la costruzione di un sott.osisterna atomico, lo Enabled S1,baystem
per la costruzione di sottosistemi dotati di una abilitazione , e così via.
266 · CAPITOLO 14. SOTTOSISTE!vII
I
•• 1 l it.:;•
abilitazione, in questo caso la sinusoide, è maggiore di zero. Si noti come l'uscita del ~- t(~.e~
·, lfl
'·
,
h(f '•"
sottosistema è costante durante la fase di non abilitazione. Quando il sottosistema •1
·1Jf1
,,~·
,:·,
è abilitato il valore dell'uscita è aggiornato solo negli istante di trigger, cioè in :-J•'"~.
;.:
corrispondenza dei fronti di salita e discesa dell'onda quadra. ·
nn-----. ·-·
Puln
Oef\ud o, --~~:-'
: J"r)' I
. :?'o;~ ~
~,_,' I
SI• • Wr, t
,#
~.,
:-•~
i•
1 • .
1 ~"'1. •
• ~"1:
i
.-~
:"~J
~;r
1·:1 •!1
[
~
....
i
I·
II
dove q è il vettore delle posizioni angolari dei giunti la cui conoscenza consente
di determinare la postura dei ,link (vedi Figura 14.10). La matrice quadrata B è
14.5. UN ESE.MPIO: UN NIANIPOLA.TOREPLANARE 269
la matrice di inerzia (il cui valore dipende dalla configurazione del robot), h (q, cj) ..
..
'I
rappresenta il vettore delle coppie di Coriolis e ·di quelle dovute alla forza centrifuga
e g (q) rappresenta le coppie ai giunti dovute alla forza di gravità. Le coppie
motrici, applicate ai giunti tramite i motori, sono le r .
. ,..,
Giunti rotoidali
link)
g (q) =
245 cos (q1 + q2) + 784 cos (qi) )
( 245 cos (q1 + q2) I:
Lo schema Simulink corrispondente è mostrato nella Figura 14.11. Come si
può notare, sono stati costruiti tre sottosistemi ognuno dei quali è specializzato
nella descrizione di una parte del modello. Se avessimo costruito un modello
meno gerarchizzato la legibilità del tutto sarebbe stata assai ridotta. Grazie alla
schematizzazione adottata si vede subito che le coppie ai giunti sono ottenute
sommando alla coppia dovuta ai motori quelle legate all'azione della gravità (che
dipendono solo dalla postura del robot) e quelle connesse con le forze di Coriolis
e centrifuga (che dipendono sia dalla posizione che dalla velocità del robot).
Nella Figura 14.12 è rappresentato il diagramma relativo al calcolo di quest'ul-
timo addendo. Si sono utilizzati due blocchi Fcn ognuno dei quali dedicato al
calcolo di una delle componenti del vettore h. Si noti come nel campo parametri
:,;01
..~~\ I
":i-$
1
, I ~1:-
:-...,_
..lf I
I I
\dol 1
poattlone PoslzJonegiunti
IC-(00)
'dot
Matricedi Inerzia
Vtloclla'glunll •••\ \•.,:!!.:
..~.~
-~J;],.j
:~•~f I
. .
Figura 14.11: Schema Simulink del manipolatore planare. !
!
ì -25'1In(u(2D'u(4)'(2'u{3J•u(4I)
I ••')
·•.r·
:·--i'
i
:!~~
..,.,,
... .,,.~
h(1) .: ,;,{t;;,,.
' •'1!.,,/
lnl
........
·1"' } ,,
Oul1 ~ •-1:",t\
MUA .,· ~~
25'sln(uf20-power(u[3l,21 Numberof lnpuu-(2 21'----....::-"l"-'l:C.-{ ·,,,:~•:\·
"~- 1iu.:..
h(2) ln2 ;;'""'•'l·
,:-;,;;..i
.,1.e•
u·-.,h
. .:i:.
. .i. •
. ··~•
~-,,/J ~-
...;•,il, I
:'t·i'
Figura 14.12: Sottosistema dedicato al calcolo delle coppie di Coriolis e Centrifuga.. • ·~ , ... -{~• l
•.!, " •j
I
I
. k :
I
ciel blocco Mux si è inserito il vettore [2 2] per indicare a Simulink che l'ingresso %j
:.~ I
.. ,,, il';~
è costituito da. due segnali ognuno di cardinalià due (di conseguenza l'uscita. sarà f• ,{I.'
Lo stesso risultato si sarebbe potuto ottenere indicando semplicemente il ·numero dei segnali
•:':t.f
td
• s,Jli.-,.;
\',c
~\ifi't.,i
in ingresso al Mw: (in questo ca.so 2) . Il vantaggio di indicare esplicitamente la cardina lit à dei ..,n~,{ J..»
\ .. ~,·.,,.,
• I
vari segnali in ingresso (e nel caBo ce ne sia motivo anche il tipo) risiede nel maggior controllo • I
I
.I
I
14.5. UN ESENIPIO: UN !vIANIPOLATORE PLANARE 271
200+so·cos(u(21) I
I
I
6(1.1)
)
posizione
8 i
32.S+2s·cos(u(2)) L..Ja----1~ Reshape 1---= ---1~ lnv
6(1,2) e 8(2 , 1)
Reshape
•
Produci
accelerazioni
Output Dim811S1011ality
.. custom lze
Output Oimensloo=(2.2)
8(2 .2)
1
Coppie
Le accelerazioni così ottenute vengono integrate una prima volta per calcolare
la velocità ai giunti ed una successi va per ottenere le posizioni angolari.
In genere un robot è impiegato per eseguire delle lavorazioni che, in ultima anal-
isi, si riducono nell'imporre che lo stesso si muova lungo delle traiettorie prefissate,
così come realizzato dello schema di Figura 14.14.
out
Tu W01k1pact
S.ve lormat•Sbvc:luttWlthTlme
T19telloril
d111derata
Rllenmt~U
dipoelbcN
Conlrolkm
I
I
I
i'
I
Figura 14.14: Schema Simulink per la simulazione di.un robot con relativo sistema t
di controllo.
Si noti che gli ultimi due plot servono per centrare il grafico all'interno dell 'i~
cona e si è utilizzato il valore Transparent per Popzione !con transparency per far
apparire i nomi delle porte all'interno dell'icona del blocco.
Il sottosistema. immediatamente a monte del robot rappresenta il controllore,
cioè un sistema che è in grado di generare i comandi da imporre a.i motori ai giunti
in modo tale che il robot segua quanto più fedelmente possibile la traiettoria.
desiderata. A tal fine, come descritto più in dettaglio nella Parte III del libro, il
controllore confronta. la posizione attuale dei giunti con quella desiderata e sulla
base dell'eventuale errore rilevato determina le coppie motrici ai giunti.
1
Allarlmenlldi posizione
2
Posizione giunti
Coppie al giunti
3\..----~
Veloc1ta
' giunti
KD
function mygraph(q) i
x1=cos(q(1));
y1=sin(q(1));
x2=xl+cos(q(1)+q(2));
14.6. ESERCIZI 273
i.
14.6 Esercizi
Esercizio 14.1 Il principio dell'escltisione competitiva in biologia afferma che se
due o più specie simili (nel senso che hanno le medesime esigenze alimentari)
,.~
.:..,,..:·
~~~
}}
:-:--
274 CAPITOLO 14. SOTTOSISTEMI .....
• ,; jj
.. ,j!;.;1
,
'J
,i~
"ft
..·1,
PoalzlonJangolarial giunti :~:e
.,,-;
,.
d- ~~.:
~-"~J-
Confrontofra la traiettoriacleslderolJI . .(
,.,.
.,
(lineaU'alteggiata) e quellareole i
(lineapieno)
·.• :µ
......,
. !.!.I·
.:~f1~
I
• 'i ~1~"
·..,,\m:
- ::t
·•
Vlatastroboac:opka
del motodel
robot
OttenutasfruttandoIn funziona
mygraph o l'opzionehold on -;;~•
t;•~
ì ·-:~f
~~.~
•,.•,...,
i,: ~.
Figura 14.17: Risultati della simulazione. :;
coesistono nel medesimo habitat, la limitatezza delle risorse fa 3i che alla fine
permarra solo la speciepsù adatta e le altre tenderanno ad estinguersi.
Questoprincipio può essere desc1•ittotramite il modello di Volterra : .'..W=
dove I
i
3
F(x ) = L OiXi i
f= l
m-aledi sviluppo della i-ma specie e '"'ti rappresentala sen3ibilità della i-ma specie
rispetto alt'intera popolazione. Verificare che, indipendentemente dalle condizioni
iniziali, dopo uncJfase transitoria sopravviverauna sola specie mentre le altre s,
I
estingueranno. Quale specie sopravvive se /31 = 1, /32= 1, {33 = 1, 1't = 0.5, ,.;:.ìJ.r. ;
1'1 = 1, 13 = 1, 01 = 1, et2 = 2, a:i = 1, x1 (O) = 2, x2(0) = 5, X3(0) = 4? I\ ..
~~~'
....
dove }.,J è la matrice di inerzia, h sono le coppie dovute alla forza centrifuga,
f quelle dovute agli attriti ai giunti e T le coppie di controllo. A differenza del
robot planare descritto nel Paragrafo 14.5, un robot Cartesiano ha entrambi i link
su di un piano parallelo al suolo, di conseguenzala forza di gravità è bilancia-
ta direttamente dalla struttura meccanica. Si a3sumano i seguenti valo11per le
matrici:
3.316+0.234coe(q2) 0.117+0.163cos(q 2 ))
At/(q) = ( 0.117+0.163cos(q~) 0.117
Inoltre si assuma che esistano dei fine-corsa meccaniciper i vari giunti: lq1IMAX -
2.3 rad e lq2IMAX = 2.15 rad.
Capitolo 15
Essa ci dice che il prossimo valore della variabile y è pari ad a volte il valore che
aveva assunto la y al passo precedente più il valore che l'ingresso assume al passo
corrente. Lo schema Sìmulink corrispondente è quello di Figura 15.1. L'uscita. 1.
del blocco Unit Delay è pari al valore che assumeva l'ingresso del blocco al
passo precedente (cioè y(k) = u(k - 1)). A questo punto è facile comp?endere
il funzionamento dello schema, infatti il segnale v(k) è pari a ay(k - 1) e di
conseguenza w(k) = u(k) - ay(k - 1), ma questo è proprio il valore che deve
278 CAPITOLO 15. SISTEfvII TEMPO DISCRETO .·,·.
◄ •,r
Signal aaao
oo
Generato
u(k)
\.
1 k D
z z
Unlt Delay Unit Oelay1 Scope
. ;"--"~•
."
alpha .,.;" .. .
•
·'1,
(i ,
Figura 15.1: Schema Simulink per la. simulazione di un sistema tempo-discreto. . ,,•it
• t
I s-;.'
#,,.
Si noti la somiglianza di questo schema con quelli visti per i sistemi tempo- .
·-. ,
I"
~~,
i\'12,11
.
~
,.~'!fj'.
1.e.~
~,:,
:c4(k+ 1) = S3X3(k) ~';!
.•:J,
x 6 (k + 1) - 84X4(k) ~tJ
,.,
1~.,,:
:1f/
dove la prima equazione rappresenta le femmine nate nell'anno k , mentre le altre •~,: t'~ l
il :;
il processo di invecchiamento.
Questo sistema è intrinsecamente tempo-discreto, cioè la variazione del numero di
ìndivi<lui può ipotizzarsi avvenire od istanti prefissati di tempo, in particolare si
• J
8; ,
.iz"-
.:~
_\
.
15.2. UN ESE!vIPIO:IL RIPOPOLA.i'vlENTODI UIV LAGO 279
ha una sensibile alterazione nel numero di individui ogni anno durante il periodo
della riproduzione, mentre si può ritenere che lo stesso sia costante fra un periodo
di riproduzione ed il successivo. Questo è un modello estremamente semplificato
dell'evolu~ione di una specie animale, infatti non tiene conto; se non in modo
indiretto, dell'iterazione della specie stessa con la presenza.di cibo e dell'esistenza
dei predatori.
I coefficienti /i e s,
sono in genera.le fortemente t.empo varìa.ntì dipendendo
sia dalle mutevoli condizioni ambientali, sia dal numero di individui della specie
presenti. Considerando l'ulteriore ipotesi semplificativa che tali coefficienti siano
costanti e che in particolare le femmine non siano fertili finché non raggiungano
il secondo anno di vita., che nel primo e nel quarto anno di vita. la probabilità di
sopravvivenza sia ridotta e che il numero di esemplari che supera. il quinto anno
sia trascurabile; si possono assumere quali coefficienticlelsistema (15.1) i seguenti
valori
Si consideri il ciclo di vita all'interno di un lago dove venga immessa una colonia
di pesci per ripopolarne la fauna. ittica, ipotizzando cht!i pesci immessi siano tutti
avannotti, che ln popolazioneInizialecomprenda 100 fammlne1e che non vl eil\no
altre immissioni negli a.nni succeasivl.
Per modellare in Simulink il sistema si può utilizzare il blocco Dis. State-
space assegnando al parametro Sample time il valore 1 (si veda il Pa.ra.grafo24.1).
Analizzando l'andamento temporale delle femmine di quattro anni, si nota che la
popolazione subirà. qe~leoscillazioni nei primi venti anni per poi andare a regime.
Ciò significa eh~ il ripopolamento del nostro lago ha avuto successo.
Dal punto di vista matematicò. questo significa che il sistema presenta un polo con modulo
unitario. Si ricorda. che, a differenza dei sistemi lineari tempo-continuo dove la stabilità è garan-
ti t a dati 'avere tutti i poli a pà.rte reaie negativa, nei sistemi tempo-discreto essa è garantita daJ
fatto che tutti I poli siano contenuti all'i'nterno del cerchio di ra'lgio unitario. Una.situazione di
stabilità. non asintotica rappresenta la. frontiera. fra la stabilità as intot ica da un lato e l'instabilità
dall'altro: basta una piccola perturbazione per cambia.re radicalmente il comportamento del sis-
tema. Infatti se perturbiamo (anche di poco) i coefficienti di sopravvivenza o quelli di fertilità., In
popolazione ittica del lago andrà incontro ad un'esplosione demografica (cioè il sistema diviene
instabile) o all'estinzione della. specie (sistema. asintoticamente stabile). Il fatto che nella realtà le
cose non siano cosl catastrofiche mostra come il "controllo" elnborato nel corso dei millenni dalla
Na.tura, il cosidetto ecosistema, è in credi biImente efficace (e che il modello da noi considernto è
una brute.le esemplificazione di quello che avviene in un ec08iatema lacustre) .
280 CAPITOLO 15. SISTElvII TEMPO DISCRETO
puramente tempo-discreto che si differenziano per il modo in cui vengono determinati gli istanti
di valutazione del sistema · in presenza di blocchi con differente Sample Time. La versione a
~.
"'!~
.
,~,..
passo fisso analizia il sistema ad intervalli costanti pari a.1più piccolo sottomultiplo comune a
tutl l blocchi, mentre l& versione &passo variabile analizza Il sistema solo negli effettivi istanti di
campionamento. Ad esempio, se in uno schema esiste un blocco con un Sample Time pari a. 0.5
ed un altro blocco con Sample Time pari a 0.75 i due algoritmi genereranno i seguenti istanti di
valutazione
• , l
paaso variabile O 0.5 O.75 1 1.5
passo fisso O 0.25 0.5 0.75 1 1.25 1.50
Z110,01dt1
Ho14
..,....!ft,e , 1
11•
• w,. ,
In presenza di segnali multi-variabili il peri odo di campionamento per ogni blocco è unico :
15.3. SISTEMI CON DIFFERENTE SAMPLE TIME E SISTEMI IBRIDI 2-Sl
tutti i segnali verranno elaborati con il medesimo periodo di campionamento (e nel medesimo
istante di campionamento).
Nella realtà molto difficilmente ci si imbatte in sistemi tempo-discreto "puri".
Spesso si ha la necessità di considerare sistemi ibridi, cioè ove sussistono contempo-
raneamente parti che evolvono in modo continuo nel tempo, con parti che evolvono
in modo discreto. In tali casi è necessario interconnettere due mondi che presen-
tano sostanziali differenze di comportamento. Sìmulink è in grado di differenziare
automaticamente fra i componenti tempo-continuo e quelli tempo-discreto. I primi
vengono fatti evolvere nel tempo in funzione del metodo di integrazione (gli istan- I
ti nei quali la funzione è valutata vengono decisi dall'algoritmo di integrazione)
mentre per gli elementi tempo-discreto, gli istanti in cui valutare la funzione sono I
quelli specificati dal relativo Sample Time.
L'opzione Sample Time Colors del menu Pormat associa a ciaBcun blocco (e alle linee ad
esso connesse) un colore diverso in funzione del periodo di campionamento che è implementato.
I!
I
I Colore
Nero
Magenta
I Significato
blocco tempo-continuo
blocco costante nel tempo
Il Colore
Blue chiaro
Verde scuro
Signiflcato
quarto più piccolo periodo
quinto più piccolo periodo
l
Giallo blocco ibrido Arancione sesto più piccolo periodo
Rosso più piccolo periodo di campion. Ciano elementi con trigger
Verde secondo più piccolo periodo Grigio per gli altri periodi
Blue terzo più piccolo periodo
Solo per gli elementi dinamici è definita in modo intrinseco la. modalità dì evoluziooe, gli
altri blocchi la "ereditano" dal blocco immediata.mente a monte che li pilota (ed alle vohe anche
dal blocco a va.Ile).
Prima di procedere è opportuno fare una breve digressione su come Simulink lavora.. Ogni
blocco Simulink può essere interrogato in modo da acquieire le informazioni concernenti le uscite
del blocco, il valore delle varia.bili di ste.to 1 (per sistemitempo-continuo), lo stato al passo
successivo (per i sistemi tempo-discreto), il prossimo istante di campionamento (per i sistemi
tempo-discreto). ·
In presenza esclusivamente di sistemi tempo-continuo il metodo di integrazione stabilisce di
volta in volta quale sarà il successivo istante in cui valutare la risposta del sistema ed aggiornare
lo stato. In presenza di elementi tempo-discreto SimuHnk acquisisce le informazioni sul successivo
istante di evoluzione di ciascun blocco ed impone che il sistema sìa valutato anche in tali istanti.
È da sottolineat'e che mentre l'aggiornamento dello stato e del successivo istante di campi-
onamento riguarda solo il blocco per cui l'istante considerato coincide con un istante di campi-
onamento, Simulink valuta. in tale istante l'uscita di tntti i blocchi del sistema. Questo equivale
a supporre che all'uscita di ogni blocco discreto sia presente 1.1norgano di tenuta.
In presenza di sistemi ibridi Simulink acquisisce inizialmente le informazioni sugli lstanti di cam-
pionamento dei sistemi discreti, quindi acquisisce l'indicazione fornita dal metodo di integrazione
delle equazioni differenziali su quello che è l'istante in cui valuta.re l'evoluzione del sistema. e se,
quest'ultimo è minore del primo istante di campionamento discreto, valuta la funzione in tale
istante, altrimenti impone anche al risolutore delle equazioni differenziali di valutare la. funzione
nell'istante di campionamento dettato dal sistema discreto.
1
Calcolato per integrazione numerica dei rispettivi valori delle derivate
L
I.
I i
282 CAPITOLO 15. SISTENII TEMPO DISCRETO
15.4 Esercizi
Esercizio 15.1 Studiare il comportamento del seguente sistema
y(k + 2) + y(k) = O
a partire dalla condizione iniziale y(O) = 1 e y(l) = O.
Esercizio 15.2 Il procedimentodì Newton per calcolareil minimo di una funzione
consiste nel cercareil limite di una successione, che a sua volta può essere visto
come l'evoluzione di un sistema discreto.
Verificareche il minimo della funzione f(x) = ez + x 3 sin(x} si ottiene dall'evolu•
zione di
J' (x(n))
Xn+1 = x(n) - /" (x(n)}
Dopo quanto tempo si estingue un debito di 1O milioni pagando una rata semestrale
di 800.000 lire, in presenza di un interesse annuo del 12%?
II
I I
Esercizio 15 .1 O Anche per i sistemi alle differenze finite esistono problemi mal-
condizionati. Confrontare la soluzione del seguente modello preda predatm·e m
pr·esenzadi risorse limitate
~::,1J1.~l I
a partire dalla condìzione xi (O) :;:; 0.2 e x2(0) :;:; 0.2 ed i seguenti valori dei .,::\t~'i1~-t..
'"'i~:n i, ..
Esercizio 15 .12 Simulare il comportamento di una macchina che sia in grado di• ~. Ì,4,\'; t..•
(j'i'(lw '··1•'
ricevere in ingresso monete da 50, 100, 200 e 500 lire e che segnali quando sia ,4fil '
' ..
~"
quanto detto per l'esercizio precedente. La rete combinatoria è in gra- ,•, .:.'i
t,
do di operare solo con i valori {O,1}, è pertanto necessario anteporre ~
\
'
alla rete combinatoria un bloccoche sia in grado di codificarel'infor-
mazione sul tipo di moneta (che può essere schematizzata come un
segnale che può assumere quattro livelli} in una opportuna stringa di
{O,1}. Realizzare il bloccodì codificacome un group.
Funzioni avanzate
16.1.1 Integrazione
Le routine di integrazione possono essere richiamate anche da MATLAB con una
I •
sintassi tipo:
[t,x,y]=sim('model',tfinal,options,ut);
che fornisce in uscita il tempo t, lo stato x, e le uscite y del sistema descdtto dal
modello model, integrato fra l'istante zero e l'istante tf inal.
Il vettore dello stato x è ordinato in modo da presentare prima tutte le vari-
abili associate con i blocchi dinamici tempo-continuo e poi quelle associate con gli
elementi tempo-discreto.
Se tf inal è un vettore di due elementi il primo valore è considerato quale
istante iniziale per la simulazione ed il secondo quale istante finale. Se tf inal è
un vettore composto da più di due elementi: il primo e l'ultimo valore specificano
286 CAPITOLO 16. FUNZIONI AVANZATE
nell'ordine l'istante iniziale e finale della simulazione, mentre gli altri elementi del
vettori gli instanti in cui valutare il modello.
Se al posto cli uno dei parametri della funzione sim si introduce la matrice
vuota [] per la simulazione verranno utilizzati i valori specificati all'interno del
modello.
L'eventuale parametro options è generato dalla funzione simset e consente
di specificare i parametri ed il metodo di integrazione da utilizzare. L'istmzione
simget restituisce le informazioni sui para.metri ed il metodo di integrazione spec-
ificati all'interno del modello.
La variabile ut consente di specificare i valori assunti dagli ingressi. .
Esso può essere sia una. tabella che una espressione letterale. Nel primo caso la prima colonna
della tabella èi.everappresentare il vettore dei tempi (deve essere costituito da une. succe88ione di
numeri strettamente crescente), le altre colonne, in numero pari agli ingressi de l sistema, rapp-
resenteranno i valori dei forzamenti. Negli istanti di tempo non presenti nella tabella l' ingresso ~-
;"tt.i\• .
sarà. calcolato per interpolazione lineare a partire dai valori assunti nei due istanti più vicini. È
possibile indicare anche espressioni letterali che verranno risolte da Simulink istante per istante. _,,1r
•... ._,,..,. . t •
Ad esempio
ut • 1 t+ain(3•t+2)'
rappresenta. un ingresso sinusoidale la cui ampiezza si incrementa. proporzionalmente al tempo
(indicato con la lettera t ).
Gli eventuali elementi della. libreria Sink presenti nello schema, con la sola eccezione degli
eventuali Scope, lavoreranno correttamente.
16.1.3 Linearizzazione
Per tutta una serie di analisi è utile poter disporre del modello linearizzato di
un sistema. Simulink permette di ottenere ciò utilizzando la funzione linmod
che genera. le matrici del sistema linearizzato intorno ad un punto di equilibrio
desiderato. La sintassi è la seguente
16.1. A.NALISI DEL SISTENIA 287
[A,B,C,D]=linmod('model 1
, x, u, para);
dove con x, ed u si sono indicati lo stato e gli ingressi intorno ai quali lineariz-
zare il sistema; se omessi Simulink linearizzerà intorno ai valori di default definiti
all'interno dello schema.
La tecnica impiegata da Simulink per il calcolo del modello linenrizzato è quello di perturbare
ogni stato nell'intorno del relativo punto di lavoro in modo da determ inare lo Jacobiano del
sistema.
Il terzo parametro scalare opzionale {detto para) consente di specificare, fra le altre cose,
l'istante intorno al quale effettuara la linearizza.zione.
È opportuno sostituire, onde prevenire problemi numerici durante la fase di linearizzaaione,
tutti i blocchi Derivative presenti nello schema con il blocco Switched derivative /or lineariJatìcm
della libreria Simutink Extras - Linearization e utilizzare per i blocchi Tronspm·t Delay e Variable
'.lron.sport Delay l'approssimazione di PADE.
È opportuno predsare che al crescere dell'ordine dell'approssimazione di PADE scelta au-
menta la precisione dell'approssimazione, ma questo comporta l'introduzione di un numero mag-
giore di sta.ti (pari all'ordine dell'approssimazione) e, conseguentemente, l'onere computazionale
ed eventuali problemi di stabilità numerica. Una buona soluzione di comp romesso è quella. di
utilizzare un'approssimazione del secondo ordine.
In presenza di sistemi ove coesistano sia elementi tempo-continuo che tempo-
discreto si deve utilizzare la versione discreta dlinmod che consente di avere un
modello linearizzato tempo discreto di un generico sistema non-lineare (anche
ibrido). La sintassi è simile a quella di linmod
1.
288 CAPITOLO 16. FUNZIONI AVANZATE
che fornisce il punto di equilibrio più v1cmo a quello indicato dai vettori xO1
uOI yO: cioè tale che lo scostamento dallo stato indicato, dagli ingressi indicati e
dalle uscite volute sia minimo. Se si omettono i parametri xO,uO,yO, la soluzion~
ottenuta è quella che minimizza la norma del vettore [x,u,y].
La tecnica. utilizzata in trim è quella di ricondurre il problema di determina.re i punti di
equilibrio ad un problema di ottimizzazione vincolata.
16.2 Debbuging
Simulink mette a disposizione dell'utente un tool per il debugging (correzione)
degli schemi. Per attivarlo si deve utilizzare il comando Simulink debugger del
menu Tools.
Alternativamente si può anche utilizzare una versione a linea di comando attiva.bile indiffer-
entemente da uno di questi comandi
che attivano il debugger dello schema prova. La versione a linea di comando è un pochino più
ostica da utilizzare ma è più sofisticata.
Comparirà una finestra simile a quella di Figura 16.1 dall'interno della quale è
possibile lanciare la simulazione specificando se la stessa debba evolvere un blocco
alla volta (il blocco valutato è evidenziato nello schema con un colore diverso) o
di un passo di integrazione alla volta.
È anche possihìle inserire dei breakpoints legati al verificarsi di determinate
condizioni nonché analizzare dopo ogni ptu!so il valore di tutte le variabili presenti
nello schema.
16.3 Libreria
Simulink ha un certo numero di librerie all'interno delle quali sono organizzati i
diversi blocchi funzionali. È anche possibile creare delle librerie personali nelle
quali organizzare i blocchi definiti dall'utente.
Per creare una libreria è sufficiente scegliere l'opzione Library del comandò
New del menu File. Comparirà una finestra simile al foglio bianco di Simulink
(con alcuni menu in meno}. '
All'interno di questa finestra è possibile disegnare schemi, aggiungere blocchi
e così via con le stesse modalità viste per la costruzione degli schemi. Una volta
salvato lo schema si sarà creata un nuova libreria. ·
Se si vuole che la nuova libreria compaia nel Simulìnk Lìbmry Browser è necessario incluqere
la directory dove è memorizzata la libreria nel path di MATLAB e definire nella stessa directory
delle. libreria un fìle alblock1 ,mld. Per fare questo il modo più semplice è quello di copiare
un file slblocka .mld e modificare opportunamente i vari campi seguendo le istruzione presenti
all'interno del file stesso.
16.3. LIBRERIA 289
al
Av11nz11
A\lanza tinq al prossimo
breakpoinlS(fino alla
Avanza fine della simulazione)
al
prossimo
blocco
Risulla1idella
lqeb,a1c Co~ttUlllt/1
l • simulazione
.--. ...·----. ·------
........... ........
f•lddtu9 80,:0 'd.H?/Int,eq1uo1. 1
lt ~ ..
(ta • o.00021nens43917an 1 "5tut" ot.-
i I%-··--··- ··--·- ··-··-· ---·--- ---" •.. ,. f I
1«•ld•tu<i eo,o·d .. l/1l)ufutor•i: 1,;
t ffi • o.ooo-43aS14UOl9$5'1.54 J ••st•u." o :: I
..~ , .. ~-----...;.- • ----------- - -- -·.... ... ........... ... . ........ ......_. e I
'"';;;~ .-==;;
·~
;;::;::::::Ì::;:11p:::;
•
éiè
:::d::::
• c/J\:::::I
l •ldeòu9 ao,o 'd•12/1Au9r•co,
• i •O. 039998986315248995 l
· J: ii;: I,
f 10 J!!ICI> •• • · -~ · 4ll • (O.9999e2one1s1161 ,-; 1 1
r;i,i~c "uin ';Aft-~ • 10.m,ms1mms&1 \ I
~llk!il~,
s~'.l!~
jt " ;;;~:;·;~;;·~~~;;;;~;;;-;;:;;···········I~ j
Condizioni
di
~~,ini,,1tìli
\r(t .3. :.!?:~~.~~~~~~~~~~~~~~~!................:
breaJcpoints
J1!~~~,·~<1°r~j-!I:;
~lr~tprn,
! --
..~•~ .
- -
41tu9 80:a 1 «11ti/lnu:e1•c.o,1• H
·
1
• "·-:::_~
.7_r-:_~=~ ,.~
:'~}\
I
Esercizio 16.1 Detenninare il modello linearizzato della nave (Paragrafo 11..l a ~ 1-!t : ..
pcig. 197) e valutare l'ampiezza massima degli ingressi che consente di ritenere •t
;.~i;
valida l'approssimazione lineare. ! ~t'~
che gli urti con le sponde siano elastici (con un fattore di elasticità di O.9) e che ·~-' ;,
·.~f.t
.;U:;;,
,
l'interazionefra panno e bigliapossa essere schematizzato come un attrito viscoso ;i\-•-·,li••
(l'.'t•. '
camtterizzato da un fattore di smorzamento a= 0.05. ';-..~-~~·
...........
,.:~ ..i·•;•
' ...... .a
Suggerin1ento. Realizzare un mask che acquisite le notizie sulla po- ! '
sizione e sulla velocità (sia in tennini di ampiezza che di direzione}
iui.ziali, calcoli gli opportuni valori da assegnare quali condizioni in•
iziali.
La dinamica nelle due direzione è indipendente e può essere, per- .
,.t,{1 ...
.,._ ..'.!-;::·
1~ -4•F'/..~·
tanto, realizzata utilizzando due repliche di un stesso mask {facendo ·J~r.,_~
;-,1J~.;_
·a!,
attenzione al fatto che le dimensioni del biliardo non sono identiche). ·,-:.1~
:'lf.t,
"''!li.;,;
"· .\_
',\'
I
':1.,'(,~·'(.•:
~f"'.:
f
Esercizio 16.4 Determinare i punti di equilibrio del seguente sistema •:~,1 :1.,
1·► , tr.-1'-"'1·
• t~-~' •,,•
·•~ '\:f
•d:~ ..•'
:i:1 - -X1X2 + X2 ).'~
±2 - x1 - x1x2 + 0.5x2 + u
y = Xt -
2
X1X2
. ..::.. -
'•
.._,i
per i seguenti valori dell'ingressou E [O,11 3, 9]. Quale punto di equilibrioè stabile? 1ç
'~,.,;·--
if
~ "i
Si calcoli,quindi, il punto di equilibriopiù prossimo a u = 9 e y = 3. Questo purito ,~--
-i~
di equilibrioè stabile? ;:,
..
Suggerimento. Utilizzareil comando trim per il calcolo dei punti di
eqv.ilib,'io.La stabìltà dei vari punti di equilibrio può essere valutata :tf.~
v'-
,f t . •
sulla base del relativo modello linearizzato del sistema ottenibile con il ~} ...
• ,4 n,.,
· ~ •lf.~
comando linmod. ;J~1;.; .
,,:.j .
-~
~-
-12sin 2
6t + 4.5sin 12t -1 - 9sin 2 6t - 6sin12t
16.4. ESERCIZI 291
Si calcolinogli autovalori del sistema 'frozen time', cioè valutando gli autovalori
in ogni istante di tempo considerandot come un parametro. Si simuli, 8-U.ccessiva-
mente il comportamento del sistema assumendo x(O) = (1; 2].
Suggerimento. Si usi il comando lirunod pe1· calcolareil modello
linearizzato in differenti istanti di tempo.
Si verificherà che gli autovalori del sistema sono costanti (cioè non
dipendono dal tempo) ed hanno tutti parte reale negativa. Ciononos-
tante la simulazione evidenzia che lo stato cresce in modo illimitato.
Si calcolinogli autovalori del sistema 'frozen time' (si -uedaquanto detto nell 'eser-
cizio precedente) e, successivamente, sì .'Jtudila dinamica della x(t) a partire dalla
condizione iniziale x(O) = [1i 2].
Suggerimento. Si verificherd che gli au.tovalor·idel sistema sono
costanti (cioè non dipendono dal tempo) e che un autovalore ha parte
reale positiva. Ciononostante la simulazione evidenzia che la :i:(t) è
limitata.
.;
I'
Capitolo 17
• DirectFeedthrou9h
evidenzia l'esistenza di un legame algebrico ingressi-uscita
e, quindi, la potenzialità di realizzare con tale blocco dei loop algebrici;
• Sample Time specifica gli istanti di tempo in cui il blocco verrà valutato;
Si precisa che per ogni blocco si evidenzieranno solo quelle caratteristiche appro-
priate al contesto. I I
r
I
!
'
294 CAPITOLO 1 ì. LIBRERIE DEI BLOCCHI
1 du/dt r
Derivative
Derivative: 8ffeLtua la derivata numerica del segnale di ingresso. Ad ogni passo la derivata
è calcolata utilizzando il rapporto incrementale rispetto al valore precedente, in presenza di un
passo di campionamento ampio i risultati potrebbero essere non precisi.
Carotteriatiche:
Oirect Feedthrough: Si.
Sample Time: è ìntrineecamente tempo continuo.
Multi-variabile: opera sia con segnali 1-D che 2-0.
Data Type: opera con segnali reali di tipo double.
{D
Integrator 81
lntegrator1
Integrator: Integra. il segnale di ingresso. Il blocco, come descritto a pag. 205, è molto flessibile
consentendo di specificare l'esistenza di condizioni di reeei, limiti sui valori della variabile inte-
gra.oda. nonché 11peclficare Il valore di tolleranza. assoluta (Abatol) che l'algorlttno tll lntegra.ziono
deve utilizzare (per maggiori dette.gli su queeto B.BpeUosi vedn pa.g. 230).
Caratteristìclie:
Direct Feedthrnugh: LimitatamenLe alle porte di reset e external reset.
Sample Time: è intrinsecamente tempo continuo.
Multi-variabile: opera sia con segnali 1-0 che 2-D.
N. di Stati: dipendono dalla dimensione dei parametri e dalla cardinalità. del segnale di ingresso.
Data Type: opera con segnali reali di tipo double (la porta di re.set accetta anche segnali
boolea.n),
Zero Croeaing: intrinseco sul raggiungimento dei va.lori di so.turazione.
@
Memory
Memory: Introduce un ritardo pari al passo di integrazione. È utile per spezzare i loop algebrici.
Nota: lt de. evitare l'uso di questo blocco se l'algoritmo di integrazione è ode15, o ode 113.
Carntter111tiche:
Direct Feedthrough: No.
17.1. CONTINUOUS 295
Sample Time: è intrinsecamente tempo continuo, ma se è attiva. la relativa. opzione può ereditare
il valore del Sample Time dal segnale che lo pilota.
Multi-variabile : opera sia con segnali 1-D che '2-0.
Data Type: opera con qualunque tipo di segnale .
rn
Transfer Fcn
Transrer Fcn: Implementa una. funzione di traaferimento. I coefficienti dei polinomi al numer-
atore e al denominatore vanno espressi in termini di potenze della s in ordine decrescente,
Nota: È possibile specificare un valore di tolleranza assoluta (Ab•Tol) per ciBBcuna delle vnrlablll
di stato (per maggiori dettagli su questo BBpetto si veda. pag. 230).
C11rotteri8tiche:
Direc\ Feedthrough: solo se il grado numero.tare è pari a queUo del denominatore.
Sample Time: è intrinseca.mente tempo continuo .
Multi-variabile: accetta quale ingresso solo segnali scalari, l'uscita. è un segna.le 1-D se il numer•
atore è una matrice.
N. di Stati: pari al grado del denomina.tare.
Data Type: opera con segnali reali di tipo double.
Scalar Expanaion: No.
~
Transport
Delay
Oaratteri,&iche:
Direct Feedthrough: No.
Sample Time: è Intrinsecamente tempo continuo.
Multi-variabile: opera. sia con segnali 1-D che 2-0.
N. di Stati: durante le opera2ioni di linea.rizzazione pari all'ordine dell'approssimazione.
Data Type: opera con segnali reali di tipo double.
Scalar Expansion: di tutti i parametri eccetto la dimensione del buffer.
Variable .
Transport Oelay
(s-1)
) >
s(s+ 1)
Zero-Pale
17.2 Discrete
Contiene alcune funzioni utili per la simuluioni di sistemi tempo-discreto, ovvero descrivibili
tramite un modello alle differenze.
In tutti i blocchi di questo gruppo è presente il campo Sample Time che rappresenta la durata
17.2. DISCRETE
de!Plntervallo di campiona.mento. Questo campo è intrinse camente scalare : tutte le compen~~ .---:·:• ~:
ti del segnale sono campionate sincrona.mente, In tale campo è p088ibfle inserire un seconda
parametro opzionale che rappresenta l'offset dell'ista.nte di campione.mento rispetto agli altri
blocchi. Cioè l'anticipo (se il valore dell'offset è negativo) o Il rlia.rdo dell ' Istante nel quale
avviene il campionamento.
1 z+~-5
Discrete
~
Transfer Fcn I l
Discrete Transfer Fcn: Implementa una funz ione di trasferimento
mediante I coefficienti delle potenze di z In ordine decrescente .
Caratteristiche:
tempo discreto . descritta
I
Direct Feedthrough: aolo ee Il grado numeratore è pari a quello del denominatore.
Sample Time: è Intrinsecamente tempo discret o.
I
Multi-variabile: accetta quale ingresso solo segnali scalari, J>uscitaè un segnale 1-D se II numer-
atore è una matrice.
N. di Stati: pari al grado del denominatore .
Data Type: opera con segnali reali di tipo double .
Scalar Expansion : No .
(z-1)
z(z-0 .5)
Discrete
Zero-Pale
Discrete Zero-Pote: Implementa una funz ione di trasferimento discreta nella rappresentazione
in termini di zeri e poli .
Caratteristiche:
Direct Feedthrough: solo se Il numero di zeri è pari a quello dei poli.
Sample Time : è intrinsecamente tempo diecreto .
Multi-varia.bile : accetta quale ingresso solo segnali Sta.lari, l'uscita è un segnale 1-D se nel campo
zeri si introduce una matrice .
N. di Stati: pari al numero dei pol i.
I i
i+~sz-1
DiscreteFilter IIi I
Discrete Filter: Implementa filtri di tipo IIR e FIR .
Note : I parametri devono eaeere espressi in termini dei coefficienti delle potenze di .i- 1 in ordine
crescente .
\.
298 CAPITOLO 17. LIBRERIE DEI BLOCCHI
Carotteri8tiche:
Direct Feedtbrough: solo se il grado numer3tore è pari a quello del denominatore .
Sample Time: è intrinsecamente tempo discreto.
Multi-variabile: accetta quale ingre88o solo segnali scalari, l'uscita è un segnale 1-D se il numer-
atore è una matrice.
N. di Stati: pari al grado del denominatore.
Data 1'ype: opera. con eegnali reali di tipo double,
Scalar Expanaion: No.
y(n)=Cx(n}+Ou(n)
>
x{n+1)=Ax(n)+Bu(n)
Discrete State-Space
ill 0
Discrete-Time
lntegrator
ForwardEuler
-
Discrete-Time
lntegrator
BackwardEuler
{I} 1
Discrete-Tm,e
tntegrator
Trapezoidal
TI
1 z-1
Discrete-Time
lntegrator
Flrst-Order
Hold
· Caratteristiche:
Direct Feedthrough: No.
Sample Time: è intrinsecamente tempo continuo (serve per convertire un segnale tempo discreto
in uno tempo continuo).
Multi-varia.bile: opera sia. co11segnali 1-D che 2-D.
!i
I I
'I
N. di Stati: uno stato t.empo continuo ed uno tempo discreto per ciascuna componenle del seg-
nale di ingresso. ·
Data Type: opera con segnali di tipo double.
Scalar Expa.nsion: No.
{D
Unit 0elay
Zero-Order
Hold
300 CAPITOLO 17. LIBRERIE DEI BLOCCHI
[I}
Oirect Look-Up
Tabla (n-D)
1..____f(u)
__,~
Fcn
Fcn: Implementa una. generica funzione.
Note: I riferimenti a.i segnali di ingresso deve essere del tipo u[i]. È possibile far riferimento a
variabili scalari MATLAB. Per maggiori informazioni si veda quando detto nel Para.grafo 11.7 a.
pag . 205.
Caratteristiche:
Direct Feedthr ough: Si.
Sample Time: eredita la caratter ist ica del segna le di ingresso.
Multi-varia.bile: accetta. come ingresso anche segna.li 1-D, l'uscita è sempre una quantità. scalare.
N. di Stati: O.
Data. Type: opera con segna.li di tipo double .
Scalar expansion: No.
17.3. FUNCTION & TABLE 301
2-D T(k,f)
~· -
lnterpolation (n-D)
using Prelook-Up
Interpolation (n-D) using PreLook-Up: L'uscita del blocco è calcolata per interpolazione
lineare dei valori presenti in una tabella .
Note: L'ingresso de l blocco deve essere costituit o degli indici che individuano gli elementi nella
tabella e dalla distanza relat iva di questi da l punto di funzionamento (informaiioni ottenibili con
il blocco PreLook-Up Jnde%Search).
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristi ca del segnale di ingresso .
Data Type: i segnali di ingresso possono essere double o single, mentre il segnale di u11eitapuò
essere di un qualunque tipo.
Scalar expaneion:No.
EELook-Up
Tabla
Look Up Table: Costruisce una rappresentazione lineare a tratti di una funzione descritta
tramite tabella.
Caratteristiche :
Direct Feedthrough : SI.
Sample Time: eredita la caratter istica del segnale di ingresso .
Data Type : opera con segnali di tipo double .
Scalar expansioo : No.
~
~
.!':.
~
\.
-
Look- Up
Table (2- D)
Look Up Table (2-D): Costruisce una rappresentazione lineare a tratti di una funzione di due
variabili descritta tramite tabella.
Caratteristiche:
Dire ct Feedthrough: Si.
Sample Time : eredita la caratteristica del segna.le di ingresso .
Data Type: opera con segnali di tipo double.
1'.
,l .
·1·.I
~
302 CAPITOLO 17. LIBRERIE DEI BLOCCHI
~ Look-Up
Table (n-0)
Look Up Table (n-D): Costruisce una rappresentazione lineare a tratti di una funzione di n
variabili descritta tramite tabella..
Note: È poeaiblle specificare la modalità di interpolazione (costante, lineare o tramite spline
cubiche). In presenza di fu11zionidi più di 2 variabili è necesse.rio introdurre nel campo parametri
una matrice multidimensionale.
Corotteristiche:
Direct Feedthrough: Si.
Sample Time: eredita. la. caratteristica del segnale di ingresso.
Data Type: i segnali di ingresso possono essere double o single, mentre il segnale di uscita può
essere di un qualunque tipo.
Scalar expaneion: No.
MATLAB I>
Functlon
MATLABFcn
MATLAB Fcn: Consente tli richiamare, dall'interno di uno schema. Simulink, una funzione
MATLAB.
Note: li blocco rappresenta un'interfaccia paaalva.:non ~ effettuato alcun controllo di congruenze.
fra Il numero di uscite previste nello schema e quelle effettive. Le componenti dell'Ingresso vanno
indicate come u(i). ·
Camtteristiche :
Direct Fee<lthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: il segnale di ingresso puè essere un valore reale o complesso di tipo double, il segnale
tli uscita può essere di un qualunque tipo .
Scalar expension: No.
P(u) I>
O(P) = 5
Polynomial
Prelook-Up Prelook-Up
lndex Search lndex Search
Output only the index
PreLook-Up Index Search: Determina i valori degli indici e dello spiazza.mento relativo di
un ingresso rispetto ai breakpoints.
Note: È utile per pilotare Il blocco Interpolation (n-D) uiir19 PreLnok-Up ed il blocco Dìrect
Look- Up Tab/e (n-D).
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la. caratteristica del segnale di ingresso.
Data Type: i segnali di ingresso possono essere double o single, il segnale di uscita. è dello stesso
tipo dell'ingresso.
, syatem ~
S-Functlon
1 ay,temD~
S-Functlon Bullder
j
17.4 Math
r
G Aba
Salve z I>
' f(z) f(z)=O
AlgebralcConstraint
bltwise
: ANO 1>
'FFFF'
Bitwise
Logica! Operator
18}
Combinatoria!
Logie
Combinatorial Logie: implementa un circuito logico tramite una tabella della verità. (truth
table) e consente di simulare il comportamento di un PLA (pogrammable logie array }.
Note: Si noti che nel campo para.metri va inserita esclusivamente la truth t able, Simulink assume
che gli ingressi siano opportunamente ordinati, Un semplice esempio può a.iuta.re a. comprendere:
se si vuole simulare il comportamento della seguente rete logica (sommatore con riporto)
è sufficiente digitare
\
(O O; 1 O; 1 O; O 1)
Ogni colonna rappresenta un'uscita il cui valore è determinato dal valore degli ingresc3i. Ogni
valore per l'ingresso diverso da O viene interpretato come l logico.
Caratteristiche.: I;
Direct Feedthrough: Si.
Sample Time: eredita. la caratteristica del segnale di ingresso.
Data Type: opera con segnali di tipo boolean (se l'opzione BooltUJnlogie signals è ott il blocco
opera anche con segnali di tipo double).
Scalar Expansion: No.
.f7iuil>
~
Complex to
Magnitude-Angle
Complex to Magnitude~Angle: Calcola il valore del modulo e/o della fase di un segnale
complesso.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: t!redita la caratteristica. del segnale di ingresso.
Data Type: opera con segnali complessi di tipo double.
Multi-variabile: opera con segnali 1-0 e 2-D.
Scalar Expansìon: No.
306 CAPITOLO 17. LIBRERIE DEI BLOCCHI
_rRe(u)
\... lm(u)
Complaxto
Real-lmag
o
Dot Produot
Gain
8
Logica!
Operator
Logical Operator: L'uscita del blocco è TRUE (valore 1) se gli ingressi soddisfa.no la relazione
specificata., altrimenti l'uscita. è FALSE (valore O). Le relazioni imple mentate sono: ANO, OR,
NOR, NANO, XOR, NOT .
Note: Ogni valore diverso da Oviene interpretato come l logico. Se il blocco ha. un unico ingresso
di tipo multi•\'aria.bile l'operazione li eseguita fra le component i del segnale di ingresso.
CaratteriBtiche:
Dlrect Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segna.li di tipo boolean (se l'opzi one Boolean logie signala è off il bloc co
opera anche con segnali di tipo double).
Scalar Expansion: No.
~
~
Magnituda-Angla
to Complex
0
I
Math
Function
G
MlnMax
MinMax: Restituisce com e usci ta. il valore minimo o massimo fra quelli assunti da.gli ingressi.
Note: Nel caso il blocco abbia. un solo ingresso di tipo multi-variabile, l'uscita è pari alla com-
ponenti minima o massima del segna.le.
Caratteristiche:
Oirect Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: accetta segnali di ingresso reali di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.
Zero Crossìng: determina i valori minimi e massimi.
OD
Product
Product:
+
Product1
o Produci
Matrix
{TI}
Product2
tipo, nel caso di moltiplicazione di tipo matriciale i segnali devono essere numeri reali o complessi
di tipo double o single.
Multi-variabile: opera con segnali 1-D e 2-D.
F-=J
~
Aeal-lmag to
Complex
Real-Imag to Complex: Fornisce in uscita un numero complesso di cui se ne specifica la. parte
reale e quella. immaginaria.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data. Type: opera con segnali complessi di qualunque tipo.
Multi-variabile: opera. con segnali 1-D e 2-D.
Scalar Expansion: No.
G
Relational
Operator
Relational Operator: L'uscita del blocco è TRUE (valore 1) se gli ingressi soddisfano la
relazione specificata, altrimenti l'uscita è FALSE (valore O). Le relazioni implementate sono:
eguale a •a, diverso da •, minore di <, minore o uguale a <=-,maggiore o uguale a >=, maggiore
di>.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso .
Data. Type: i segna.li di ingresso possono essere valori reali o complessi di qualunque tipo, l'uscita
è un segnale di tipo boolean (se l'opzione Boolean logie aignals è ott l'uscita è un segnale di tipo
double),
Zero Croesing: determina gli istanti in coi cambia la condizione.
B
Rounding
Function
m
Slgn
0
Sllder
Galn
G
Trigonometric
Functlon
17.5 Nonlinear
Contiene le più comuni non-linearità.
@
Backlash
Backlash: Gioco meccanico, simula il comportament o di due ruote dentate. L'uscita rimane
costante fintanto che l'ingresso permane nell'interstizio fra. i due denti consecu~ivi (cioè fintato
che li nella 11Dea.d Zone"). Qunado l'lngreaeo arriva Rgll e11tremi di questo dea<!110ne(eltue.alono
di engo.gement)l'ueclt& h pari all'Ingrosso meno la semi ~mplena della dlle.dzono,
OarolteM1Hch9:
t)lrect FeedLhrough: SI.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segnali reali di tipo double.
Multi-variabile: opera con segna.li 1-D e 2-D.
Zero Crossing: individua gli istanti di engagement.
f
m
Coulomb &
ViscousFrlction
Columb &l.Viscous Frictlon: consente di simulare eia l'attrito di primo distacco che queUo
viscoso,
.I
;. • t
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita lo. cara.ttarlstlca del segnale di ingresso.
Data. Type: opera. con segna.li rea.li di tipo double.
Multi~va.ria.bile: opera con segnali 1-D e 2-D.
Zero Crossing: individua gli istanti di passaggio per lo zero.
m
DeadZone
Dead Zone: L'uscita. è nulla. per tutti i valori dell'ingresso contenuti nella Dea.d Zone (zona
morta).
Note: È possibile specifica.re se durante l'operazione di linearizza.zione il blocco deve essere
approssimato come un guadagno.
Caratteristiche:
Dlrect Feedthrough: Si.
Sa.mple Time: eredita la caratteristica del segnale di lngreseo,
Data Type: opera con segnali reali di qualunque tlpo.
Multi-variabile: opera con segnali 1-D e 2-D.
Zero Crossing: individua gli istanti di entrata ed uscita. da.Ila dead zone.
~>
)-0
Manual Switch
Manual Switch: l'utente, commutando la porta di ingresso, può specificare quale degli ingressi
fornire in uscita.
Note: La commutazione dello switch si ottiene con un clic sull'icona. del blocco in corrispondenza
della porta di ingresso non attiva. Si noti che facendo doppio clic sull'icona non appare la. finestra
dei parametri del blocco.
Caratteristiche:
Dlrect Feedthrough: Si.
Sample 'rime: eredita la caratteristico. del segna.ledi Ingresso.
De.ta Type: opera con segna.li di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.
Multiport
Switch
lezione della porta. In funzione del valore (troncato ad intero) assunto da questo il blocca
individua la porta. a cui connettere l'uscita.
Caratteristsche:
Direct Feedthrough: S1.
Sample Time: eredita la caratteristica del segnale di Ingresso.
Dàta. Type: la prima porta {porta dell'indice) accetta. segnali rea.lì di qualunque tipo, mentre le
altre porte accettano segnali reali e complessidi qualunque tipo.
Multi-varia.bile: opera con segna.li 1-D e 2-D.
N. di Stati: O.
Quantizer
RateLimitar
Rate Limitar: Limita l'ampiezza. della derivata prima del segnale che lo attraversa.
Note: Simullnk, calcolato il rapporto incrementale fra l'ingresso al blocco all'istante attuale e
l'uscita al passo precedente
6
= u(i) - y(i - 1)
6t
pone l'uscita a.
y(i - 1) + R • ~t se
y(i) = u(i) se
{
y(i - l} - F • 6t se
dove R è il rising slew rate e F è il falling slew rate. Questo blocco permette di modellare
fenomeni di saturazioni sulla velocità. di variazione dei segnali.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: è intrinsecamente tempo continuo.
Data. Type: opera con segnali di tipo doublo.
Multi-variabile: opera con segnali 1-D e 2-D.
314 CAPITOLO 17. LIBRERIE DEI BLOCCHI
...,.
m
Relay
m
Saturation
.:::;/:
I
li!''!
·.c~1t.
1
~•.!.iJ"
~t <'•.
E3
• "' I
Switch
Switch: L'uscita è pari al primo ingresso se il segnale di comando (secondo ingresso) è inferiore
ad un valore di soglia, altrimenti è pari al terzo ingresso,
Corotteri,tiche:
Direct Feeùthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingre860.
Data Type: il segnale di comando deve essere dì tipo double o boolena; gli altri segnali possono
essere reali o compleSBi di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.
Zero Cr088ing: individua gli istanti in cui avviene la commuLazione.
17.6. SIGNAL & SYSTEMS 315
U1 -> Y
U2 -> Y(E) y
Assignment
I
Bus Creator: combina più segnali di ingresso in un unico Bus signal.
Note: La selezione dei segnali avviene tramite la maschera che compare con un doppio clic
sull'icona del blocco.
Carotteri,tiche:
Vlrtual Block: Si.
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: il segnale di uscita è un 8t1s Signal, i segnali di ingresso possono essere reali o
complessi di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.
I
Bus Selector: seleziona uno o più segnali da un Bus signal .
Note: La selezione dei segnali avviene tramite la maschera che compare con un doppio clic
sull'icona del blocco. È possibile specifica.re se il blocco deve avere un'uoica usci~a o uscite
distinte per i vari segnali seleziona.ti.
Carotteriatiche:
Virtua.l Block: Si.
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: il segnale di ingresso deve essere un Bus Signa/ composto da segna.li renli o complessi
di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.
316 CAPITOLO 17. LIBRERIE DEI BLOCCHI
Data Store
Memory
Data Store Memory1 consentedi specificare un'ara& di memoria utillaublle per i blocchi Data
Stare Reade Data Stare Write.
Note: La. posizione del blocco identifica. anche l'ambito di visibilità della variabile che identifica
la regione di memoria.
•·!·
.t:}~
,.. .r.
·fo~
~
,..~)tl
-4 • .1I
.•.r:'t
l'.
, ,:
•. .I
• I t~
Data Stare "·
1.qi:/' •
Read .-.,:3
,,t f
..1, '-:-
~;"t~
":~ .h .P,
Data Store Read1 legge I dati da un 'area di memoria specificata, , ,j\\ f
1 ;,4ck"~
·q
,.,.,.
?,,
-.~:·-1.
I ,, \ ~
auto
(???)
Data Type Converslon
Data Type Converalon1 converte il tipo di da.to In ingresso in un tipo specificabile dall'utente.
Note: L'opzione auto fa.si che l'ingress o sia convertito nel tipo di dato richiesto dal blocco a cui
il Data Type Con11ersionè connesso .
Caratteristiche:
Virtual Block: Si.
Direct Feedthrough: Si.
,Sample Time: eredita la caratteristica de l segnale di ingresso .
Data Type: opera con segna.li di qualunque tipo.
Multi-varia.bile : opera con segnali 1-D e 2-D.
I
I
Demux: Separa un ingresso multi-variabile nel suoi costituenti.
Note: È poaalblle specificare la cardlnnlltà riel vari segnalidi uacita (per maggiori Informa.ioni
si veda Il Paragrafo 13.3 a pag . 249).
Caratteristiche:
Virtual Block: Si.
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segna.le di ingresso.
Data Type: opera con segna.li di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2•0 ,
0> I
From
~
I
f() I
Funclion-Call .
Generato,
I
g Goto
G g
Goto Goto
)
II
tocai global scoped
Nc,te: È possibile definire l'ambito di visibilità, cioè da qua.le parte dello schema ci si può con-
nettere al Goto tramite un blocco From. Nel caso in cui si utilizzi l'opzione local il nome della.
variabile compare racchiusa fra parentesi quadre, con l'opzione acopad risulterl racchiueo fra
parentesi graffe, mentre con global il nome compare senza niente (per maggiori informazioni si
veda Paragrafo 14.2 a pag. 258).
Caratteristiche:
Virtual Block: Si.
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica. del segnale di ingresso.
Data. 'I'ype: opera con segna.li di qualunque tipo.
Multi-variabile: opera con segna.li 1-D e 2-D.
G
Goto Tag
Visibìlity
Goto 'l'ag Vlelblllty: Definisce l'ambito di visibilità di un GoCoin cui si è utilizzata l'opzione
11eoped.
Caratteristiche:
Virtua.l Block: Si.
Direct Feedthrough: Si .
Sa.mple Time: eredita la. caratteristica del segnale di ingresso.
t Data. Type: opera con segnali dì qualunque tipo.
Multi -variabile: opera. con segna.li l-D e 2-D.
ì
,• I
Hit Crossing: consente di attivare l'algoritmo di zero crossing detection al verificarsi di una
determinata. condizione. . ·
Note: lo presenza di un algoritmo di integrazione a passo variabile, Simulìnk impone che la
soluzione sia valutata immediatamente prima e subito dopo l'istante in cui il segnale di ingresso
abbia. raggiunto il valore specificato quale soglia. (e con la. giusta. direzione). Quando la. condizione
ti attiva l'uscite.del Hit CroaBsngè pari ad 1.
Carotteriatiche:
Direct FeedLhrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data. Type: opera con segnali in ingre860 di qualunque tipo, l'uscita è un segnale di tipo boolean
(se l'opzione Boolean Logie Signal è ott l'uscita è un double).
Multi-variabile: opera con segnali 1-D e 2-D.
Zero crosslng: determina. il raggiungimento del valore della soglia..
'!
17.6. SIGNAL & SYSTEMS 319
d IC
IC : consente di specificare il valore che un segnale assume nell 'istnote inizial e dello. simulai.ione
(lo Start time).
Caratteri6tiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segna.li di qualunque tipo.
Multi-varie.bile: opera con segna.li 1-D e 2-D.
Horiz Cat
~□~
Matrlx
Concatenation
B Merge
Merge: consente cli creare, a partire da. più segnali , un uni<·o segna.le composto, istante per
istante, da quella componente del segnale di ingreseo che è stai a aggiornata più recentemente .
Note: È utile in presenza di sistema con esecuzione condizionata. In preaenza di più ingress i
care.Uerlzzatl dal medesimo Sample Time viene utilizzato come uscite. Il valore do! blocco con
priorità più alta.
Carotteriatiche:
Virtual Block: Si.
Dìrect Feedthrough: Si.
Samp le Time: eredita la caratteristica del segnale di ingresso .
Data Type: opera con segnali di qualunque tipo.
Multi-variabile: opern con segnali 1-D e 2-D.
320 CAPITOLO 17. LIBRERIE DEI BLOCCHI
) signal1
I>
, signal2
t>
t>
: W:0, Ts:(0 O),C:0, 0:0
t>
t>
Probe
Probe: fornisce alcune informazioni sul segnale: cardinalità. del segnale, il suo Sample Time, se
si tratta o meno di un segnale complesso e le dimensioni del segnale.
Note: 1 valori vengono mostrati anche all'interno dell'icona del blocco.
Camtteristiche: -
Dlrect Feedthrough: SI.
Se.mple Time: eredlta la. caratteristica del segna.le di ingresso.
Data Type: opera coo eegnaJl di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.
..
8
Reshape
'fl
..,"
! ~ _ I
f
.,
Se lector
1...
__ _...,r
1_nh_e_ri_t
Signal Specification
l
fBWidth
\.
t
t:r.,::
.~:-
~~;.
17.7 Sinks
Contiene I blocchi in grado di visualizzo.re e memorizzare i segnali.
1......
1 __ __,O!
Dlsplay
..
B
Floating
Scope
o Out1
Outport: Definisce una porta di output per un suttosietema e, più in generale, servea specificare
le variabili di uscita di uno schema.
Note: Ogni Outport in un sottosistema è identificata da un suo numero univoco,
Carotteri.,tiche:
Virtual Block: Si.
Sample Time: è intrinsecamente tempo continuo.
Data Type: opera con segnali di qualunque tipo.
Mulli-variabile: opera con segnali l·D e 2-D.
..
I
B
Scope
ì Scope: Consente dì visualizzare i segna.li durante la simulazione con un aspetto grafico clie
ricorda un oscllloscoplo. :>
17.7. SINKS 323
Note: Ai parametri del blocco si accede direttamente tramite la toolbar present.e nella finestra
dello Scope. Per maggiori informazioni si veda. il Paragrafo 11.5 a. pag. 199.
I.
't
Caratteristiche:
Data Type: opera con segnali reali di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-0.
e
Stop Simulation
Stop Slmulatlon: Interrompe la simulazione appena almeno una. delle componenti del segnale
di ingreeaodiviene diverso. da iero.
Caratteristiche:
Data Type: opera con segnali di qualunque tipo.
Multi-variabile: opera con segnali 1-0 e 2-D.
@
Terminator
, untitled.mat
To File
To File: Registra.I dati in un file, essi vengono gestiti come una matrice la cui prima colonna ()
il vettore dei tempi e le successive le variabili di uscita.
Caratteristiche:
Virtual Block: Si.
Sample Time: è intrinsecamente tempo continuo.
Data Type: opera con segnali reali di tipo double.
Multi-variabile: opera con segnali 1-0 e 2-D.
G
To Workspace
struttura (con o senza I& base dei tempi). Per maggiori informazioni si ved& il Paragrafo 11.5 a
pag. 199.
Caratteristiche:
Data Type: opera con segnali di qualunque tipo. ..'·.
Multi-variabile: opera con segnali 1-D e 2-D.
e]
XY Graph
XY Graph: consente dì visualizzare il grafico della variabile Y (secondo ingresso} in funzione
della variabile X (primo ingresso).
Note: Il blocco utilizza una finestra grafica MATLAB, di conseguenza questo aumenta l'onere
computazionale.
Carotteristicl&e:
Data Type: opera con segnali reali di tipo double.
Multi-variabile: opera con segnali scalari.
17.8 Sources
Contiene i blocchi in grado di produrre l segnali di forzamento ai sistemi.
~
Band-Umited
Whlte Nolse
Band-Limlted White Noise: Genera una sequenza di rumore bianco a banda limitata.
Caratteristiche:
Sa.mple Time: è intrinsecamente tempo discreto.
Data Type: opera con segnali reali dì tipo double.
Multi-variabile: opera con segnali 1-D e 2-D.
[tr
Chirp Signal
Chirp Signa!: Genera un segnale la cui frequenza si incrementa in modo linearmente con il
tempo.
Caratteristiche:
$ampie Time: è intrinsecamente tempo continuo .
Data Type: opera con segna.lì reali dì tipo double.
Multi-variabile: opera con segnali 1-D e 2-D. .·'
17.8. SOURCES 325 l
(9>
Clock
t
Clock: rende accessibile il tempo corrente durante una simula2ione.
Note: Il Clock non è un generatore di tempo, ma fornisce una. vista sui valori del tempo che
l'algoritmo di integrazione definisce durante la simulazione,
OamtterlBtiche:
Sa.mple Time : è Intrinsecamente tempo continuo.
Data Type: opera con segnali reali di tipo double .
Multi-variabile: opera con segnali scalari.
D
Constant
I
Constant: genera un valore costante.
Caratteristiche:
Sample Time: eredita le caratteristiche dal blocco a cui è con nesso.
Data Type: è possibile specificare all'interno del blocco Il tipo del segnale di uscita,
Multi-variabile: opera con segnali l·D e 2-D.
l
r
I
12:34
Digitai Clock
Digitai Clock: rende accessibile il tempo corrente durante una llimulazione ad intervalli di
tempo specificato.
Note: Come il Clock, questo non è un vero e proprio generatore di tempo, ma fornisce una. vista
sui valori del tempo che l'algoritmo di integrazione definisce durante la simulazione.
Caratteristiche:
$ampie Time: è intrinsecamente tempo dillcreto. \
Data Type: opera con segnali reali di tipo double.
Multi-variabile: opera con segnali scalari.
__ s,_m_,n_
.... r
From
Workspace
From Workspace: consente di utilizzare quale ingresso un segnale definito nel workspace di
MATLAB .
Note: È possibile far riferimento sia a variabili in forma matriciali che a tipi strutture. Per
maggiori infor mazioni ai veda il Paragrafo Sources a pag. 203.
Caratteristiche:
Sample Time: definito quale parametro.
Data Type: opera con segnali reali o complessi di qualunque tipo (nel caso in cui si utilizzi la
t
'
I
326 CAPITOLO 17. LIBRERIE DEI BLOCCHI
untttled.mat r
From File
)
0
Ground
l
I
Ground: consente di evita.re i messaggi di warning in presenza. di linee non connesse.
.. :, 'F.,..
.-~'"":
!"" ,\
,·:-.!'!
~•. l,:,tl
,,....
<--~-
CD>
ln1
..•
Inport: consente di definire le porte di ingresso di un sottosistema e, più in generale, individuare 5<
gli ingressi di uno schema.. ~r.:,:-,.
r.- -
Caratteristiche: . .._,\
q.}i~
....
~ ...1
..., "-"~"
[n[r
Pulse
f :• :
,,•.
:!\
Generator !f~
.. ,
ì
17.8. SOURCES 327
[2}
Ramp
Random
Number
Random Number: genera una. sequenza di numeri da.euali con distribuzione gauasia.na (con
media. e varianza specificabili).
Coratteriatiche:
Sample Time: definito quale parametro.
Data Type: opera con segnali reali di tipo double.
Mult i-va.ria.bile: opera con segnali 1-0 e 2-0 .
Repeating
Sequence
fifcip□l
LJ
Signsl
Generator
Signa! Generatori genera un segnale di uscita la cui forma d'onda. può e88ere scelta fra le
seguenti: seno, onda quadra, dento di sega, rumore random con dle~rlbuzloneuniforme,
Carutteristiche:
Sample Time: definito quale parametro.
lj
328 CAPITOLO 17. LIBRERIE DEI BLOCCHI
ffi
Slne Wave
B
Sine Wave
con bias
rn
Step
Uniform Random
Number
Uniform Random Number: genera una sequenza di numeri casuali con distribuzione uni~
forme .
Ooratteriatiche: ..,
Samp le Time : definit o quale parametro.
Data Type: opera con segnali rea.li di tipo double.
Multi-variabile: opera con segnali 1-D e 2-D.
17.9 Subsystems
Questa libreria più che dei blocchi elementari contiene dei template da utilizzare per la costruzione
di sottosietemi. La cui esecuzione è condizionata in vario modo dal verificarsi di specificati eventi.
Per l'utilizzo di questi iemplate è sufficiente copiare il relativo blocco all'interno dello schema e~
una volta. espanso il sottosistema, andare ad introdurre al posto del collegamento fra la Jnport e
la. Outport lo schema di interesse potendo aggiungere, qualora ce ne fosse la necessità, ulteriori
porte di ingresso e/o uscita. ::!
17.9. SUBSYSTRMS 329
In questo paragrafo verranno evidenziati i blocchi elementari che possono essere utilizzati
dall'utente per la costruzione autonoma di sottosistema.
l
CJ Configurable
Subsystem
Conftgurable Subsyatem: questo elemento consente di gestire in modo efficiente quelle situ-
azioni in cui si devono provare, all'interno di uno schema, più modelli di un medesimo compo•
nente.
\.
[fil
V'
f1 I.
Enable
Enabled
Subsystem
H
[!]
Trigger
Triggered
Subsystem
Trigger: il sottosistema è eseguito, una sola volta, ogni qual volta è verificata la condizione di
trigger.
Note: li sottosistema (che deve essere atomico) può attivarsi sul fronte di salita e/o di disceso.del
segna.le connesso con la porta di trigger. È anche possibile imporre che l'attiva2ione del blocco
sia legata ad una S-function.
Caratteristiche:
Data Type: opera con segnali dì qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2- D.
330 CAPITOLO 17. LIBRERIE DEI BLOCCHI
For
> far { ... }
lteralor
For llerator
For lterat or
Subsystem
For Iterator1 il sottosistema. è eseguito un numer o specificato di volte ad ogni passo di inte-
grazione.
Note: ll blocco deve esaere poeto all'interno di un sottosistema. atomico.
Carotteri,,iche:
De.ta Type: accetta quali segna.li di ingreBBo(numero di iterazioni) segnali rea.li di qualunque Lipo
. . che però vengono troncati a valori interi. Il tipo del valore corrente del conto.tore è specificabile
dall'interno del blocco.
Multi-variabile: opera. con segnali scalari.
il(u1 > O)
u1 elseif(u1<0)
else
lf
tr: specifica, sulla b88e dl une. o più condizioni, quo.le fra diversi sottosistemi deve essere eseguito.
Note: Possono essere utilizzati un numero arbitrario di segnali di ingresso (ognuno caratterizzato
da una propria porta ed indicati all'interno delle espressione come ul, u2, ecc.) ed un numero
arbitrario di condizioni ELSEIF (inserendo le stesse nel relativo campo separate da una virgola).
I sottosistemi attivati dalle condizioni dello lf devono essere di tipo atomico ed a.vere a.I loro
Interno il blocco Action Port a.Ila quale andrà connessa la relativa uscita. del blocco IJ. ·
Caratteristiche:
Da.LaType: opera con segnali di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.
-V
Action
G ActionPort
lf Action • I
Subsystem
, .
case ( 1 ]: >
u1
default: >
Switch Case
Switch Case: specifica, sulla base del valore assunto dall'ingresso, quale fra i diversi sottosistemi
connessi deve essere attivato.
Note: I sottosistemi attivati dalle condizioni dello Switch Case devono essere di tipo atomico ed
avere al loro interno il blocco Action Port alla quale andrà connessa la relativa uscita del blocco
Switch Case.
Caratteristiche:
Data Type: opera con segnali reali di qualunque tipo (eccettuato boolea.n) che, però, vengono
troncati a valori interi.
Multi-variabile: opera con segna li scalari.
cond whlle {
whlle ( ... )
IC
While lterator While lterator
Subsystem
In questa. libreria sono raccolti alcuni blocchi specialistici. Stante la loro elevata specificità si
preferisce limitarsi ad una sintetica presentazione di alcuni di tali blocchi, rimandando all'help in
linea per maggiori delucidazioni (anche se, purtroppo, non sempre la documentazione è esaustiva).
I blocchi descritti sono quelli presenti in Figura 17.1.
Alcuni di essi richiedono per poter funzionare la contemporanea presenza di toolbox quali
Signal Processing, Control, Robust Contro/.
Tutti i blocchi presenti in Eztras sono blocchi mask, è pertanto possibile effettuare su di essi
un'operazione di un-mask per poterli meglio analizzare ed eventualmente modificare.
iI
17.10.1 Additional Discrete
Discrete Tronsfer Pcn {with inìtfol output) implementa una funzione di trasferimento
qua.le è possibile specificare il valore di uscita nell'istante di start time.
per la !i I
1
I \
Discrete Transfer Fcn {with initiCJIstate) implementa una funzione di trasfcrìmcnto per la quale ! :
è possibile specificare i valori delle variabili di stato nell'istante di start time. I '·
. \
I I
Diacrete Zero-Polo(with inittal output) lmpiemonta una funzione di traaferimento per la quale è
poBSiblle specificare il valore di uscita nell'Istante di start time.
332 CAPITOLO 17. LIBRERIE DEI BLOCCHI
~~
z(z-0.5) 8 lliK}
PIO Controllar Auto Spectrum Clock
Discrete
Zero-Pote Correlator Anelyzer lR IO~
0 o
~
(wlthlnillal states)
8
PIO Controllar Avaraglng
CLK S-A
Fllp-Flop
z(z-0.5) (wllh Approxlmate PowerSpectral ICLR IO
Discrete
Zero-Pote
(wllhlnlllal output1)
Deri11ati11e)
x' • Ax+ Su
y ■ Cx+D
Dens,ty
~
O Fllp-Flop
[:]
L~.r State-Space
(wlth fnltial ou1pu1s)
Averaging
Spectrum
AnaJyzer
o a Switchad
dar111atl11e
lor
llnaarizalion
w
Discrete IO
Transler Fcn
i@ &ì
,.~.. ~
(wlthlntllat states) o Letch
~
Transfer Fcn : J Cartaalento Polar to
Cross Pelar Cartaslan
(wllh lnlllel outputs)
Corretator
88
CLK
Discrete
Transfer Fcn
(with lnltial outputs) i] :K
Degreesto Aadians
TransfarFcn Floating Bar Plot J-K
(with inillal slates) Fllp-Flop Aadians lo Oegrees
(s-1)
t>
l!:!2.t>fli51QQ
~~
8(8+1)
Zero-Pola a(s+1) 1=J t::J t.::.J
(wlthlnltlal output&) PowerSpectral Celsius to Fahrenheit Certeslen
to Spherlcalto
Zero- Pole Oensity
(wlth inltlal state&) Fahrenheit lo Celsius Spherical Carteslen
Discrete Zero-Polo (with initial !tate) implementa. una funzione di trasferimento per la. quale è
possibile specificare i valori delle varia.bili di stato nell'istante di start time.
PlD Controller (with Approximated Derivative) implementa. un controllore PID in cui la funzione
di derivazione è approssimata con una funzione di trasferimento del primo ordine.
Transfer Fcn (with ìnitial outputs) rappresentazione di un sistema. linea.re tra.mite la sua funzione
di trasferimento con la possibiltà di specificare il valore dell'uscita nell'istante di start time.
Transfer Fcn (with initial states) rappresentazione di un sistema lineare tramite la sua funzione
di trasferimento con la possibiltà di specificare il valore dello stato nell'istante di start time.
17.10. SIMULINK EXTRAS 333
Zero-Pote (with initial outputs) funzione di trasferimento di un sistema lineare nella forrnulazione
in termini di zeri e poli con la possiblltà di specificare il valore dell 1uscita. nell'istan\~ di ,tart
time.
I
Zero-Pale {with initial states) funzione di trasferimento di un sistema. lineare nella formulazione
in termini di zeri e poli con la possibiltà di specificare il valore dello stato nell'istante di start
tìme. 1
17.10.3 Additional Sinks
Auto Correlator visualizza l'auto-correlazione di un segnaleusando una finestra grafica MAT•
LAB. li blocco neceaalta del Signal Proceuing Too/bo:r.
Averanging Power Spectral Denaity visualizza. la desnltà. spettro.le di potenza media di un segnale
usando una finestra grafica MATLAB.
Cros, Correiator visualizza la cross-correlaiione fra due segnali usando una finestra grafica
MATLAB. Il blocco necessita del Signal Processing Toolbo,;.
Floating Bar Plot visualizza, in una finestra grafica MATLAB, le varie componenti del segnale
selezionato tramite un diagramma a barre. Nel caso in cui si selezionino più segnali (usando il
tasto SHIFT) viene utilizzato un asse diverso per ciascun segnale.
1
~ Power Spectrai Density visualizza la. desnità spettrale di potenza di un segnale usa.ndo una
finestra grafica. MATLAB.
i
1 ••
Spectrum Analyier visualizza la risposta armonica di un sistema calcolata a. partire dagli spettri
del segnale di ingresso e da quello relativo al segnale di uscita. Utilizza. una finestra granca
MATLAB.
I
17.10.4 Flip Flops
Clock genera un'onda quadra con periodo specificabile e va.lori pari a 1 e O (l'uscita è pari ad 1
nel primo semi periodo).
Q D new Q
o o o
o 1 1
l o 1
1 1 o
dove new Q rappresenta l'uscita del Flip-Flop sul successivo fronte di salita del clock.
Q D new Q
o o o
o 1 1
1 o 1
1 l 1
334 CAPITOLO 17. LIBRERIE DEI BLOCCHI
I
(
dove new Q rappresenta l'uscita del Flip-Flop sul successivo fronte di salila del clock.
l
JJ( Flip-Flop implementa la seguente tabella di verità
Q J K new Q
o o o o
o o o 1
o 1 o 1
o l l 1
1 o o 1
l o 1 o
.1 l o 1
l 1 l o
dove new Q rappresenta l'uscita del Flip-Flop sul successivo fronte di discesa del clock.
s R Q
1 o 1
o 1 o
1 l o
.\
dove Q rappresenta l'uscita del Flip-Flop . Nel caso non mostrato in tabella l'us cita non commut~
di stato.
'\
17.10.5 Linearization . ;I
Switched derivative /or tineari.iation in funzione del parametro scelto Il blocco ca.lcola la deriv~
ta numerica del segnale di ingresso ovvero una sua approseimazione tramite una funzione-di
trasferimento del primo ordine (utile durante le operazioni di linearizzazione) . .
Switcl1ed transport delay /or linearization è il blocco 'Ihmsport Delay dove è stato settato a 2
l'ordine di approseirnazione di PADE.
ì
17.10.6 Transformations
Cartesian to Polar converte una quantità espressa in coordinate cartesiane in coordinate pola.ri.
Cartesian LoSpherical converte una quantità. espressa in coordinate cartesiane (3D) io coordinate
sferiche.
Pahrenheilto Celafouaconverte una temperatura espressa in gradi Fahr enheit In gradi centigradi.
,~ , 1~
Potar Lo Cartesian converte una. quautit~ espressa in coordinate polari in coordinate cartesiane. ·-·~·:! .,• . ·~
-➔ ·I;'.
• , ~•·t
Radius to Degrees Potar to Cartesian converte la misura di un angolo espressa in radianti in
gradi.
Parte III
Un sistema Lineare Tempo Invariante (LTI) può essere rappresentato, più o meno indifferente -
mente, in varie forme : tramite un insieme di equazioni differenziali, nello spazio di stato nel-
la cosiddetta forma ingresso-stato-uscita, per mezzo di funzioni razionali fratte utilizzando la.
funzione (o matrice) di trasferimento, o ancora in termini di zeri e poli o di residui e poli.
In questo capitolo saranno esaminati in dettaglio i comandi e quindi le relativa potenzialità
del Contrai Syetem Toolbox (d'ora in poi sinteticamente denominato CONTROL) rigu&rdo a.Ila
l
ra ppresentazione del sistemi LTI tempo-continuo nel dominio di La.piace, e quindi ala tramite
fu nzione di trasferimento che mediante una realizzazione in termini di zeri e poli. Il capitolo aarl
principalmente dedicato a.Ila. rappresentazione dei sistemi Single Input Single Output (SISO),
riportando poi gli aspetti relativi alla rappresentazione dei sistemi Multi Input Multi Output
I
{MIMO) nell'ultimo paragrafo .
Per l'utilizio de l comando tt nel caso di siatemi tempo.discreto ai veda Il Paragrafo 24.1.
Nella parte dedicata a SIMULINI< abbiamo visto che il modo più diretto per descrivere un
sistema dinamico è quello di rappreeen~arlo tramite un insieme di equazioni differenziali. Ad
esempio, consideriamo un sistema meccanico in cui ad un corpo di massa m viene applicata un
forza F(t). La conseguente accelerazione del)a massa avri\ la stessa direzione della. forza ed una
intensità legata alla forza dalla legge di Newton :
F(t) = ma(t)
dove a(t) è l'accelerazione del corpo. Volendo determinare la posizione p(t) de lla massa bisogna.
valutare come l'accelerazione è legata alla velocità u{t) e quest'ultima alla posizione:
338 CAPITOLO 18. !vIODELLINEL DO!vIINIODI LAPLACE
2
d
a(t) = -v(t} = -d (d-p(t) ) = -p(t)
d
dt dt dt 2 dt
Sostituendo quest'ultima relazione nella precedente si ottiene:
P(.s) = C(p(t)} = 1 00
p(t)e-•tdt
Y(.f} = W(8)U(s)
Ad esempio, applicando la trasformata di Laplace all'equazione (18.1), nell'ipotesi di con-
dizioni iniziali nulle si ottiene la. funzione di tro.sferlmen\o
1
G(s) - P(s) - - - (18.2)
- F(s) - m8 2
Assegnare in MATLAB una. funzione di tra.eferimento è immediato, essendo per il caso SISO
la 0(3) costituita da. un rapporto di polinomi, tiplce.men\e con il numeratore di grado minore
o uguale a quello del denominatore (a seconda che il sistema. sia stretta.mente proprio o proprio
l rispettivamente). Bo.sterà quindi 8B8egnare due vettori costituiti da.I coefficienti dei polinomi
nurnoratoree denominatore, ordinati secondo le potenze decrescenti della variabile compleesa
} a. 1 Ad esempio, la funslot1e di trasferimento (18.2), MBUmendo I&m8B8a unita.ria, può essere
tl88egnata mediante le istruzioni
TranahÌ. ; :function:
1
D'ora in poi all'oggetto fuma sa.rà associata la rappresenta.zione del sistema meccanico in
termini di funzione di trasferimento {tf sta appunto per tran8/er /unction).
Spe88osi rende necessario potere modificare solo alcuni coefficienti del numeratore o denom-
inatore di una funzione di trasforirnento. Considerando ancora. Il sistema meccanico appena pre•
sentato, supponiamo, ad esempio, di volere ottenere la. funzione di traaferlmento corrispondente
a.clun valore doppio della ma&!a..Per fare cib basta digita.re
1Per la gestione in MATLAB dei polinomi si veda ii Capitolo 6.
18.1. FUNZIONI DI TRASFERINIENTO 339
Si noti che per accedere al polinomio numera.tore (denominat ore) dopo il nome dell'oggetto
che corrisponde alla funzione di trasferimento, bisogna utilizzare .num ( .den ) indipendent emente
da.glieventuali nomi da.ti in precedenza. a polinomi numera.tore e denomina tore (rispettivamente ,
sopra e sotto nell'esempio in esame). Inoltre, l'ac cesso ai polinomi numeratore e denominatore
è anche possibile utilizzando i suffissi .no .nu per il numerat ore e .do .de per il denominatore.
Si noti che digitando il comando
fum&.den
ans =
(lx3 double)
che ci dice che il deooaninatore è un a.rra.ydi tre celle di tipo double. Se voglio vedere il contenuto
di tale array dovrò dlglLe.re
1uma.den{1}
ane •
1 o o
(num,den]•tfda~a(f1111a);
che produce lo &tesso effetto delle istruzioni preeen~ate in p1·ecedenza. Più in generale , ae et
dealdera accedere al polinomio numera.toro o a quollo denonilnètore bMtel'à eeguh'ele regole
degli arra.y di celle ( vodl Pa.ragtaro 18.8),
Supponiamo ora di volere oLtenere la velocità della massa. a partire dalla. posizione. Per fare
ciò bisognerà ovviamente inserire un'azione di tipo derivativo ::1ull 'uecita. del sistema. (la. velocità.
è la derivata. della posizione). Si tratta quindi di modifica.re la. funzione di tr asferimento !Ullla ,
aggiungendo uno zero nell'origine:
fu.ma.nu.m•(1 O]
Tran1fer function:
s
È evidente che aarebbe opportuno effettuare una aemplifkazlone tra numeratore e denom-
inatore (cancellazione tra zeri e poli coincidenti), cioè oitene re quella che vn sotto il nome di
roppreaentaaioneminima del elatema. Per fa.re cib al può uaaru l1lsLl'uzione
!uma:minreal(tuma)
.I
i·I
!I
'
340 CAPITOLO 18. MODELLI NEL DOMINIO DI LAPLACE
Transfer function:
1
SI noti che, in generale 1 è sempre opportuno utilizzare l'istruzione minreal sulle funzioni di
tr8.9ferimento ottenute mediante l'uso dei comandi di CONTROL. Ciò in quanto, talvolta, tali
funzioni di trasferimento non sono in forma minima,
Per Jlutilizio del comando zpk per sistemi tempo-discreto si veda il Paragrafo 24.1.
La rappresentazione nel dominio della variabile complessa s in termini di zeri e poli si
può ricavare considerando le radici dei polinomi numeratore e denominatore della funzione di
trasferimento. Una generica funzione di trasferimento G(s) può sempre porsi nella forma:
(18.3}
Zero/pole/gain:
.;
1
~1W
jj ~/:t ~
·, ,
Nelle assegnazioni relative ai vettori zeri e poli bisogna fare attenzione a.isegni da utilizzare:
in tali vettori vanno poste le radici dei polinomi con il proprio segno e non i termini noti de~
singoli fattori al numeratore e denominatore della. funzione (18.3).
Per accedere ai diversi elementi della funzione di trasferimento !uma si possono utilizzare i
campi 1 ,z', '.p' e '.k'. Alternativamente si può impegare il comando zpkdata.
voglia determinare la rispoeta impulsiva. (o più in generale l'evoluzione forzata dell'uscite.) del
sistema.
Ipotizzando che non vi siano poli multipli, essendo la. funzione di trafserimento un rapporto
di polinomi, espandendo in fratti semplici si ottiene una espressione del tipo
Tale forma può essere definita tramite un vettore colonna poli contenente I poli del sistema,
un vettore colonna rea contenente i corrispondenti residui, ed un vettore riga k contenente 1
coefficienti del polinomio che caratterizza la eventuale parte
definito solo nel caso in cui il numero di zeri sia non inferiore
Nel caso vl siano poli multipli compariranno nella (18.4}
impropria del sistema (va.quindi
a quello dei poli),
termini del tipo
l
--
r, + -- Ti+l Ti+m-1
- + ... + -------
8 - Pi (s - pi) 2 (s - Pi)m
dove m rappresenta la molteplicità del polo Pi• La rappresentazione resterà. invariata fatta
eccezione per il fatto che nel vettore poli va, riportato m volte il polo Pi•
Per ottenere la rappresentazione in MATLAB di una funzione di trasferimento in termini di
residui e poli, il comando da utilzzare è:
0
~ (18.6)
l
Applicando la trasformata di Lapla.ce alle (18.5)-(18.6) è semplice ottenere lo schema a blocchi
riportato in Figura 18.2.
Assumendo per semplicità. tutti i parametri unitari ed utilizzando per ìl termine di ritardo
un'approssimazione di Padé al primo ordine, la funzione di trasferimento tra l'ingresso u1 ed il
livello x2 è esprimibile come r
r
•I
G( ) 1 - 0.5s 4 4 3
s = (1 + 0,Ss)(l + s)2 = s + 2 - ;;-i + (a+ 1)2
Senza dovere effettuare in modo analitico la scomposizione in fratti semplici, usando il
comando residue (vedi pag. 6.1) nella forma
sono assegnati i vettori contenenti rispettivamente i reeidui, i poli e la eventuale parte impro-
pria del sistema, a.vendo usato come argomenti del comando residue i polinomi numeratore e
denominatore della funzione di trasferimento in esame.
I
;!
'
342 CAPITOLO 18. MODELLI NEL DOMINIO DI LAPLACE
u,{t) fj u,(t- )
)~
l .,
RJ
I
Figura 18.1: Sistema idraulico con serbatoi.
~-- i-----..J
X, lù
l+1lùC1
Si noti che il comando MATLAB rHidua può anche essere usato per ottenere la. funzione di
trasferimento del sistema. a. partire dalla conoecenza dei residui, dei poli e della parte impropria
del sistema. In tal caso però l'oggetto corrispondente alla funzione di irasferiment o va comunque
)
successivamen~e definito con il comando tf.
! Si noti che per rappresentare il blocco di ritardo in Ingresso allo schema a blocchi di Flgu•
l ra. 18.2 abbiamo usalo una sua approsaimaiione di Pa.dé, cioè una rappresentazione del ritardo in
termin i di rapporto di polinomi. E ben noto che la presenza dei ritardi negli schemi di controllo
è abbastanza comune. In CONT ROL è possibile de finire i ritardi in ingresso e/o in uscila a. una
data funzione di trasferimento in maniera. più semplice che non utilizzando le approssimazioni di
Pa.dé. Per mostrare come, consideriamo ancora lo schema a blocchi in Figura 18.2 e, assumend o
tutti i parametri unita ri, la funzione di trasferimento tra u1(t - r} ed x2 può essere assegnata
col comando
Volendo ora esplicitare la presenza del ritardo in ingresso, aasegnando -r = l s, basterà digita.re
1
tau•1; set(s1rbatoi,'inputdelay ,tau)
\
da cui digitando ancora urbatoi comparirà la nuova rappresentazione
Transfer function:
1
j
18.4. PARAf,,tfETRI CARATTERISTICI DEI SISTEMI LTI 343
Per l'uso dei comandi damp e dcgain nel caso di sistemi tempo-discreto si veda anche il
Pa.ragrafo 24.4.
In questo paragrafo descriveremo brevemente come impì1?gare questi comandi nel caso di
sistemi tempo-continuo.
Wn = ✓ol +fj2 ( =- o
✓02 +p2
ciob, rispettivamente, come Il modulo e l'opposto del coseno della rase del numero compelaso
a+ j/J. Il polinomio monlco le cui re.dici eono o± j/J è esprimibile come
Consideriamo ora il sist ema meccanico riportato in Figura 18.3 dove J è l'inerzia, b il
coefficiente di attrito viscoso, k il coefficiente di elasticità, T la coppia e O la posizione angolare.
1/J//lll}//f/!/JJI
b
G{a) _ e(a) _
-T(s)-
l
Ja2 +b1+k
(18.7)
comparirà Il risultato
Il?\ ,.
0.4472
0.4472
·~fi~·
~ :••·~
:zit.a .. ..
·;:~~
0.0569 .:'~•
;.11_,
·..,; •
0.0669 __ ,_.
~-
~:
·,,.•1Y,{
;'
vn •
6 .. ~~~J~
6 :·t~~r ·
• -!J~,.
·.'-i{·
zita • ..-,,.-ì
• • ,.J •
0.8000 ·,~'t
:i-!}
0.8000 --:•.t..~
~ ~-"';-
~:~
.;·j./~.
Se l'argomento di damp è un vettore colonna , l'istruzione calcola le pulsazioni naturali ed i .., ,.:·;.-:,•
,
•t~••M~
coefficienti di smor2amento del polinom io che ha per radici gli elementi del vettore. Ad esempio, ..· ( ·-r..-,-
.,·•
l'istruzione
.. ~,...-
-~\i
(vn,zìta]adamp([-4-3j;-4+3j])
;1
e
'ì
:;-
~
18.5. INTERCONNESSIONE DEI SISTEMI 345
si ottiene come risultato 500 1 cioè il guadagno statico della funzione di trasferimento definita (il
valore del lim,-to G(s)), Quindi, essendo l'angolo Omisurato in radianti, per una coppia di l Nm
la massa avrà compiuto a regime 500 /( 21f) ~ 80 giri.
È interessante osservare che il comando dcgain fornisce come risultato O e Inf nel ca.~o che
la funzione di trasferimento considerata. presenti rispettivamente zeri o poli nell'origine.
ind = ( 6 2 6 3 1 4 )
che contiene gli Indici corrispondenti alla loro posizione originarla. nel vettore p, La seconde. uscita
ind pub eventualmente essere ome111Ja.Questa funzione può essere llnplegata per un qualela.sl
polinomio, ma risulta particolarmente utile per l'ordinamento degli autovalori di una matrice,
I
È interessante evidenziare la differenza tra il comando eaort ed il comando aort (vedi
pag. 4.3). Quest'ultimo infatti ordina gli elementi di un vettore non in modo decrescente per
parte reale, ma in modo crescente per modulo. Applicando ad esempio il comando eort(p)
usando il vettore precedentemente definito si ottiene come risultato il vettore
l
( -1-Sj -l+3j -3.4 -4j 4j 5 .2)
Per ordina.re gli elementi di un vettore in modo decrescente rispetto a) modulo è possibile
utilizzare il comando daort .
l R2
Gi(s) = 1 + aR1C1 G2 (s) = 1 + aR2C.2
La.funzione di trasferimento della serie di questi sistemi ottenuta rendendo l'ingre&ao del
secondo sistema uguale all'uscita del primo, è come ben noto G(.,) = G2{a)G1(a). Per ottenerne
una rappresentazione in MATLAB, una volta definiti I parametri R1, R2, G1 e G2, una prima
poBSibilit~è definire
I numgaR2; deng•conv((Rl•Cl 1],[R2•C2 1]);
g•tt(11wag,d.ng)
ma lo stesso risultato può ottenersi con i com&ndi
g1•tt(1,[R1•C1 1)); g2•zpk([);-1/(R2•C2);1/C2):
g-aerie ■ (g1,gl):
SI noti che il comando 11rie1 può essere utilizzato con oggetti aventi diverse rappresentazioni:
nell'esempio preaentato un sistema era rappresentato mediante funzione di truferimento e l'altro
mediante zeri, poli e guadagno.
Lo sleeso risultato può però ottenersi più semplicemente mediante la sequenza di istruzioni
8•tf ( 1 8 I) j
g1•1/(1+a•R1•C1);
g2•R2/(1+ ■ •R2•C2);
I g•g1•g2
Si noli che, In quest'ultltno caso, si è sfruttata la possibilità. di definil'e le funzioni di trasferi- . t ':; ~·
mento G1(J) e G2(s) attrav erso operazioni r1ritmetiche sulla funzione di trasferimento elementare
a (la corrispondente istruzione poteva anche essere sostituita dalla a•t:t { (1 O] , 1)). lnolt.re
l'oggetto corrispondente alla funzione di trasferimento serie è stato otteout.o come il prodotto
degli oggetti g1 e g2.
altri sottoelsternl, consideriamo il caso dei coeiddetli controllori PIO (Proporzionale Integrale
Derivativo). Questi controllori sono sistemi LTI che ottengono , a partii-e da un segnale di errore \tj
.·1,,:
e una varia.bile di controllo u come somma di tre contributi: proporzionale, integrale e derivativo. ·...•'Ì''
~j'~!~
Con riferimento alla Figura 18.4 la funzione di trasferimento complessiva del controllore può
~✓a;
otte nerei connettendo in parallelo le tre funzioni di trasferimento elemen tari: ·Y'-1t"·
t ~ti/
.,,,,,"'~).
e•tf([1 0),1): kp•1; kd•2; ki=3;
prop•kp; dariv•kd•s; integ•ki/1;
,.. ..
• ~J".1j:".:t
~
In altri termini l'operazione di somma su oggetti funzioni di trasferimento opera come una
.I connessione parallelo. Si noti che lo stesso risultato si poteva anche ottenere mediante il comando
parallel che ha una sintassi analoga a. quella del comando serie ■ presentato nel precedente
pamgrafo.
18.5. INTERCONNESSIONE DEI SISTEMI 347
..
-
kp
kdS -
,
►
+ .h +
-
,. --1G
s
W a - G(a)
( )- l +G(8)H(s)
R E y
-.. G(s) -..
+
~ I!I,
"'
,·I
s•tf('s');
PID•kp+ki/1+kd•1;
g1•tt(1,(R1•C1 1),'inputdelay', tau);
g2•R2/(1+e•R2•e2) ;
C•PID•gl•g1;
348 CAPITOLO 18. J'vIODELLI
NEL D0}"11NIODI LAPLACE
u,(t) R.i
PID(a)
+ l+sR.iCi
Ora, la funzione di tra.Bferimento del sistema a ciclo chiuso può ottenersi con i comandi
WaG/(1 +O .1 •G);
W'"'IDinreal(W)
Per ottenere la. rappresentazione di sistemi con retroazione si può usare anche il comando
feedback che però risulta poco utile nel caso di sistemi SISO. Come si vedrà. nell'ultimo paragrafo
di questo ca.pitolo, tale comando risulta invece part icola rmente utile nel caso di siatemi MIMO.
sis==t1 ( (1 1) , (1 3]);
seT.(.sis)
si evince che le proprietà di un sistema definit o mediante una rappresentazione con funzione di
trasfer im ento sono:
• num, polinomio numeratore della funzione di trasferimento;
• den, polinomio denominatore della funzione di trasferimento;
• Vuiable, variabile indipendente che si può scegliere tra s (per sistemi continui) e z (per
sistemi discreti) 2 ;
• T11 temp o di campiona.mento (per sistemi discreti);
• ioOalay, ritardo ingresso-uscita (associati a questa proprietà vanno considerate anche
quelle di InputDelay, ritardo in ingresso, ed OutputOelay, ritardo in uacìt&);
• InputNameed OutputName,nomi dell'ingresso e dell'uscita;
• InputGroup ed DutputGroup, gruppi di ingressi ed uscite per matrici di trasferimento;
• Notes, note;
• UserData., per memorizzare dati lega.ti al siste ma considerato d'interesse per l'utente.
2 Per l'uso di altre variabili indipendenti si rim anda ai Manuali.
18.7. RAPPRESENTAZIONE PER SISTEMI MIMO 349
l
get(1i1 1 1 i0D1lay 1
)
Per a.esegnare ora un ritardo pari, ad esempio , a 3 secondi potremo digitare, equivalentemente, ,,; I
una delle due istruzioni l.
.! '
sis. ioDelay,=3
1et(1i1,'i0Delay 1 ,3)
da cui comparirà la nuova funzione di trasferimento comprensiva del rlta.l'dO. Se or& voglia.mo
I
inserire l'etichetta 11tensione 11 all'ingresso e l'etichetta 11posizione" all 'usc ita potremo digitare
J
sis,InputName•'ten1ione'
set(sis,'OutputName','posizione') 1
La manipolazione delle altre proprietà è assolu t amente analoga a quella fin qui descritta e
presuppone l'uso dei comandi aet e get . In particola.re la sintassi generale del comando set per
l'assegnazione o la modifica di una o più proprietà di un sistema. risulta:
set(sia,'NomeProprieta1','ValoreProprieta1', ...
'NomeProprieta2','ValoreProprieta2')
dove gli apici prima e dopo il ValoreProprieta vanno omessi nel caso in cui tale valore sia un
numero anzicché una stringa di caratteri. Come già. visto negli esempi precedenti, equivalente
ali 'uso del comando set è l'uso del punto, ossia:
111.NomeProprieta•ValoreProprieta
get(aia, 1 NomeProprieta1 )
e l'assegnazione di una proprietà di un sistema ad una variabile può essere effettuata mediante
il comando
variabile=sis.NomeProprie~a
l
Per ulteriori dettagli sull'uso dei comandi set e get si rimanda anche a! Para.grafo A.l.
111•1;
fuma=tf({l; [1 0]},(11 O O])
I
12:
1
12: -
I
I Nel caso di un sistema MIMO si deve generalizzare l'approccio descritto per i sistemi SIMO.
Ad esempio, consideriamo ancora. il sistema idraulico riportato in Figura 18. l. A partire dal
modello ( 18.5)·( 18,6), o, equivalentemente, dallo schema a blocchi di Figura. 18,2, considerando
come usciledel elatema.I livellidel due serbatoi si ha:
)·
li termine di ritardo può eesere sostituito con una approssimazione d i Padé al secondo ordine:
(18.8)
che fornisce
a•:z • 6 I ♦ 12
12: -----------------------------------
2 ,-4 ♦ 16 ■ •3 + 43 8-2 + 42 I ♦ 12
·1
Tranafer function from input 2 to output ... '
I
I
11: O j
'!
1
t2: -------
2 I + 1
Si noti che per accedere ai singoli polinomi della matrice di trasferimento bisogna seguire le
cl9.88iche regole degli array di celle. Se, ad esempio, si vuole conoscere il polinomio numeratore
della funzione di trasferimento tra la seconda uscita ed il primo ingresso, bisogna eseguire il
comando
SISidraulico.n{2,1}
Se vogliamo invece conoscere la. funzione di trasferimento tra. la seconda uscita. ed li primo
ingreseo basta digitare
g•SISidraulico(2,1)
-1 " - ~
-
G(a) _
C1 (-'+ ri1c;-Ha+
1 I 1.
:) (18.9)
(
R1;:C2
(s + ~)(:: l I
~)(s
2 l
+! )
~
0.6
t2; -------
(s+0 .5)
G( 8 ) "+ (
= s2 + 7.t + 10
e supponiamo di voler analizzare Il sistema al variare dello zero. A tale fine, possiamo definire
un sistema MIMO, o meglio SIMO, in cui ciascuna funzione di trasferimento corrisponde ad un
particolare valore di ,. In particolare, digitando
den• (1 7 10] ;
zeta• (1 5 10) i
nu.m1•(1 zete(1));
nwn2•(1 ze~a(2)];
num3•[1 zeta(3}];
sia1•tf(nWD1,den):
1i12•tf(num2,den):
1i13•tf(num3,den):
' 1
12:
s + 2
18.7. RAPPRESENTAZIONE PER SISTEMI MIMO 353
s + 10
13: --------------
.-2 ♦ 7 I+ 10
cioè l'nasegnazione di un array di tre funzioni di trasferimento. Volendo accedere, ad esempio alla
funzione di tra.sferimento tra il primo (unico in questo caso} ingreseo e la terza uscita., basterà
digìta.re
sis(3,1)
Se invece voglio visualizzare il polinomio numeratore della stessa funzione di trasferimento dovrò
digitare
■ i ■ (3, 1) .nUJ11{1} \.
che fornisce
ans ,.
o 1 10
dove si può notare che compare uno zero come primo coefficiente, aggiunto da CONTR.OL per
mantenere le ra.ppresenta2ioni dei polinomi numeratore e denominatore della stessa lunghezza.
Lo stesso tipo di sistema MIMO pub essere assegnato considerando I diversi sottosistemi
SISO come delle singole entità. La.sequenza. di Istruzioni,
ai ■ (:,: ,1)•1111;
lli1(:,:,2)•sia2;
~ia(:,:,3)•sis3i
lia"lllinreal ( ■ ia)
forniece come risultato
Hodel 111(:,:,1,l)
Tra.nafer tunction:
s + 1
i •
I
Hodel sia(:,:,2,1)
aaa■•••aa ■••••••••
Tranafer function:
1
I + 2
Model sia(:,:,3,1)
Tranafer function:
I ♦ 10
l.
1:
,l
l•
li
. ~~
~\ •S' ;\
~ (:( ~....
t>-·~ -;· I
<iI.
i-f .
H·,:..
354 CAPITOLO 18. MODELLI NEL DO!VIINIO DI LAPLACE
.I posaibile riportarla in una forma. pseudo-diagonale a blocchi (la matrice di trasferimento non è
necessariamente quadrata) del tipo
detta anche forma dì Smith-McMilla.n, dove i polinomi monici (cioè con coefficiente del termine
di grado mastimo unitario) (Ei, ,Pi) sono primi tra loro e vale la proprietà di divisibilità esatta tra
ogni polinomlò t, a quello Immediatamente eucce88ivo e fra ogni polinomio Wie quello precedente.
SI definiscono zeri di trasmissione le radici del polinomi e,.
La definizione risulta quindi une.
generalizzazione della definizione degli zeri nel ca.so SISO e mantiene fisicamente il concetto
relativo alla situazione in cui l'uscita è zero pur non essendolo necessariamente gli stati e gli
ingressi. In altri termini un numero complesso À è uno zero di trasmissione per un sistema se,
per qualche vettore d'ingresso uo e qualche stato inizia.le xo risulta.no verifica.te le equazioni
.?
I x(t)
O
=
=
Ax(t) + BuoeÀt,
C:i:(t) + Duoe-"t
:z:(0)= Xo
i zeritr•tzero(A,B,C,D);
zeritr•tzero(siatema);
(poli,zeri~r]~pzmap{aiatema):
r••rie ■ (ai1i,1ia2,ua1,in2);
dove nei vettori uel e in2 vanno specificati gli indici rels.t.ivi rispettivamente alle uscite del primo
sistema. che si desidera connettere agli lngre68i del secondo. Ovviamente ua1 e in2 devono a.vere
la ste88a. dimensione (nel caso in figura u11s1 e in2•2 ed hanno entrambi dimensione unitaria).
Si noti che nel caso di un sistema serie parziale, il sistema. complessivo ottenuto col comando
Hriea avrà come ingressi i soli ingressi del primo sistema e come usci\e le sole uscite del secondo
eietemo..
Nel ca,io di connessione parallelo, facendo riferimento alla. Figura 18.8 il comando
g•pu&llel( ■ i ■ 1,sia2,in1,in2,ua1,ua2);
consente di ottenere un parallelo parziale, cioè solo gli ingressi i cui indici sono specificati in in1
ed in2 sono fatti coincidere, così come solo le uscite specificate in us 1 ed us2 saranno sommate
per ottenere l'uscita del parallelo (ovviamente in questo caso in1 ed in2 devono avere le stesse
dimensioni, cosl come ual ed u112). I restanti ingressi e le restanti uscite saranno considerati
18.8. ESERCIZI 355
r - - - - - - - - - - - - - - - - - - - - - -,
=-
I I
y=y 2
I Sistema 2 I
Yl U2
ti =U1 I I
Sistema 1 I
~
I
- - _,
Figura 18.7: Serie parziale di due sistemi.
r--------------- 1
I I
I Sistema 1 I
U2 I I 111
'
I
$ I
I Sistema 2 I
I I
L _______________ J
applicati a.isingoli sistemi non i nterconnesei e, a differenza del comando seriea , sa.ranno anch'essi
cons idera.ti come ingressi e uscite rispettivamente del sistema complessivo.
Vediamo ora come si ottiene la. connessione in retroazione di sistemi MIMO. Consideriamo
ancora H sistema idraulico di Figura 18.1 e supponiamo di regolare il livello del secondo serbatoio
mediante un controllore PID secondo lo schema di Figura 18.6. Il sistema idraulico ha due ingressi
e due uscite, ma la retroazione è effettuata tra l'uscita Y2 e l'Ingresso u1, Al fine di ottenere un
modello MIMO del sistema & ciclo chiuso va Innanzitutto ottenuta la matrice di tra.Bferlmento
corrispondente al sistema che ha come lngreeel (e, u2) e come uscite (111,.V2):
g1•PID•tt(1,(R1•C1 1), 1 1nputdelay', tau1);
s:stf( 1 a 1 ); g2=R2/(1+s•R2•c2};
Gca•(R1•g1 O; g1•g2 g2];
Ora., la matrice di trasferimento del sistema. a ciclo chiuso può ottenersi con i comandi
INe•1: USy2•2; sagno•-1; tra1duttore•0.1;
Gccafe•dback(Gca, trasduttore, INe, USy2, 1egno)
dove INe è Il vettore degli indici degli ingressi di controllo del sistema a ciclo aperto, USy2 è il
vettore degli indici delle corrispondenti ueclie da retroazi onare e aegno•-1 indica. una retorazio11e
positivo.
18.8 Esercizi
Eaerdzio 18, 1 Si assegnino in MATLAB le aeguenti /unzioni di trasferimento
~-----.
y
e
ti e
y
\
Figura 18.10: Circuito elettrico . 1
L e
••,__ ___ ~
I I I l y
l;..__________
•
----1
I
y R
l
Figura 18.11: Circuito elettrico con due ingressi e due uscite.
Esercizio 18. 7 Con riferimento alle /unzioni di trasferimento definite nel precedente esercizio
si verifichi la differenza nelle rappresentazioni di G.s12 e Gs21, Si ripeta poi il confronto dopo
avere applicato ad entrambe le rappresentazioni il comando minreal.
' .
1
1
, ;
. , ..
...·.
F',I~•
~
~
,:
l
Capitolo 19
Tali comandi possono essere anche utilizzati per sistemi tempo-discreto a patto di indicare
il periodo di campionamento tra le opzioni dei comandi stessi (vedi Paragrafo 24.1).
Qualsiasi sistema LTI proprio può essere rappresentato mediante un insieme di equazioni
differenziali del primo ordine del tipo:
x = Ax+Bu {19.1)
y = Cx+Du {19.2)
dove u è il vettore degli ingressi, x è il vettore di stato, 11è quello delle uscite, A si dice matrice
dinamica del sistema, B matrice degli ingress i, C matrice delle usite e D matrice ingressi-uscite,
Come ben noto, l'elemento fonda.mentale di MATLAB è la matrice . Pensare quindi in MATLAB
ad un sistema. rappresentato nelle. forma ingresso-stato-uscita. equivale semplicemente ad a.sseg•
nace quattro matrici: A, B, Ce D relative al modello (19.1)-(19.2), ciascuna delle qnali sarà
trattata come una singola variabile .
Ad esempio, considerando ancora il sistema meccanico costituito da un corpo di massa uni•
te.ria, spinto da. una forza F, la relazione tra F e la posizione 7, è rappresentabile mediante la
cascata di due integra.tori (Flgur&. 19.1), Tale sistema, in termini di spazio di stato, può essere
rappresentato come
z = (~ ~)x+(~)u
11 = ( O 1 )~
360 CAPITOLO 19. MODELLI NELLO SPAZIO DI STATO
forniscono le matrici relative ad una po8!1ibile rappresentazione del sistema suddetto nello epiuio
di stato.
....__I__,x1=±2 •~I_J___,1---y--_x_2
I
_u =_x_1
--+l•I '.
È chiaro d 1altr11.parte che, qua.le che sia. la rappresentazione adottata, l'oggetto fisico model-
lato è sempre quello visto Paragrafo 18.1. Cos\ come per le funzioni di trasferimento, si pone ora
s..;.:..
il problema di definire in MATLAB l'oggetto fisico a partire dalle matrici che ne definiscono la 'l
rappresentazione in spazio di stato. A tale fine si può usa.re l'istruzione
DOPPIOint•11(A,B,C,D)
do\/e u sta appunto per 11ste.te-space''. ossia spazio di stato. Si noti che l'oggetto DOPPIOinte
l'oggetto fuma definito nel Paragrafo 18.1 sono in realtà lo stes,o oggetto, anche se definiti in
maniera diversa. Digitando
DOPPIOini.B
si può accedere alla matrice B dell'oggetto D0PPI0int, Inoltre, anche se la matrice dinamica del
sistema (o analogamente una delle altre matrici del sistema) è deRnlta con un nome diverso da
A, per accedere aJla matrice dina.mica del sistema bisognerfl. digitare sempre l'istruzione
DOPPIOint. A
o indifferentemente
DOPPIOint.a
Per le altre matrici andranno ovviamente utilizzati i campi'. b', '. e' e'. d' . Alternativamente
si può utilizzare il comando sadata con la sintassi
(A,B,C,O]=ssdata(DOPPIOint);
Tutti questi comandi poaeono essere anche utilizzati per sistemi tempo-discreto. . ..
Dato un sistema del tipo . .. . ·:-
± = Ax + Bu
una coppia di matrici (A 1 B) ai dice controllabile se, assegnati due qualsiasi stati :z:oed :i:1 e due
qualsiasi istanti di tempo to e t 1 con to < t 11 esiste un controllo ti che porta il sistema.dallo stato
:ro aJPistante to allo stato :z:1 all'istante t 1 • Tale definizione non fornisce alcun metodo analitico
per determinare se una coppia dì matrici sia o meno controllabile. A tale proposito risulta
invece di maggiore utilità la seguente equivalente definiziont!: una coppi/\ di matrici (A, B) si
dice controllabile se
ku
o
L
I
B 1 i
J J I
f
Ii
dove la prima variabile di stato è la corrente di armatura, la seconda è la velocità del rotore e gli ~
alLrl parametri hanno il seguente slgnlftcato
R resistenza.di armatura.
L induttanza di armatura
J momento d 1inerzia.
B coefficiente di attrito
lct costante di coppia
/tu costante di forza controelettromotrice
u tensione di armatura
T1., coppia di carico
Assumendo nulla. la coppia di carico e tutti gli altri parametri unitari tranne L = l mH, si
ottiene il modello ·
( ±1
±2 ) = ( -10: )( )+( o )u
-10
-1
3
:z:1
:r2
103
(19.4)
y = ( o l )( :~) (19.5)
Hcont•ctrb(A,B);
fornisce la matrice
103 106 )
M cont = ( O 103
,
1
At =TAT- , Bt =TB
assumano la forma di matrici a blocchi
A _ ( Anc
t - A:n
con llnc di dimensione non nulla se Il sistema non è controllabile, e dove la coppi a ( Ac, Be) è
contrullabile. Si osservi che solo le matrici Anc ed Ac saranno certamente matrici quadrate,
mentre i rimanenti blocchi potranno non esserlo. .... .
Per vedere come ottenere questa forma con i comandi di CONTROL consideriamo il circuito • f
elettrico rappresentato in Figura 19.2.
.I Ri R2
Ra
u
x, lI e,
y
x, l C2
• T
Figura 19.2: Ponte di resistenze e condensatori.
R1 +_.;,.~1--:i:2
Ra
.....;;_
l + --u1 {19.6)
C1R1Ra C1Ra R1C1
1 R2 + R3 1
--:i:1 - ---x2 + --u ( 19.7)
C2.Ra C2R2.Ra R2C2
Il = :c1 -:r:2 (19.8)
Aseumiamo ora. tutte le resistenze pari ad 1 k11e ciascuno dei due condensatori pari a.cl1 mF.
Tale eletema \isulta non controllabile come ai evince dal fatto che il comando ctrb restituisce In
queato caso la matrice
Mcont =( ! -l
-1
)
l
19.2. CONTROLLABILITÀ ED OSSERVABILIT.4. 363
che ha rango uno. Dopo aver assegnato le matr ici del modello del circuito considerato
[At,Bt,Ct,T,k)•ctrbf(A,8,C);
( !~) = ( -~ -~ ) ( :~ ) + ( l.~ ) u
11 = ( -1.4 O ) ( :~ )
restituisce anche la matrice di trasforma~ione
-1
T=0.707 ( 1
ed il vettore k i cui elementi costituiscono il rango di ciascun blocco della matrice At.
Si noti che nell'us o del comando ctrbf le variabili di uscita T e k possono anche essere omesse.
Dal sistema trasformato risulta evidente che solo la variabile z 2 è controllabile.
PMSiamoora a considerare quali strumenti fornisce CONTROL relativa.mente a.Ila proprietà
di osservabilità. Una. coppia di matrici (A, C) si dice osservabile se la. matrice di osservabilità
definita come
ha rango mBBsimo,
La maggioranza dei risultati legati alla proprietà di osservabilità. delle matrici del siatemi •r
LTI può ricavarsi per dualità da quelle di controllabilità, Infatti uni\ coppia di matrici (A, C) è I
osservabile se la coppia ( A T, CT) è controllabile.
Anche nel caso di sistemi non osserv abili, è sempre possibile definire una trasformazione tale
da ottenere una rappresentazione che evidenzia la parte osserva.bile e quella non osservabile del
sistema (forma. di osservabilità di Kaiman) , 088ia.tale che
At = ( Aò° 1~ 2
) , Ct = ( O Co ) (19.9)
Con l'uso dei comandi di CONTROL possiamo subito verificare che il sistema (19.6)·{19. 7)-
(19.8) con i para.metri suddetti,
oltre a non essere controllabile non è nen.nche osservabile. In
particole.re l'istruzione
Mosa•obav(A,C);
i
che non è di rango pieno. Tramite li comando
. II
(At,Bt,Ct,T,k)sobsvf(A,B,C):
iI I:I
364 CAPITOLO 19. NIODELLINELLO SPAZIO DI STATO
Tutti questi comandi sono utilizzabili con la stessa sintassi anche per sistemi tempo-discreto.
lOR e
u
IOR e
Considerando come variabili di stato le tensioni a.i ca.pi dei due condensatori e come uscita
la somma di tali tensioni, una possibile rappresentazione ingresso-stato-uscita del circuito è
I RC:i:1 = -l.l.x1-.x2+t1
I
ìj RC±2 = -::1 - 1.1 x2 +u
t
Il Y :z:1 + :z:2
~•i
Volendo far coincidere una delle variabili di stato con l'uscita possiamo operare il cambia-
mento di base
t,
I
i1
Scelto RC = I s, tale cambia.mento di base può essere ottenuto con la.successione di istruzioni
19.3. CONVERSIONI TRA LE RAPPRESENTAZIONI 365
i1 = -1.1 .r1 - z2 + u
-2.1 z2 + 2 u
'
·~
i:i =
i
i· y = z:2
Quindi più in generale il comando H2ss consente di effettuare un cambia.mento di b8.'le del
tipo
z: = T:1:
fornendo in uscita. una rappresentazione del sistema nello spazio di stato le cui matrici sono:
At = TAT- 1
, Bt = TB, Ce= cr- 1
Si noti che il numero 2 nel comando ss2ss è usato perché nella lingua inglese la sua pronun-
cia, ma non la sua scrittura., coincide con la pronuncia della preposizione "to", che in italiano
corrisponde alla preposizione "a.". Il senso quindi della scrittura. u2u è "da spazio di stato a
spazio di stato".
aisRCt=canon(sisRCx);
fornisce le matrici
At = -0.1 O)
( O -2.1 '
e, = ( O -1.41 ), Dt = O
ciol! una. rappresentazione tale che la matrice dina.mica eia diagonale e quindi presenta gli auto-
valori sulla diagonale stessa. li risultato del comando canon perde di significato nel ca.so in cui
la matrice dinamica del sistema non riaultì die.gonalizza.bile.
Vediamo ora cosa accade nel caso dì autovalori complessi coniugati. Consideriamo ancora
il sistema idraulico di Figura 18.1. La funzione di trasferimento tra u1 ed z2 risulta l'elemento I
(2, 1) della matrice di trasferimento (18.9). Questa funzione di trasferimento, sostituendo al 1;
ritardo una sua approssimazione di Padé del secondo ordine, può essere riscritta come
.,2 - il.a- g.
W21(s) = R2 ,. ,. (19.10)
• (l + sR1C1)(l + sR2C2) (s2 + !s + !=f)
Scelto 1' = =
1sec, R1 R2 = 1 sec/m 2 , C 1 =
1 m 2 e C2 = 2 m 2 , la funzione di trasferimen-
to (19.10) avrà due poli reali in -1 e -0 .5 e due poli complessi coniugati -3 ± 1. 73j. In questo
ca.so, una rappresentazione del sistema nello spazio di stato con matrice dinamica. diagonale può
ottenersi con la sequenza di istruzioni
''¾
·~ ,~
.....
) ~
·,
CAPITOLO 19. !VIODELLI NELLO SPAZIO DI STATO ; i,\'!
366
;~
t '
.,. .
SISidraulicoctf([ 1 -6 -12],conv([2 3 1),(1 6 12))); •'f.l"')
canon(SISìdraulico) ,...
~Ji:
• ,l ••
J..;•:
-~
che forniscono le matrici trasformate in modo che la matrice dinamica assume la forma. '~è)
~~{f[·
:t:Jl,,
-·~
-3 1.73 o ...
·,i'1~
1 •~:
_j)
'(~
A t-
_ -1.13 -3 o r:~ ~
o o -1 . -~
(
o o o ...::::-
;~
.. ; • .-~
,J!.
,'/',)f.
cioè una matrice diTiamica diagonale a blocchi con elementi (blocchi) sulla diagonale pari ai poli 6 o. -,_n,.~
,
reali ( complessì coniugati) della funzione di trasferimento di partenza.
In realtà il comando ca.non prevede un Beeondo parametro di tipo stringa, che definisce Il
tipo dl forma canonica.; quella vista finora era quell& corrispondente &l valore di default 'modal'.
Un ulteriore modo di utllìzznre l'Istruzione canon li adoperare l'opzione 'co111panion' che forn isce
una coppia tli motrici (At, Bt) in fonn& canonica di controllabilità, ossia della. forma
o o o . ?~::.-
·
..~.;·,:e:
1 O o
At = O 1 o
l''
"!,,·
tJ
•'l!i-.'J
-r4 ...•r
o 1
,ft1t
;,;;,1 r:./'
Bt = (1 O O O )T -,1;~;,
: 11:.·
È immediato verificare che la malrice di controllabilità di un sistema nella forma. canonica di ":*:
'f:'j
controllabilità è pa.ri alla matrice identità, mentre la. matrice di osservabilità, come sarà chiaro
tra poco, può essere impegata per ottenere la forma canonica di osservabilità. '
Nel caso di sistemi MIMO la matrice Ai mantiene la. stessa struttura mentre la matrice Bt . 't1J""ri
riportata precedentemente, cost ituisce la prima colonna della matrice degli ingressi del sistema
risultante. Al fine di mostrar· ciò consideriamo il circuito elettrico riportato in Figura 19.4.
:~f,1i
t~:~(~~ '
... ,s..,(.
L ·:..·~~l:--
r1~.;
e
_________
r(rì __________ ,.
~
---4
~- I
. ,
:...&{[\·~
•"<-:i,
.;,~~;:
.,.i
.....
.<f:.- •i' ....
R
il';è·J
!
~~~
tt-ll.
... _;!'':~
t~,
'r•~r:\.if J.!"
Figura. 19.4: Circuito RLC. ..... ,'1$f
~-~~i,·
~~~~ $,.i
Assumendo come variabili di stato la corrente nell 'induttanza e la tensione sul condensatore, .-'i
:;1y,
~
un suo possibile modello nello spazio di stato è t· ~ J,:
,J ; li
~,J;
19.3. CONVERSIONI TRA. LE RAPPRESENTAZIONI 367
1 1 1
= --::t2 + -u1 - -u2
L L L
l 1 1
= c:i:1 - nc~2 - Rcu 2 (19.11)
Yl = Xl
Y2 = X2
Assegnati i parametri C = 1 mF, R = 1kn, L = 100 mH la sequenza di istruzioni
Il ,e
x1 x2
x1 o -10000
x2 1 -1
b •
ul u2
xl
x2 o
1
-0.0001
-1 I
I
e e
x1 x2
y1 10 o
y2 o 10000
d •
111 u:Z
yl o o
y2 o o
Continuous-time model.
È interessante notare che, a partire dalla forma canonica di controllabilità è semplice ottenere
·1
anche quella di osservabilità. Nel caso di sistemi SISO, le matrici dinamica e di uscita della forma
canonica di osservabilità hanno la forma
o l o o
o o 1 o
At =
(19.12)
o o o 1 I,
-<11 -0.2 -03 -0.n
1:-
Ct = ( 1 o o o)
Tale rappresentazione può essere ottenuta a partire dalla forma. canonica di controllabilità
r
mediante una trasformazione di stato che utilizzi come matrice di trasformazione la matrice di !
I
osservabilità della stessa. forma canonica di controllabilità. Considerando ancora. l'esempio del
sistema idraulico presentato in precedenza, la forma canonica di osservabilità si può ricavare
l
mediante la sequenza. di istruzioni I:
I
, .---;..,-,.,
-i:,zt
SISidrC=canon(SISidraulico,'companion');
SISidrO•ss2ss(SISidrC,obsv(SISidrC));
È semplice verificare che, come è ben noto, la matrice di osservabilità della forma. canonica
di osservabilità è la matrice identità.
.:(::
-.~.
~,:;
t -;_'.;;:··
!•1
..-..
.·.~
.'J:,
19.3.3 Da e verso lo spazio di stato . ·\~J.;li>
t . 'r(. ~
Assegnato un sistema., il modo più semplice per ricavarne un modello è spesso operare nello
spazio di stato. Tanto per l'analisi quanto per la sintesi può essere molto utile aver~ anche
una rappresentazione ìn termini dì matrice di trasferimento o dì zeri e poli. Con CONTROL
la trasformazione da una rappresentazione nello spazio di stato ad una in termini di matrici di .
trasferimento ai ottiene mediante il comando tf.
Con riferimento al circuito di Figura 19.4 ed alla corrisponde nte rappresentazione RLCnèllo
spazio di stato, un modello del circuito In termini di matrice di trasferimento si pub ottenere con
l 1istruzione
RLCt!•t!(RLC);
RLCt!-minreal (RLCt!)
che fornisce
10000
#2; ---------------
1·2 +Il ♦ le004
-s - le004
t2: ---------------
a*2 +a+ le004
RLCzp•zpk(RLC)
RLCzp~zpk(RLCtf)
RLCss0 ss(RLCtt);
19.4. RIDUZIONE DEI MODELLI 369
fornisce una tra le possibili rappresentazioni del circuito nello spazio di stato. Ovviamente tale
rappresentazione non è detto che coincida con quella di partenza (neanche per l'ordine, a meno
che non si usi il comando minreal). Ciò è dovuto al fatto che per ottenere una rappresentazione
nello spazio di stato a partire dalla funzione di trasferimento bisogna effettuare la scelta di qoali
variabili di stato utilizzare. Queste, in generale, non coincidono con le variabili di stato scelte
inizialmente per ottenere un modello del circuito mediante equazioni differenziali e non hannu
necessariamente un preciso significato fisico.
Tipicamente, in un sistema. di controllo, gli attuatori presentano una dinamica molto più
pronta del processo, cioè r 0 << 'rp, 11comando modred consente di ottenere un modello dinamico
ridotto che assume istantanee le dinamiche dell'attuatore. In altri termini, assumendo 7a = O
dalla prima delle (19.13} si ricava :i:0 = kau e, sostituendo nella seconda delle (19.13} si ottiene
il modello ridotto
.Ll
370 CAPITOLO 19. l\tIODELLI NELLO SPAZIO DI STATO
Si noti che ponendo elimina=2, l'uso del comando modred avrebbe consentito di ottenere il
modellu ridotto corrispondente alla posizione r,,
= O nelle (19.13). Ovviamente, avendo suppoeto
T4 << r,,,tale modello avnbbe uno scarso significato fisico. :--il,..,.,,,.
,,m; -.Y
Per meglio chiarire come opera il comando modrad possiamo considerare una generolizze.zioqe
del problema della riduzione di un modello del elatema in modo che sj mantenga inalterato ·11
...t \f,
~ \'
,l ;• ,:,
y = ( G1 G2 ) ( :: ) + Du .
Supponiamo ora che il gruppo di variabili "veloci" sia xi; in tal ca.so possiamo pensare di
imporre :i:1 = O, in modo che le variabili veloci siano e. regime, e risolvere le relative equazioni • t , • ; ...;
·'. ~l/Jit:
rispetto ad .f1, supponendo che la matrice Au sie. Invertibile. Sostituendo poi il valore cosi ,1t,:,if
trovato nelle altre equazioni si ricava il modello ridotto ··U:-'
. , )': i;;
I ,,;,.;;~
••• .'f.,•
:i:2 = (,4.22- A21A1/ Au) x2 + (B2 - A21A~/Bi) u
• ._ . i.l~
.
= (C2-G1A 1
y 0 A12)x2+(D-G1Ai}B1)u
., ' .
.t,\
che preserva il legame ingresso-uscita di regime. È questo appunto il tipo di riduzione di modello . ,>/f,.t':
....
che si ottiene col comando caodnd. ~!",:-
,)~·
Tornando all'esempio del sistema attuatore-processo, potrebbe interessare ottenere un mod•
elio l'idotto del sistema che "catturi" le dina.miche veloci anzicché quelle lente. Ciò potrebbe
essere ottenuto assumendo Xp(t) identicamente nullo nel modello (19.13). L'opzione 'del' del
comando modred consente di ottenere questo tipo di modello. Le istruzioni
elimina::2;
ridotto1-modred(1i1tema,elimina,'del');
forniscono il modello
dove logicamente come uscita. si continua a considerare la variabile Xp che, per la riduzione del
modello, è aasunta nulla.
Più in genera.le dato un sistema. nella forma
x = A:r+Du
y = Cx+Du
è possibile ridurre il numero di ingressi, di stati o di uscite tramite l'istruzione
(Ar,Br,Cr,Drl•11delete(A,B,C,D,inding,induac,ind1t);
l
19.4. RIDUZIONE DEI MODELLI 37,1 I
che produce le matrici del sistema ridotto ottenuto eliminando gli ingressi, le uscite e gli stati
i cui indici sono specificati nei vettori inding, indusc e indst rispettivamente. Sì osservi che
quest'ultima istruzione può anche essere impiegata senza specificare il vettore indst, mentre gli
altri due vanno sempre indicati {nel caso in cui si desideri eliminare solo degli stati in luogo dei
vettori inding e indusc nell'istruzione vanno posti due vettori vuoti, cioè ()).
Del tutto analoga all'istruzione ssdelete è l'istruzione ssselect che , con le stesae opzioni di
parametri, invece di eliminare consente di selezionare gli ingressi, le uscite e gli stati da conservare,
cioè nei vettori inding, indusc e indst vanno specificati gli indici relativi rispettivamente agli
ingressi, alle uscite ed agli stati che si desidera conservare,
Un altro modo per ottenere modelli ridotti è quello di eliminare gli stati che influenzano
11
meno" in termini di controllabilità ed osservabilità il sistema. complessivo. Per ottenere ciò si
possono usare congiuntamente le istruzioni balraal e modrad.
L'istruzione balreal consente di ottenere una. rappresentazione di un generico sistema nello apa.zio
di stato, nella cosidetta forma bilanciata. ossia in una forma tale che il gramia.no di osservabilità
e quello di controllabilità coincidono e sono diagonali. Ricordiamo che si definiscono gramiani di
controllabilità e di osservabilità rispettivamente
e il comando gramconsente di valutare tali gramiani per .,. = oo. In particolare, partendo da un
sistema SIS con rappresentazione nello spazio di stato, l'istruzione
[SISbilaneiato,g,T,invT]=balreal(SIS);
oltre a fornire il sisema nella suddetta forma ed un vettore g contenente gli elementi della di•
agonale del gramiano, fornisce anche la matrice di trasformazione adottate. e la. sua inverse..
L'utilità di una rappresentazione di questo tipo è dovuta al fatto che, poiché Il vettore g rifletta
tanto la controllabilità quanto l'osaerve.bllltà dei elngoll stati, el può pensare di eliminnre quelli
caratterizza.ti da. una. piccola. g ( 1) poiché essi influenzano 11pot:0 11 Il com porte.mento ingreseo-
uscita. del sistema. origina.rio perché scarsamente controllabili ed osservabili. Dopo aver applicato
l'istruzione balreal, l'eliminazione suddetta può, ad esempio, effettuarsi con le istruzioni
indst•find(g<g(l)/10):
SlSridotto-modred(SISbilaneiato,indst.'del');
Un'ultima. istruzione inerente la riduzione di modelli che consente, a. partire da una. qualsia.ai I
ra.ppresenta.zione non minima del sistema., di ottenerne una equivalente minima, è minreal. La i
forma in cui utilizzare tale istruzione è: r
I
(SISmin)eminreal(SIS,tol}:
f
dove Il sistema SIS pub essere rappreeente.to In qualunque forina. e l'argomento opzione.le tol
re.ppreeenta la tolleranza. con cui sono considerati coincidenti poli e zeri e quindi cancellati per
ottenere la rappresentazione minima. ·1
SISallargato•append(SIS1,SIS2):
..r;-
:,,
tornisce il sistema "allargato" a partire da due sistemi assegnati, ovverossla costruisce il sistema.
o
( ;~) = ( A1o o
A2)( :r1
:t2 )+( B1o B2)( u1
u2 )
o
( !~) = ( C1o o
)(
C-1
J:1
:r2 ) +( o
Di
D2)( u1
u2 )
[I comando augatate è invece una particolarizzazione dell'istruzione append. In particolare
il comando ~ . ~
SISaumentato•augstate(SIS);
.. '
dove SIS è rappresentato nello spazio di stato, allarga il vettore di uscita considerandovi ancher
lo stato, cioè costruisce il sistema :!;
i ::: AJ: + Bu
( !~) = ( ~ ) :r + ( i) tJ
19.5 Esercizi
E11ercizlo 10.1 Si scrit1a la Junction cancont,m che date in ingresso le matrici relative all~.
rappresent,uione nello apazio di stato di un sistema LTI, resistuisca le matrici tali che il siBtema
sia nella forma canonica di controllo {19.12).
Esercizio 19.2 Si consideri il sistema descritto dal/e equazioni
Eaerclzlo 10.S Dato il s11tema (J9.6)-(19.8), 1ceg/ìendo ad arbitrio i parametri purchi aia
verificata la condizione R1 C1 = R2C.2 (ponte equilibrato), si applichi una trasformazione di stato
tale da far coincidere una variabile di stato con l'uscita del sistema e verificare che qualsiasi sia
l'ingresso il ponte si porta all'equilibrio (tensione nulla su R3).
Suggerimento. Si verifichi che la parte non controllabiledel sistema
è asintoticamentestabile.
Esercizio 19.4 Si a,aegni in CONTROL il sittema descritto dalle equazioni
,I
z1
(x3)
:i2 =
( -45
-6.4; - 15.55
5
-~n
( ❖ )· ::Z:1
::z:2
:?:3
) +( I
1.::
:
~
tq y == ( -1.5 o 2 ) ( ) :i:1
x2
X3
...
Si determinino due nuove rappresentazioni nello spazio di stato, mediante il comando ss2u;
utilizzando come matrici di trasformazione, rispettivamente, l'int1ersa della matrice di control-
labilità e la matrice di osservabilità del sistema.
t,
19.5. ESERCIZI
i)(::)+(Du
-0.5 l
= (
-1 - 0.5
o l
u = (o o 1)(::)
Il sistema é ossen,abile? Se non completamente osservabile,quale é la parte non oasen,abile?
Il sistema é controllabile? Se non completamente controllabile,quale é la parte non controllabileY
Esercizio 19.6 Si considerino le funzioni di tros/enmento
W (s) - s +l
l - (1 + }O}(t + 0,1) 1
e u ne ottengano due corriapondenti rappre1entazioninello spazio di atato nelle forme canoniche
di controllo. Utilizzando le rappre,entazioni nello apazio di ,tato ctul ottenute, ai uerifich1 che:
• la conneuione serie dei due siatemi, con il aecondo si1tema (quello corrispondente a
W2(s)J che segue il primo, é controllabile,·
• la conneuione parallelo dei due sistemi é non controllabilee non osaervabile;
• la connessione con il secondo sistema in retroazione negativo al primo é controllobileed
011eroabile.
Eaercizlo 19.7 Si consideri il sistema riportato in Figuro 19.6. Un pendolo inuertito di maSBa
m é vincolato al punto A . Una rondella con momento angolare h, é attaccata al pendolo, ma
é libera d, ruotare attorno all 'aue del pendolo. Una coppia di controllo u puc} e88ere applicata
dal pendolo alla rondella. Il sistema può essere descritto dalle equazioni
[8 = mgl8 - h~
J~ = hB+u
dove con I ai é indicato il momento d'inerzia del pendolo e della rondella ri1petto al punto A,
con J il momento d'iner.sia della rondella riapetto all'a11e del pendolo e con l In d11t11niadel
centro di ma11a C del 1iltema dal punto A. A11egnati a piac,mento i parametri del ai1tema.
si determinino le /unzioni di tro1/erimento tra u e <f,e tra u e e. Si verifichi cht il 1i1tema è
controllabilecon u, osser11(1bile
da <f,e non 01seN1abileda 8.
r
i Esercizio 10.8 li moto d, un pallone aerostatico roppreaentato in Figuro 19. 7 può tuere
descritto dalle equazioni
I
f
i h
8
iJ =
=
1
--8+u
'Tt
1
--tt+0"8+
1'2
l
-tu
1''2
= "
d01Je8 rappresenta la variazione di temperatura ri,petto al valore di riferimento, u l 'immiuìone
di calore nell'aria del pallone (controllo), h la vanazìone rispetto all'alteua di ri/enmento, v la
tJelocitd in direzione verticale e w il vento sempre in direzione verticale.
Si a.uuma 1'1 = =
2 s, 1'2 1 s e <1 = l m/ s. Possono essere stimate la variazione di
temperotura8 ed 1Jnvento costante w dalla conoscenza dell'altezza h f
Si determinino le funzioni di trasferimento tro u ed h e tra w ed h. Il sistem11é completa-
mente controllabileda u ? E da w f
.. ,
...
·-
.,.
374 CAPITOLO 19. lvI ODELLI NELLO SPAZIO DI STATO
...... -'1
.,. I
I i1 = z2
2 Ut
!i:2 = 3w0 z1 + 2woro:z:4+ -
m
:i:3 = :Z:4
2wo u~
2!4 = - -:z:3
ro
+ - -
mro
doue m è la ma8sa del satellite, ro ed wo roggiae velocità angolare della 8Uaorbita ed u1 ed u~'
le forze di controllo radiale e tangenziale rispetti11amente. 1• , ,.
Esercizio 19.10 Il modello cli un pendolo invertito Ju carrello in movimento riportato in Figu•
ro 19.8 è
1 o
o o
o o
o o ··,o
,,
doue :t1 ed :t2 = !i:1 sono rispettivamente la posizione e la uelocìtà angolare del pendolo, mentri;.
2:3 ed z,i = x 3 sono la posizione e la velocitd della massa M . Assegnati i parametri M = 10 kg,·
m = l kg, l = 1 m e g = 9.8 m/ a:l ai verifichi se il siatema riaultao meno controllabile. Supponen•,
do di disporre di una misuro della posizione o"golare del pendolo, il sistema riaulta osservabilef'
Quali variabili devono essere misurate per poter a"8icurare l'osservabilità del sistema ?
.I
19.5. ESERCIZI 375
' I
l I
l
t I
t I •
Esercizio 19,11 Dato il modello relativo all'Esercizio 18,5, a partire dalla rappresentazione
ottenuta considerando entrambe le uscite, si ricavino quelle corrispondenti alle singole uscite
usando i comandi aaaelect ed sadelete.
(
-10
0.1 -~ ) ( :! ) + ( ~ ) u
y = ( 1 l ) ( :~ )
dopo avere valutato l'opportunità dì determinare dei modelli di ordine ridotto, si ricavino i
modelli ridotti relativi alla parte "lenta" e a quella "veloce" del sistema usando ude lete o
1111elect e modred. Si valuti inoltre il modello ridotto a partire dalla rappresentazionebilanciata
del sistema steuo.
376 CAPITOLO 19. MODELLI NELLO SPAZIO DI STATO
•.·l
• P. _\
' ,:t"
·· ·:\tn
:..,\l
Capitolo 20
In questo capitolo saranno esamina.te le istruzioni che consentono di analizzare la riapo111a nel
tempo di un sistema LTI. Le recenti versioni di CONTRO L consentono di visualizza.re in maniera.
semplice e compa.tt&. le risposte nel tempo di sistemi LTI in presenza di alcuni ingressi canonici.
Il comando da utilizzare a tal fine è ltiview e all'uso di questo comando sarà. dedicato l'ultimo
paragrafo di questo capitolo.
Ciononostante, riteniamo che, soprattutto per il lettore che per la prima volta eta affron1a.ndo
lo studio dei sistemi dinamici, sia particolarmente utile approfondire preventivamente l'uso dei
comandi che consentono di determinare le risposte nel tempo ed in frequenza . Ciò infatti consente
di acquisire familiarità. con i comandi di CONTROL, di manipolare i risultati della simula2ione
in maniera più diretta, di esercitarsi sui comandi MATLAB per la grafica.
Le istruzioni di CONTROL utilizzabili per ottenere la risposta nel tempo di un sistema LTI
sono:
G .,2 + 3.2 ., + 12
(s) = s3 + 1.2 s 2 + 9. 2 s + 9
Coosidera.ndo ora un ingresBo a gradino centrato nell'origine (la. cui trasformata di Laplace
è quindi 1/s), la trasformata. di Laplace dell'uscita sarà
1
Y(s) = G(.,)- .,
Usando it,comando
(rea,poli,kJ•re1idue(1i1.num{1,1},[1i1.den{1,1} OJ);
dove il secondo argomento del comando individua il prodotto tra il denominatore di G{a) ed s,
p088iamo scrivere la tresformata di La.piace della ri8posta del sistema. espansa in fratti semplici:
è daLa da
,._.,.
m ,-
~ (t) = L~èi'+L 0
2e JtlR;lcoe(w;t+/R;)
imt j::l
.I
20.2. RISPOSTA. AL GRADINO 379
G(s) = us + 10 (20.1)
s2 + 8s + 25
Per valutare In rispoeta. di questo sistema ad un gradino unitario, posto rr = 1, tra.mite i
comandi
[uacita,tempo,stato]•etep(aiatema)
consente di ottenere e.nche l'evoluzione dello stato relativo a.Ila risposta. o.d un gradino di a.mpiezza
unitaria.
Si noti che l'istruzione step richiamata senza parametri di uscita, fornisce I ~ra.fici corrispon-
denti a tutte le possibili coppie ingresso-uscita del sistema considerato.
Nel caso di sistemi MIMO, la matrice tridimensionale uscite avrà dimensione pari a (LT x
NY x NU), dove LT è la lunghezza del vettore tempo, NY è il numero delle uscite ed NU è il
numero degli ingressi. Ad esempio, mediante i comandi
[uacite,tempoJ•atep(aistemi);
plot(tempo,uscite(:,:,j)
380 CAPITOLO 20. RISPOSTA NEL DOJvIINIODEL TEMPO
.... .
,, •• '•
:· ..
0.6
0.5 · · ···
0.4
0.3
0.2 ....
0.1
o .. ..
-O.I
-0 ,2
-0 .3
1.5
4
o -4
0(3) = (T:J + tO
s2 + 2 s + 25
Per visualizzare la risposta di questo siste ma ad un impulso unitario, scelto u = 1, basta
digitare
20.4. RISPOSTA AD INGRESSO QUALSIASI 381
Se invece vogliamo analizzare come cambia la risposta impulsiva del sistema. al variare della
posizione dello zero, senza perb cambiare il guadagno statico del sistema., seguendo lo stesso
approccio presentato nel precedente paragrafo, ba.sterà digita.re
s,--------------------------.-------
\
i o
-1
I
-2
I
_, I I
I
I
-4
--$
o o,
TimeINCI
1-5 25 i.
Figura 20.2: Confronto tra risposte impulsive.
Suggeriamo di trovare le risposte alle seguenti domande: perché le risposte Impulsive pa.rtono
da punti diversi? Come si possono determinare a priori questi puml? Perché le diverse risposta
impulsive si intersecano tutte tra loro negli stessi istanti di tempo? Pub certamente aiutare
riferirsi alla rappresentazi one analitica delle diverse risposte impulsive.
La sintassi del comando impulu è analoga a quella del comando ,tep visto nel precedente
paragrafo.
t
;
•~
i
'{
I
i
.
382 CAPITOLO 20. RISPOSTA NEL DO!vfINIO DEL TEMPO
1
G(s) = -
a+l ~
'J;,.,,
.,..
L'uscita di questo sistema per un ingresso sinusoidale a frequenza 1 Hz e per un intervallo di '1/i~i'
tempo pari a dieci periodi della sinusoide in ingresso, si può ottenere con le istruzioni
'{. ..
• ,'J• '
.
u'l -t ·,,
· pJ
~
freq•l; t-0:0.05:10/freq; sistema•t!(l,(1 1)); :,' t ,:t,
J
,:19•
u•sin(2•pi•!req•t): -;;~ 1.
l1im(1i1tema,u,t)
~i~
dove l'ultima fornisce il grafico riportato in Figura 20.3.
l
'!>ti
·~!
UMar 9'TlultllonRet<AI•
0.3
0.2S
·.i:.,
o.,
" ...
.... \
~
J 0.05
-OM . • .•!,11:t,.
'.-;1$tf.
"·
\j .:,~~'. -~
;~'
-O. I ,JO :,.
,.•4 !li;·
: :A,'i-,
-O 15
\)
\J \J V V "?1,
i'fi'
- 02
o 2
.
'
\, Figura 20.3: Risposta ad un ingresso sinusoidale.
• r *."f .
Nel ca.soin cui si utilizzi una rapprese ntazione nello spazio di stato, l'istruzion e . ~l.J.
..~:~
[u1cita,tempo 1 1tato]•l1im(1i1t1ma,u,t,xO);
.., . '•~-,~
.,
.,,
't.:· ~li:
."
fornisce l'uscita, il vettore tempo {eventualmente più lungo di t se la simulazione rende nece88arlo
I
: \4'\.
',1, '
;.i
un campionamento più fiUo dell'Ingressou) e lo ata.tocon gli Ingressidefiniti nella matrice 11(tante
colonne quontl sono gli ingreBSIe tante righe quanti sono I campi oni del tempo), che corrispondono 'i,1~'....
agli istant i di tempo definiti nel vettore t, eventualmente a partire da una. desider ata. condizione
inizia.le 10.
!.
'"'"'"
.:;,-~
-"\
È evidente che l'uso dell'istruzione lsim è immediato, mentre spesso meno semplice è ia :y~ ~
"costruzione" di ingressi non canonici. A tal fine riportiamo qui di seguito un altro esempio.
Supponiamo di voler determinare la risp08ta dello stesso sietema ad un ingresso con un impulso
nell'origine di ampiezza. 3 1 nullo per 2 a, onda triangolare di ampiezza amp= 10 e di periodo T= la
per 6 s e poi costante e pari ad amp. La successione di istruzioni
20.5. EVOLUZIONE LIBERA 383
fornisce il grafico riportato in Figuro 20.4 che oltre a mostrare l'uscita del sistema, ne mostra
anche l'Ingresso.
12-----------------~-----.------.-----.
10
t
.'
384 CAPITOLO 20. RISPOSTA NEL DO!vIINIODEL TEMPO
(20,2)
dove con x 0 al è indicato lo stato inizia.le e con u l'ingresso. Nella {20.2) il primo termine si dice
evoluzione libera. mentre il secondo si dice evoluzione forzata.
L'evoluzione libera di un sistema LTI a partire da un qualunque stato noto xo,si può ottenere
tramite l'istruz ione iuitial. A tal fine consideriamo il sistema del secondo ordine
-4
= ( -3
y (o
Definite le matrici di questo sistema
tramite le Istruzioni
ai1t1ma•s1(A,B,C,D),
initial(sistema,(2;0)):
verrà. visualizzato il diagramma di Figura 20.5 relativo ali 'evoluzione libera dell'uscita. (la seconda
variabile di sta.to) a partire dalla condizione iniziale :to = (2, o)T.
O.I,-------------------..-----------.
o ... ... .... . . .. .... ............. ...... .. ........... . ....... ... --~-~ ..:-:'.
~
- .-:-:
••-:-:
..:-:-
..:-:-.
:-:
.. -:-:
..~..:-:'
....,.,,J
-O.I
-02
i -0 .)
o 0.5 1.$
Tima(sec)
Relativamente allo stesso sistema.. volendo visualizzare entrambe le variabili di stato su uno
stesso disegno potremo digitare
20.6. IL CO!vIANDO LTIVIEW 385
si1tema=ss{A,B 1 oyo(2),zeros(2,1));
initial(aistema,(2:0J);
cioè assumiamo come variabili di uscita entrambe le variabili di stato {la matrice C va scelta
uguale alla matrice identità di ordine pari all'ordine del sistema rendendo poi dimensionalmente
coerente la matrice D),
Più in generiùe tramite l'istruzione
(uscita,temp0,1tato)•initial(1i1tema,xO);
i valori dell'uscita, dello stato e degli istanti cJItempo in cui questi vengono valuta.ti, vengono
memorizzati in opportune variabili e possono poi essere disegnate con l'istruzione plot,
Così come per i comandi precedentemente descritti, come ulteriore argomento del comando
initial, si può specificare un vettore t contenente gli istanti di tempo in cui si desidera siano
valutati lo stato e l'uscita del sistema; ciò si ottiene digitando
È importante ricordare che le matrici u1c:ita e atato conterranno tante colonne quante sono
le uscite e gli stati rispettivamente, mentre ad ogni riga corrisponderli. un diverso [stante di
integrazione.
l
anche di visualizza.re la risposta in frequenza).
Per utilizzare il comando ltivia11 bisogna innanzitutto definire in MATLAB i sistemi di
interesse; a.d esempio:
Digitando ora li comando ltiview senza alcun ulteriore argomento, comparirà una interfaccia
grafica, Dal menu "File" scegliendo "Import" è possibile scegliere uno dei sistemi precedente-
mente rappresentati in MATLAB. Del sistema scelto comparirà subito la. risposta al gradino.
Premendo il tasto di sinistra del mouse in un punto della risposta al gradino, compariranno il
ve.lare del tempo e dell'uscita {cioè le coordinate) del punto selezionato. Ad esempio, importan-
do SlSstato e premendo due volte il tasto di sinistra del mouse, si ottiene la rappresentazione
riportata in Figura 20.6.
i
Se ora vogliamo visualizzare alcune caratteristiche della risposta, come ad esempio il tempo
di aasest&mento, bisogna utilizzare il tasto di destra del mouse e dalla voce "Chara.cterlstics 11
selezionare 11Settli ng tìme 11• Ad esempio, con riferimento a.Ilostesso sistema coneiderato in prece-
denia, la visualizzazione di tutte le proprietà disponibili sulla risposta al gradino forniscono la
I
rappresentazione riportata in Figura 20.7,
Mediante il tool ltiviev è possibile anche visualizzare la risposta impulsiva di un sistema.
Ad esempio, partendo dalla precedente figura, usando il tasto di destra del mouse e selezionando
la voce "Impulse" dal campo "Plot type", si ottiene la Figura 20.8.
Supponiamo ora di volere confrontare le risposte impulsive e quelle al gradino del sistema
SISstato e del sistema
SISft=tt(SISstato}•tf(1,(1 1]):
.-:;,~
7r~
1
\.". ,:U:1
J:-;: ;.~
:...
··•·~
.!~f::
386 CAPITOLO 20. RISPOST1l NEL DO!vIINIODEL TE!vIPO
It
I I
;''(§
,(,;.r,,i
u / :":.
~~
'·t "Yi
··•'!I
l-1 '.
1.2
=..:,~:.:,
:o;~a
J
o.e ~~. :·\,~.
_,.:.1. :J,
_l'.='•J~
• .f.1"•~ .
o.e . . -~.i~.
~;l•t
-~~1:.it • ..r •.
...
oL-----'-----..L..-----L----..L...------1----...J
o ·y;:;_~f.)
~,,.~
;•
~ '~.Jt!:•
.. i"f'--
·.~ ( 'I"":.
l "Import''. Succeseivnmente dalla vode "Edit" del menu princlpl\le, 8elezlonando 11Plot config-
uratlons" è posseibile selezionare la visualizzazione sia delle risposte impulsive che di quelle al
gradino, ottenendo il gre.fìco riportato In Figura 20.9.
•i·';.
.,..,-~~,,
!.f; . ·t'f
. .. .,
• 'i.ti; -~·
Più in generale, le principali funzionalità del tool "LTI viewer" possono essere cosi riassunte: liit'r•
.. :..,i.
• Scelta della risposta. ~~~~
Col tasto di destra del mouse con l'indicatore posizionato sulla finestra grafica, dalla voce .10>~
·.i!~;
"!-·~
~'>'t; .
"Plot type" è possibile selezionare il tipo di grafico da rappresentare: risposta impulsiva, c-;:1~'!-,
risposta al gradino, diagramma di Bode, diagramma di Nyquist, diagramma di Nichols. ·r;~
-~:1
ù'/
·-11;
·
• Parametri caratteristici della rispoata. i:/!',~f:~
Col tasto di destra del mouse, selezionare la voce "Chara.cteristics" (ovviamente i parametri ,,\
caratteristici dipendono dal tipo di risposta rappresentata).
\ =f
,
,:,.
Dal Menu principale andare in "Edlt" e poi in "Plot Configurations". Sarà. possibile
selezionare il numero (dal a 6) ed ìl tipo di grafico (rieposta impulsiva, risposta al gradino,
·"t~
-.f1;
if•
diagramma di Bode, diagramma di Nyquist, diagramma di Nichols) da visualizzare sulla \'-:
:~!,;
stessa finestra grafica.
-.~- r
• Nuovo Bìatema.
Bisogna ripetere la procedura cli Importazione: dal menu "File", scegliendo "Import" ~
it~
ti!~..(
p088ibile scegliere uno dei sistemi preventivamente rapppre6entati in MATLAB. l~•·. }.
..~)·
• Stes,o tipo di risposta per sistemi diversi nella stesso finestra.
Col tasto di destra del mouse, dalla. voce "Systems" selezionare l'ulteriore sistema. di cui
si vuole visualizzare quel tipo di risposta. Se il sistema non è presente nell'elenco che
compare bisogna. innanzitutto importarlo (vedi Nuavo sistema).
• Steaso tipo di risposta per siatemi diversi ~u diverse fineatf'e.
Selezionare il numero di finestre secondo quanto riportato nel punto Riapoate diuerse
I
20.7. ESERCIZI 387
Il
1.4
\l
~1i.~1~'=
e: 1.07
I
I
I
I
08
O.G
dello stesso sistema nella stessa finestra. Per cla.scuna risposta selezionare un diverso
sistema, seguendo la procedura indicata al punto precedente, me. deselezlonado, anzicché
selezionando, il sistema.non desiderato.
• Proprietà del grafico.
Dal menu "Edit" scegliendo "Viewer Prefernces" è possibile selezionare le seguenti prorietà
della rappresentazione: unità di misura della risposta io frequenza, griglia, fonts delle
did;u;calie, colore assi, lunghezza assi e parametri caratteristici. Alcune dì queste proprietà
possono anche essere selezionate con il t;u;to di destra del mouse, selezionando la voce
l
"Properties".
20.7 Esercizi
Esercizio 20.1 Dato il sistema con funzione di tros/erimento
1
G(.,) = (a+ l)i
,i confrontino1 giuatijicandone gli ond<1menti,la riapoataal gmdino del si,tema a ciclo aperto e
del aiatema a ciclo chiuao con retroa1ione unitaria negati110,
Esercizio 20.2 Si rappresentino le risposte al grodino dei siatemi con fun:iioni di trasferimento
1
.,+2'
1
a2 + 10 s + 1'
e se ne giustifichino gli andamenti.
388 CAPITOLO 20. RJSPOSTA NEL DOMINIO DEL TEMPO
Ot
oL:-
....:-
:__-::...:_- -=.-
_:- _:-r...:..- .:..:
-:.:.: ·::::::!I::~=
·-:....::..-i:_-_:-_:-:_-::...:_--=-
-~-=-====- -=-
====
- .-.;-:..;-:..:.-=-:I
o a • •
Esercizio 20.S Si determini usando il comando step la risposta alla rompa, a ciclo aperto e a
ciclo chiuso, dei sistemi con funzioni di tmsferimento
l 1
G1(s} = -- G2(s)= --
s(8 + 2)
1
a+l
1
G(s) = -
.,+ 1
considenindo come ingresso delle sinusoidi di ampiezza unitaria e di pulsazioni w = 0.1, 1,2, 10
rad/s.
1
G(s) = - 2-
s +1
e si giustifichino i risultati ottenuti .
20.7. ESERCIZI 389
~,--
Tlfflo(HC~ 0.11,
~IN
i
3
Tlml(UCI
~l\a---
,,---ir-------r--~:....,.:~==::::c::::::;:-----;::c::==::::::;i
l
Figura 20.9: Confronto di risposte impulsive e al gradino con indicazione dei
parametri caratteristici.
si vafoti l'andamento dello stato sul piano delle fasi {:t1 come asciua ed ::t2 come ordinata) a
partire dalla condizione iniziale ( 1, 1).
Esercizio 20. 7 Dato il sistema SJSO del primo ordine descritto dalle equazioni
y=::t
si ricavino, usando i comandi step ed initial, le ri&postedel sistema ad un ingresso del tipo
"impulso rettangolare" variandone la durata e l'altezza in modo da menterne costante e pari a
l il prodotto.
Esercizio 20.8 Dato il modello del motore a corrente continua riportato nel Paragrafo J g,s,
assumendo come uscite entrambe le variabili di stato (corrente e velocità), e, considerando i
seguenti paramteri: R :: l n, L = 10 mH, J = 0.02 kgm 2 , B = 0.2 Ns, kt = kv = 0.03,
si determini la risposta del s;stema a partfre da condizioni iniziali tutte nulle e con coppia di
carico nulla per un ingresso di tensione a gradino di ampiezza 1 V e 6 V. A partire da condizioni
di regime relatitJeal secondo valore di tensione, si 11alutisuccessivamente la rispodo del sistema
ad un disturbo di coppia di corico di ampiezza pori a 0.1 Nm.
Esercizio 20.9 Sì valuti la risposta impulsiva del circuito elettrico rappresentato m Figu•
ra 18.11.
390 CAPITOLO 20. RISPOSTA NEL DO.MINIODEL TEMPO
Ese r cizio 20. 10 Si rappresenti l'andamento delle variabili di dato del circuito elettrico ripor-
tato in Figuro 18.9, assegnando i parametri R = 100 mn, L = 400 mH, C = 0.1 F, Re= 10n e
considemndo prima un ingresso costante di ampiezza unitaria e quindi un ingresso sinuaoidale
dì ampiezza unitaria e di pulsazione w = 1, 3, 4, 10 rad/ s. Si interpretino infine i riaultati
ottenuti.
G(s) _ s + 24
- (s + l){s + 2)(s + 10 ± lOj)
si determinino, tramite if tracciamento della rispoata indiciale, i parametri dei diversi regolatori
standard (Proporzionale, Integrale, Proporzionale Integrale, Proporzionale Derivativo Integrale)
mediante l'impiego dei due metodi di Zieyler e Nichols.
Suggerimento. Si ricorda che la selezione dei parametri dei control-
lori standard mediante il metodo di Ziegler e Nichols è basato sulle
seguenti relazioni:
• C (s) = Kp con I<p= 0.5Ko;
.{~i~
• C(s) = J('P ( 1 + t,) con Kp = 0.45Ko e Ti = 0.85To; ~)(~
·--.
;~
• C(s) = Kp(l + Tds) con Kp = 0.5J(o e Ta :=0.2To; .. '
'-.Jt:\
~~:•
C(B}= K,, ( 1 + Tds + t;) con K,, = 0.61(0, Td = 0.12To e T, =
% \'
• ;wl .
. •~
0.5To; 1;1
~11
.: "'/I'
~tf;'.J' :~
:
dove C(s) è la funzione di trasferimento del controllorn,Ko = KG(O), .,,...\.~..:
-l~ ~
con I( pari all'azione proporzionaleche porta i poli del sistema a ci- - ìT,ii~
1 '1.;.-11-l
x ( -~ -! ) x +( ~ ) u ~;~
t ~";r;!
>~·
, .. , ili,.
y = ( 12 O ) :r
;~:~
ps
~it.;·
::-.:,
~~-
,é., f. ~ .
.-:!~1 -~
.-.·1,•t.-
I '{
1 -
'/;4,
. ·:..•;fi
.
'
•
,:;-:.
..~N'
!\.•>,•t ~
l•"\:•l'
- - ; •'°r•
i.,~'}·i:
o t .....
ti~•/;',
T 2T 3T 4T 6T
Figura 20.10: Onda. quadra di periodo 2T. .
l
In questo capitolo sara.nno esaminate le istruzioni che consentono di analizzal'e le. risposta in fre-
quenza di uo sistema LTI. Prima di addentrarci nell'anallel dei comandi, è opportuno richiamare
alcune definizioni. Innanzitutto ricordiamo che, nell'lpoteai che I segnali cli lngreaao e di uscito.
di un sletem& siano \rasformablll secondo Fourler, allora al dico rlepoete. armonica.del ttletemnla
funzione complesH di variabile complessa G(jw) tale che
1
G(s) -- ------ (21.2)
h 2 +ba +k
Tramite le istruzioni
IOdtOilQIIIII .....
eo
70
eo
! 50
I 40
30
20
IO
o
o
-45
i -90
J
- 135
-180
10
-1
,o• ,01
f•l'l'J•ncy(racl'uç)
(mod,tase,pula)=bode(sis);
(mod,taae]=bode(sis,w);
[mod,tase]=bode(sis,{lllllin,vmax});
fornisce il modulo in valori naturali (la. conversione in decibel può ottenersi con l'istruzione
moddb•:20•log10(mod} ), la fa.se in gradi ed il vettore corrispondente ai va.lori di pulsazione (in ra-
dianti a.Isecondo) in cui si è valutata la risposta. armonica. Dalla struttura stessa. delle istruzioni
risulta evidente che è possibile specificare i punti in frequenza (il vettore 111 o gli estremi dell;in-
in radianti al secondo) in cui si vuole valutare i diagrammi di Bode. Tipi-
tervallo vmin ed 11m.a.x)
camente il vettore delle pulsazioni è assegnato in scala logaritmica usando l'istruzione logspace.
Come nel caso dei comandi utili a. ricava.re la risposta nel dominio del tempo, l'istruzione usata
senza variabili di uscita, così come nell'esempio riportato, fornisce direttamente il disegno dei
diagrammi di Bode desiderati. Si noti che in questo ca.so il diagramma. dei moduli è riportato in
decibel.
21.1. DIAGRAMMI DI BODE 393
È importante osservare che nel CaBosi consideri una funzione di traBferimento con guadagno
statico negativo, il comando bodo fornisce un diagramma delle fa.si che parte da +180° e non,
come più comune, da -180°.
Inoltre nel CMO di funzioni di trasferimento con poli sull'asse immaginarlo, se tali punti rien-
trano nel vettore di pulsazioni definito da MATLAB o assegnato come argomento (si vedano le
opzioni del comando bode), MATLAB fornirà un messaggio di errore. Ciononostante il diagram-
ma di Bode sarà rappresentato, ma in corrispondenza del picco di risonanza tale diagramma
risulterà. troncato e quindi non esatto (il valore teoricamente assunto sarebbe infinito) (si veda
l'Esercizio 21.4).
Il comando bode, analogamente al precedenti comandi per la rappresentazione della. risposta.
di un alterna nel dominio del tempo, consente anche di rappresentare plò dia.grammi sulla 11tesaa
finestra grafica . Supponiamo, ad eaemplo 1 di volere valuu ,re come cambia la risposta. In frequenza.
del sistema {21.2) al variare del coefficiente dl attrito b. La. sequenza di istruzioni
fornisce i diagrammi di Bode sovrapposti sulla stessa finestra cosi come riportato in Figura 21.2.
8ode0a\ltam
100
eo
i
i
1
60
40
l
J 20
o
-20
o
-'15
I -90
l
-135
-180
IO~ ,o-• ,oo 10
1
Ftequency {rad/MC)
Figura 21.2: Confronto dei diagrammi di Bode del sistema meccanico al variare
dell'attrito rotazionale.
Va.osservato che è possibile ottenere informazioni puntuali sulla risposta armonica usando
il mouse sulla finestra grafica che compare con l'uso del comando bode. In particolare, il tasto
di sinistra del mouse, cliccato in un certo punto del di11.gramma1 fornisce le coordinate del punto
e il sistema cui ai riferisce, mentre ìl tasto di destra consente di: selezionare una risposte., rap.,
presentare il valore di picco, effettuare uno zoom, inserire la griglia, selezionare le proprietà del
grafico.
I
I:
I.
l
'
5t
.
394 CAPITOLO 21. RISPOSTA NEL DOJ,.,IJNIODELLA FREQUENZA
[I comando bode può anche essere utìlizzato avendo come argomento un sistema con rappre-
sentaz ione diversa dalla funzione di trasferimento (zeri/poli o spazio di stato). Inoltre il sistema
può anche e88ere MIMO con NU ingressi ed NY uscite, nel qual caso gli argomenti di uscita 1110d
e fau saranno array multi<limeneionali di dimensioni pari a [NY x NU x LW), dove LW è la
lunghezza del vettore delle pulsazioni in corrispondenza delle quali è stata valutata la risposta
armonica., 1
Primi di concludere il paragrafo descriviamo brevemente l'istruzione sigma. Questa consente
di calcolare i valori singolari della matrice complessa G(jw} al variare di w (si ·ricord i che al
definiscon o valori singolari di una matrice complessa G(jw) i numeri J>.(G(jw)•G(jw}) dove
l'asterisco indica la coniugata traaposta. e >.gli autovalori della matrice). Se G(jw) è la risposta
in frequenza di on sistema MIMO, i corrispondenti valori singolari, al variare della frequenza,
rappresentano una estensione al caso di sistemi MIMO del diagramma di Bode dell'ampiezza
della risp08ta armoni ca di un sistema SISO. I vari modi in cui poter utilizzare tale istruzione
sono:
(val1ing,puls]•aigma(si1 );
(val1ing]•1igma(si1,w);
(valsing)•aigma(si1,{W1in,vmax}):
(val1ing]=sigma(si1,w,tipo);
l dove ome~ten<lo le variabili di uscita si ottiene direttamente il grafico come precedentemente
descritto. Oltre all'eventualità di specificare i valori di pulsazione (in radianti al secondo) in
cui calcolare la G(jw) nel vettore pult, è possibile, utilizzando Il parametro tipo come ulteriore
Mgomento dell'letru81one, ottonare I valori slnsolorl di G(jw}- 1 {tipo•i), di/ +G(jw) (tipo•2),
o <li / + O(jw)- 1 (tipo•a).
k
G(3)= ( )
s+l 3
Digitando
(re,i1,pul1]•nyquiat(1is);
[re,ia)-nyqui1t '(1i ■ ,v);
(re,im)"'t\yqui1t(si1,{vmin,1111ax});
t 1 Per ridurre questi array moltidimensiouali in vettori si può utilizzare il comand o squeeze,
vedi pag. 25).
21.3. DIAGRAMMI DI NICHOLS 395
Nyquill O,ag,11m
•
"
-2
-e
o a
• IO ti
40
(mod,fa1e,pul1]•niehol1(1i1);
[mod,fa1eJ•nichol1(1i1,w);
(mod,fa1•J•nichol1(1i1,{V111in,W111&X})j
G s _ 3/a + 1 (21.3)
( )- (.,+l)(s+lO)
e proponiamoci di investigare la risposta in frequenza del sistema al variare della posizione dello
zero. Digitando le istruzioni
21.5. ESERCIZI 397
alta=[-0.1,0.1,1,100];
B"'t:t{'s');
gsl=(a/alfa(1)+1)/((a+1)•(s+10));
ga2•(a/alfa{2)+1)/((a+l}•(a+10});
gs3•tf((l/alfa(3} 1],conv((l 1],[1 10]));
gs4•(a/alta(4)+1)/((s+l)•(a+10));
ltìvie11(gsl)
comparirà la. risposta al gradino della prima funzione di tra.sferimento. Importiamo ora le diverse
l
funzioni di trasferimento definite, selezionando l'opzione "Import" da.I menu "File". Selezioua.ndo
poi l'opzione "Plot Conflgurations" dal menu "Edit" comparirb. la. schermata riportata in Figu-
ra 21.5, da cui, scegliendo boda come unico grafico da. rappresentare sulla finestra, ai ottiene sullo
stesso grafico la rappresentazione dei diagrammi di Bode corrispondenti alle diverse funzioni di
trasferimento. Successivamente, tale grafico pub essere reso una. figura MATLAB sele1ionando
la voce "Print to Figure" dal menu "File", ottenendo cosl dopo semplici integrazioni, il grafico
riportato in Figura 21.6.
..
'-~
. □r[t:ra
1: Jbode
I
.:]:
. I I·::~ 2 3.
. .1 I:
.;2l Jstep
.r
. ..
1001
0~
r.
WGJ-·.00 s ,; GJ~~ ,
~l
3.
'
: 4:jbodema!.:'.::):
r [,.]00,
:~r
.
J
,·
3: Jirnpulse
• !-;
5: jnyquist
eljnichols
I
r,
.
.,
•.
~- . :'1'!/'·,,.,
J!,-1 ...
21.5 Esercizi
Esercizio 21.l Si rappresentino i diagrammi di Bode, di Nyquist e di Ni chols relativi alle
seguenti /unzioni di trasferimento
l
G1(s) = -,
., Ga(s) = s, G4(s) = -10 s
e se ne giustifichino gli andamenti.
398 CAPITOLO 21. RISPOSTA. NEL DOMINIO DELLA FREQUENZA
o
.,o
i
-
-10
-40
f -IIG ·, .
t \.,o
-
.70
. ,o
.,oo
,o
l · IO
J
•IIIO
ì -170
,o..
10
G:i(s) = -
B- l
e di quelle ottenute con il numeratore d' segno opposto, e se ne giustificl&inogli cmdamenti.
G(.t) = 10, s + 1
s+l
con -r = 104,10 1 1,0.1, 10- 4 e se ne giustifichino gli andamenti.
Esercizio 21.5 Si scriva una MATLAB Junction che data una funzfone di trasferimento del
secondo online ne tmcci i diagrammi di Bode asintotici.
Esercizio 21.6 Si scriva una MA 1'LA B function che rappresenti i diagrammi di Bode in /un•
zione della frequenza in Hertz anzicché in rodianti al secondo,
21.5. ESERCIZI 399
-°""'
Cl.0 . 1
.A()
i
J ..$)
I -to 11•100
-100
-t1'0
_,.,
-tlQL-----'------'------'-----''----.&._.---'------'-----'
-135 ..., o IIO
( :i:2 )!Ì:1
= ( -20o -31 ) ( Xl
:t:2
) +( 1
0 ~ ) ( :~)
( ) 1/1
1/2
= ( o1 o1 ) ( :~)
Esercizio 21.8 Si rappresentino i diagrammi di Bode relatiui alla /tmziorte di tm11/erimento
G(s) _ 100
- (s + l)(s + 7)
Si confrontino quindi le risposte del sistema considerando come ingresso delte sinusoidi di
ampieua unitaria e di frequenze w = 1, 10, l00rad/a. Si ripei.a poi l'eaercizio con riferimento
alla /-unzione dì trasferimento a ciclo chiuso ottenuta mediante retroazione negatfoa unilorfo
della G(s).
10
Gi(a) = -,
s+l
G 2 (s) -
-
10
s 2 + s + 1'
G3 (s) -
- a(s2
10
+ s + I)
Esercizio 21.10 Date le funzioni di trasferimento
G (s) - "+ l G2 ( ) 10
+0.1 s + l
l - a2 + O.I s + 1 ' s =- s'l
ai confrontino i corrispondenti diagrammi di Bode e di Nichols.
r.
o.s ...
0.4
O,l
0.2
OI
3
..... ····························....................... ...·····················
·............······r···
J ,O,I
11-1
, 100 I
I
I
I
..o, I
\
-0 .3
''
''
""·' ' .. ..._ __.,-
-os
•I 02 0.4 u o.e
Esercizio 21.11 Con riferimento alla /unzione di trasferimento {f1 .3), usando il comando
ltiviev e seguendo un procedimento analogo a quello indicato per ottenere le r1sposte in fre-
quen:a, ai rappre,entmo la diver,e rispo,te impulsive e al gradinoal 11ariaredello ,ero. Successi-
vamente si con/ontino le riapo1teottenute con quelle in frequenza riportate in Figura BJ,61 BI.1,
e Bl.8.
\
l
Capitolo 22
La maggioranza degli schemi di controllo è basata sul concetto di retroiuione: l'ingre68o del
\
sistema viene aggiornato in modo da rendere l'uscita del sistema quanto più simile ad un valore
di riferimento, soddisfacendo al contempo ulteriori specifiche di tipo statico e dinamico. Per fare
ciò sono necessari tre passi: misurare l'uscita, confrontarla con un valore di riferimento, elaborare
il segnale di errore in modo da ottenere l'ingresso da applicare al sistema. Un tipico schema di
controllo a ciclo chiuso con retroazione di uscita è riportato in Figura 22. l: G(s) è la funzione
l
di trasferimento del sistema da controllare, H(s) è la funzione di trasferimento del trasduttore
l
(in questo capitolo supposta unitaria), C(a) è la funzione di trasferimento del controllore , La
funzione di tr88ferlmento del sistema a ciclo chiuso è data da
W ., _ G(s)C{s)
( ) - 1 + G(s)C(s)H(s)
R y
l
C(s) G(s)
.___ __ ~
Il controllore più semplice cui si può pensare è costituito da un semplice guadagno: C($) = k.
È quindi interessante porsi il problema di come variano i poli del sistema a ciclo chiuso al
variare di k; in tale modo potremo verificare se con un semplice controllore di tipo proporzionale
riusciamo a sodd isfare le specifiche richieste. Data una funzione di trasferimento G(s), il luogo
delle radici è una rappresentazione sul piano complesso degli zeri della funzione l + kG(s) a.I
variare de l parametro k. Il luogo delle radici può quindi essere impiegato per studia.re gli effetti
della variazione del guadagno di retroazione sulla posizione dei poli a. ciclo chiuso, fornendo,
indirettamente, delle informa2ioni sulla risposta nel tempo ed in frequenza.
tj:J.
1
!.
1
...1l-
402 CAPITOL O 22. CONTROLLO CON RETROAZIONE DI USCITA ,,·
'!.
' ..
-~ -
'-
22.1 Tracciamento del luogo
Vedi31Tloinnanzitutto come è possibile visualizzare la posizione di poli e zeri sul piano complesso.
Consideriamo la funzione di traferimento
G s - s+ l
( ) - .,.i+5s + 6 • I
si ottiene una rappresentazione sul pìa._uocomplesso dello zero -1 e dei poli (-3, -2). l ,, .
I Digita.udo le istruzioni
G(s) - s+4
- (s + 1)(-' + 2)
22.1. TRACCIAMENTO DEL LUOGO 403
num=[1 4];
deo•conv([1 1],[1 2));
lli1•tt(num,den);
rlocu1(1is);
l.oaM
RooC
2.S
...
'
I
u 1
I I
1 I
I
0.5
r o-------------,-
.I
_,
L'istruzione rlocus può anche essere impiegata nella forma più genera.le
(ra.dici,guad] 2 rlocua(ais);
dove 1i1 è un sistema SISO. La precedente istruzione consente di ottenere le radici del polinomio
1 + kG(a) 0 1 nel vettore guad, I valori corrispondenti del guadagno k. Nell'uso dell'Istruzione
rlocu1, si può omettere la variabile di uscita guad oppure si p088ono completamente otneUere
le variabili di uscita, come fatto nell'esempio presentato, oUenendo direttamente il disegno del
luogo delle radici per k > O. Ve. notato che nel disegno del luogo delle radici viene Impiegato un
colore diverso per ogni polo del sistema. ·
È ben noto che , nel caso in cui il sistema LTI abbia due poli dominanti , è possibile ricondurre
le specifiche relative alla risposta nel tempo alla posizione dei poli della funzione di trn.sferimento
a ciclo chiuso. Può essere quindi molto utile avere sul piano complesso la rappresentazione
del luoghi a coefficiente di smorzamento ( costante (semirette che partono dall'origine vereo Il I !
semipiano reale negativo con diverse pendenze CÌ88cuna corrispondente ad un diverso valore di
() e a puleazione naturale Wn coatante (circonferenze con centro nell'origine e con diversi raggi
ciascuno corrispondente ad un diverso vaJore di wn)• Consideriamo la funzione di trasferimento
,.
·•·
G(s) - s +4 I
- .s(s + l)(s + 2)
404 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA
si ottiene il luogo riportato in Figura 22.3 dove, grazie all'istruzione sgrid appaiono anche le
curve relative a coefficienti di smorzamento e pulsazioni naturali costanti.
:\~;
AGOIL4Cla 1· ~
15,-r----.-----,----,----,"""T'"---.----.---,-----,,---,...
OOI! O.ll55 0.02$
10 030 •• 10
.S 0 .65 ,t I
• • I
....... _; . ., ~
J o
r
-5 o.a.,
• : • •••• ♦ ♦
•10 038
10
,.
.
12
-15 ,_._ __ oaa __., __ __,___ O.li__. __ 0.11$
__,___ __. __ oou__. __o.ou __. __
00,1 __.....___.i-,
-3 .S -2.5 -15 -4.5 o
L'istruzione ,grid(zi ta, wn) consente di tracciare sul piano complesao le curve corrispondenti
11.dei valori desiderati di coefficiente di smorzamento e di frequenza naturale specificai! nei vettori
zita e wn.
È importante osservare che esiste un equivalente discreto del comando 1grid; esso è zgrid e
(guad,poli)•rloctind(sis);
tramite la quale, avendo preventivamente tracciato il luogo delle radici, comparirà sul disegno il
cursore e cliccando dopo essersi posizionati sul punto del luogo dove si desidera vengano piazzati
i poli, si assegnano i vettori guade poli. Se il posizionamento del mouse non avviene esattamente
su un punto del luogo , i valori in uscita saranno riferiti a1 punto del luogo più vicino a quello
indicato . 1 Lo stesso risultato si pub ottenere analiticamente con la seguente istruzione:
l Per terminare l'immissione di dati si usa il tasto RETUR.N .
22.2. IL CONIANDORLTOOL 405
(guad,poli)arloctind(sis,polides);
Anche in questo caso, se nel vettore polides sono riportati dei poli non appartenenti al luogo ,
i valori in uscita sa.ranno riferiti a.I punto del luogo più prossimo a quello desiderato.
1•tf( 1 1 1 );
111•1/(1+1•3);
112•2/(1+6);
113•1/(au+s+1);
Ora., con riferimento alle denomìnazìoni usate per default nell'interfaccia. rltool, importiam o
111come processo G(s) , "2 come prefiltro F(s) e w3 come controllore C(s), la.sciando H(s) = l.
Comparirà la Figura 22,4 con il corr ispondente luogo delle radici per retroazione negativa. Risulta
evidente che modificando il guadagno a ciclo aperto, i poli a ciclo chiuso attraverseranno l'a.sse
Immagine.rio rendendo instabile Il sistema a ciclo chiuso, Ciò si può semplicemente evidenziare
cliccando col tasto di sinsitra del mouse sulla posizione dei poli e spostandoli lungo il luogo {il
corrispondente valore del guadagno a ciclo aperto comparirà nella linea riservata. a C{s)).
Volend o evita re il problema dell'instabilità. al crescere del guadagno a ciclo ap erto, si rende
necessario aggiungere uno zer o nel controllore . A t ale fine, digitando col mouse in corrispondenza
del pallino che compare sull'interfaccia di rl tool à possibile aggiungere uno zero reale ottenendu
in tale modo li luogo riportato in Figura 22.5,
Se ora vogliamo esportare il nuovo controllore progettato nel workspace di MATLAB, basta
selezionare "Export" dal menu "File" e dalla lieta che compare modificare il nome aasegn&to alla
funzione di trasferimento del controllore da. v3 a. v3nev. Quindi , d'ora in poi sarà disponibile ln
MATLAB anche la funzione di trasferimento w3nev.
I
Da.i diversi pulsanti presenti sull'interfaccia grafica risulta immediato verificare la possibilità
di inserire poli reali, inserire zeri e poli complessi coniugati, cancella.re poli e zeri del controllore ,
fare lo zoom, eliminare lo zoom.
Da.I menu principale, selezionando la voce "View", è possibile visualizzare i diagrammi di
• I
Bode delle diverse funzioni di trasferimento coinvolte nello schema di controllo, nonché della
funzione di trasferimento a ciclo chiuso.
Sempre dal menu principale, selezionando la voce "Tools", è possibile invece visua..lizza.re
risposte nel tempo , diagrammi di Bode, di Nyquist e di Nichols. In altri termini è possibile
lanciare il comando ltivie11 le cui potenzialità sono state dettagliate nel Paragrafo 20.6. Sempre
dalla. voce "Tools" è possibile infine ottenere una versione discretizzata . delle singole funzioni di
l
trasfer imento e uno schema Simulink corrispondente al sistema a ciclo chiuso.
Volendo progettare un controll ore mediante il luogo delle radici, visualizzando anche i cor- '
, .'.
i!
rispondenti diagrammi di Bode è possibile utilizzare il comando siaotool. ,.
..,
---------------- ,
.... .........
.............
....................
.
~1----..,,
i ,......_
i ",
1 .............
le
G(s) = (s + 1)3
Come è semplice verificare attraverso il tracciamento del luogo delle radici, questo sistema è~-
stabiUtà regolare, cioè la stabilità del sistema a ciclo chiuso con retroazione unitaria neg&tlva non
è Mslcurata per ve.lori "troppo elevati" del guadagno k. Vedl11mocome è possibile evidenziare
clb con l'e.uslllo dei diagrammi di Nyquiet e del comandi di CON'I'ROL. Digitando --•,I;\,:
t •;._-•
. .)&.
denepoly([-1 -1 -1]); aia•tf(4,den);
nyqui1t(~i1,3•1is)
·,
si ottengono i due diagrammi rappresentati in Figura 22.6 corrispondenti a.i valori k = 4 e
k = 3x 4 = 12. Nella rappresentazione del diagramma di Nyquist, se nelle vicinanze del
diagramma stesso, viene rappresentato anche il cosiddetto "punto critico" -1+ jO. Esao consente I ~;i
di determinare la stabilità del sistema a ciclo chiuso con feedback unita.rio. · w'',::-' =
... . ,,./f.,JS.-
Infatti, in ba.se a.I criterio di stabilità. di Nyquist, il sistema a ciclo chiuso è si.abile ae il
diagramma di Nyquiat della risposta armonica. a ciclo aperto G(jw) circonda. il punto critico
-1 + jO in senso antiorario esattamente un numero di volt e pari al numero dei poli a parte reale .w-:,:~}
... ~
Roollowt
I
! o Ii
f
-1
-2
I
I(
-3
-4
Figura 22.5: Luogo delle radici con un controllore con due poli ed uno zero.
i
22.4 Margini di ampiezza e di fase
I margini di ampiezza e di fase consentono un 'ana.llel delle caratteristiche di stabilità di un sistema
I
LTI chiuso In controreazione. Il margine di ampiezza 11Idefinisce come l'inverso del guaclngno fl1l11
pulsazione cui corrisponde l'angolo di fase -1r . In altri termini indicatn. con w,, la pulsazione In
corrispondenia della quale la fase della. risposta. armonica G(w) va.le -,r, li margine di ampiezza
in valori natutl\li ed in decibel si definisce rispettivamente come :
1
Ma = jG(jw,, )I
Per alatemi eta.bili il margine di ampiezza rappreeenta Bnch1•l'inverso della quantità di cui
el deve aumentaro il guadagno in continua. per portare Il siateml\ e, ciclo chiuso con retroai ione
unitaria al limite di stabili tà .
' Il margine di fase si definisce invece come l'angolo che occorre sot trarre a.Ila fase, alla pul-
! sazione corrispondente a.I valore unitario (aullo in decibel) del mo dulo, per ottenere il valore - 1r.
Indicata con Wt la pulsaz ione in corrispondenza. della qual e il modulo della risposta armonica
vale uno (è nullo in decibel), il margine di fase si può scrivere
+ lG(jw1)
I
M; = 1r
Per sistemi stabili il margine di fase rappresenta il massimo ritardo accettabile nel sistema
a ciclo aperto in corrispondenza delle. pulsazione Wt tale che il sistema. a ciclo chiuso si man-
i'
I tenga. stabile. Cosi come per il margine di ampiezza, un margine di fase negntivo corrispo nde
all'instabilità..
Consideriamo il sistema S1S0 del terzo ordi ne con funzione di trasferimento
i.
r
j
408 CAPITOLO 22, CONTROLLO CON RETROAZIONE DI USCITA
Nyqul11l)j•g,am
•
4
2
;I
<
~ o ········ ·
f. .'
I
-a
-4
-6
-8
.a o a 10 12
4
G(s)=(
.t + 1)S I '
Tramite l'istruzione
margin(tt(4,[1 3 3 1]));
si ottiene la. rappresentazione dei diagrammi di Bode e dei relativi margini di ampiez za {Ga.in
ma.rgin) e di fase (Pha.se margin), così come riportato in Figura 22. 7. ; ..,
Più in generale i margini si possono ottenere tramite una delle seguenti istruzioni •..
• ,i .;.
,}({'_
: .;:z;
~
[ma,mt,wma,vmt]=margin(sis ); ·.:•"•·
(ma,mt,wma,vm1]"'1Dargìn(aìs,w); :.a,·.
dove wma coincide con la w,. precedentamente definita e wmt coincide con w,. Come visto
nell'esempio, una qualsiasi di qoeste istruzioni imposte senza variabili di uscita fornisce una
rappresentazione dei margini sui diagrammi di Bode.
I margini ora definiti possono essere anche visualizzati sui diagrammi di Nyquiet e su quelli
di Nichols. L'individuazione dei margini di ampiezza e di fase sul diagramma di Nyquist discende
in modo immediato dalla loro stessa definizi one. Il margine di ampiezza. sarà pari a.Ireciproco del
modulo corrispondente al punto in cui il diagramma interseca il semiasse rea.le negativo, mentre
il margine di fa.se sarà. l'angolo individuato dal semiasse reale negativo e dalla semiretta che
parte dall'origine e passa per l'intersezi one del diagramma con il cerchio di raggio unitario. Se
ad esempio vogliamo rappresentare sul diagramma di Nyquist rìporato in Figura 22.6 i margini
di ampiezza e di fase possiamo digita.re le seguenti istruzioni
22.4. MARGINI DI AMPIEZZA E DI FASE 400 l
8-0IIQ,1111
Gm • 6.02l8d8 (111 73~,-~ Pm • 27.142dtg(II I 23281-1
20
10
I
J
•IO
•liii
--30
I
...o
.50
..tQ
...s
.90
lI -li5
-180
-m
-270
10· 1
v•logspace{·0.1,2.3,300);
[re,im]•nyquist(tt(4,poly((-1
re•squeeze(re); im•aqueeze(im);
-1 -1])),v); l
p1•tind(ira>0)-1; p2atiod((re.~2+im.·2)<1)-l;
p11•pl(1); p21"'])2(1);
Y. Diagramma di Nyquist )
plot(re,im): axis((-1.5,1.5,-1.5,1.5)): hold on
Y. Disegna il reciproco del margine di ampiezza
plot{O,O,'•',xe(p11),im(p11),•••);
plot((re(p11) O],(im(p11) O));
Y. Disegna il cerchio di raggio unitario
x•-1:0.01:1; y•sqrt(1-x."2);
plot(x,(y• -y'));
¼ Disegna il margine di fase
xm:t•-1:0.01:1; ymt•-sqrt(l-xmt.·2);
p3•tind(xmf>re(p21)); p31•p3(1);
plot(xmf(l:p31),ymt(l:p31));
plot{-1,0,'•',xm!(p31),ymf(p31),'• 1 );
1.5-----------~----..-----.-------.-----,
I ,, ...........
0.5
? -0.5
I
-1
-1.5 L----.1...l.----'-----L-----L------1------1
-1.5 -1 -0.5 O 0.5 1.5
f utilizzal'e il comando ltiview. Dopo avere digitato tale comando, dal meou "File" è p088ibile
importare il sistema aia precedentemente definito in MATLAB mediante il comando
ais=tf(4,poly(-1 -1 -1]);
Col tasto destro del mouse, dalla finestra grafica che appare, è possibile selezionare il diagro.m•
ma desiderato e quindi, sempre col tasto destro del mouse, dalle "Cbaracteristics" seleziona.re
appunto la rappresentazione dei margini.
.l invece la. tineetra. grafica e eetta hold su on in modo che eucceseivamenLe si può rappresentare il
corrispondente diagramma di Nichols.
Vediamo ora come è possibile progettare una rete ritardatrice con l'ausilio del comando
·
40
(22. i)
G(s) = (1 +0.013)(1 + 0.00ls) 1
definibile in MATLAB attraverso le istruzioni
nwn=-40;
denaconv((0 .0 1 1],conv((0.001 1],(0 .00 1 1]));
proce11o•tt(num,den);
.; Stante l'elevato guadagno Il sistema a ciclo chiuso risulta instabile, come si può evincere
anche dal diagramma di Nyquist o dal fatto che il diagramma di Nichols, rappresentab ile con
l'istruzione
nichol1(proc1110)
passa l\lla sinistra del punto (-180, O). SI vuole progeUare una rete ritardatrice (cioè un control-
lore costituito da una coppia zero-polo} In grado di stabilizzare il sistema a ciclo chiuso in modo
da avere margine di fase 45° (vedi Paragrafo 22.4) con pulso.zione di attraversamento wc = 300
rad/e (si ricorda che si definisce pulee.zione di attraversamento quella alla quale si annulla il
modulo in decibel della risposta armonica). Una rete ritardatrice come ben noto presenta una
funzione di trasferimento del tipo
v•logipac ■ (-1,4);
(JD,tJ•nichol1(proc1110,v );
mdB•l0•log1O(11); I
assegna.mo modulo (in decibel), fase (in gradi) e valori corrispondenti di pulsazione rela~
tivamente alla funzione di trasferimento definita in precedenza. I valori di modulo e fase ~
in corrispondenza della desiderata Wt poesono ottenersi con l'Istruzione
(mvt,tvtJ•bode(proc11eo,300);
mvtd8•20•log10(mvt);
Al posto del comando boda in questo caso si poteva naturalmente anche usare Il comando
nichol ■ • La. specifica. ai traduce quindi nel progett o di una rete ritardatrice che attenui
di 1/mwt = 1/11.6 e che, easendo Il margine di fase richiesto pari a 45° 1 ritardi di -180+
45 - /w1 = -30 gradi, alla pulsazione Wt = 300 rad/a.
• Dobbiamo ora trovare la rete ritardatrice (cioè selezlo11are a e -r nella {22.2)) in modo
che il modulo di C(iw) per w = w, sia pari a mvtdB e la fase a -30°. Si tratta quindi di
risolvere un sistema di equazioni nonlineari nelle incognite o e T del tipo
1 +a 2 T 1 wf
ICCiwt)I = (22.3)
wl
1 + -r2
da cui si ricava.
WtT(l - o)
tan [L ( C(jwt))) =
1 + W~T'lCI!
alfa•0.00726; tau•0.0716;
f•aquee2e(f); mdB• ■queeze(mdB);
plot(f,mdB,[fvt -136),(mvtdB O)); hold on;
plot{fwt,mwtdB,'•',-136,0,'•');
nc•(alfa•~au 1); dc•(tau 1]: controllore•tf(nc,dc};
[lll!ll,tt] •nicholl (procHao•cootrollore, v); mmd8•20•log10(mm);
ff•aquee2e(ff); mmdB•squeoze(111111dB);
plot(ff,ll',llldB,'--')i hold off;
che forniscono Il disegno riportato In Figura 22.9. SI not i l'uso del comando 1quuze per
ridurre in vettori gli array tridimensionali ottenuti col comando nichola. In particola.re,
tale riduzione si rende necessaria per potere poi utilizzare questi vettori come argomenti
del comando plot.
2
G( s) - -,,----
- s2 + 14s + 40
Digitando in MATLAB le istruzioni
n11111•2;den•[l 14 40);
gs•t:t ( n11111,
den) : ,
eìsotool(gs)
comparirà la schermata riporta.ta in Figura 22.10. In alto a destra compare lo schema a ciclo
chiuso corrispondente a quello ripor\ato in Figura 22.1: G è il processo da controllare, H ìl
trasduttore, C il controllore ed F l'eventuale pre-compensatore.
Per esaminare come cambia il comportamento del sistema ai variare del guadagno si può
cliccare su uno dei due quadratini che indica.no sul luogo la posizione dei poli a ciclo chiuso e
trascinare il polo tenendo premuto il tasto sinistro del mouse. I diagrammi di Bode cambieranno
di conseguenza.. Variando la posizione dei poli lungo il luogo, l'unica. cosa che acca.de ai diagrammi
di Bode a ciclo aperto, ovviamente, è una traslazione verso l'alto del diagramma dei moduli.
Supponiamo ora di volere progettare un controllore che assicuri un errore di uscita nullo
in presenza di un riferimento a gradino di ampiezza unitaria. Il più semplice controllore che
22.6. IL COMANDO SIS0T0OL 413 l
~0-------,----- .-------,-----.-- ----r--- ---,
20
o
.,..,..,.
, ,,
.,.,
-20 ;
;
,,
;
, ,,
I
-40 I
I
I
-60 I
I
I
. ~ e"".""'Co
mp
••••~'.
-~I 1.~sj
,...
" 1, ..
.,;,:; ~
,lil\: I
. ~~=;~
L '•
.
I._____~
q,s)_= 11
___ " 'l"ffJI.~¾
~
•:5.;•!°'G
l.1'1.~* -
' I,
• ~t,i.fò
•I
' o~- -- - -- - ---~ ",;*';:.~:-\
· 't_.;;
-~~-~
..-~
;;;.<..if1
,.
••• 9)
\
) PM .. tnt
-la) Frct Na.N
i 100 IC,1 • ~•;Y
Freq•Jtn..-y(rad/HG)
In Figura 22.11 risulta evidente che, seppure le specifiche di regime so110verificate, le prestazioni
dinamiche del eietema e, ciclo chiuso sono fortemente peggiorate. ,t,w,-.,•r
Per migliorare le prestazioni dinamiche ed assicurare un sistema a ciclo chiuso che eia asintot- :,,;~i:"\':
; ~~1'-
1
icamente stabile indipendentemente dal valore (positivo} del guadagno a ciclo aperto, possiamo il'; ,}j.1-._
f aggiungere uno zero nel controllore. Per fare ciò, dalla schermata principale di sisotool, si deve •• 1-J.i ,.-,;~-
_.
,:ti - {'
cliccare col tasto sinistro del mouse sulla c88ella con cerchieUo (simbolo dello zero) riportata In • t~ , , " •
alto 11.sinistra e quindi cllcr re nuovam11nte col tasto sinistro del mouse In corrlspondanaa del
punto <leiluogo dove el dellk,Jra Inserire lo iero. Nel caso specllìco el o~llene la achermata ripor-
tata h1 f'igura. 22.15i la risposta al gradino del sistema a ciclo chiuso diventa quello. riportata In
Figura 22.16.
Supponendo di volere assegnare In MATLAB il controllore progettato, bìéogna selezionare ,• -~~
•;
"File" e poi "Export". Selezionando il controllore C(8) nella tabella. che compare {Figura 22.17)
si oUiene l'assegnazione desiderata. t .·
Prima di concludere il paragrafo, riportiamo ore. in sintesi le principali funzionalità del "".:
comando eiaotool. '"f
• Opzioni gt"afiche per i diagmmmi. , .
·!
l
Selezionando "File" e poi "To olbox Preferencee " si possono modificare le unità di misura., 'ti, .
lo stile delle linee, il tipo di rappresentazione della funzi one di trasferimento del controllore . • ~1;',i
.. ··°ajC
:•t
• Modificare il contf'Otlore. ,-•..1\:\.\.Ìè ,
.........
Si possono usare i t88ti in alto a sinista nella schermata principale: la crocetta per ag-
giungere un po lo, il cerchietto per aggiungere ono zero , le due crocette per aggiungere poli
complessi coniuge.ti, i due cerchietti per aggiungere zeri complessi coniugati, la gomma
per cancellare poli o zeri del controllore. Alternativa.mente •ei posaono aggingere zeri e
poli cliccando due volte col tBSto sinistro del mou6e sul blocco controllore nello schema
22. 7. ESERCIZI 415
o.,
oe
0.1
O.I
in alto a destra sulla schermata principale. Inoltre, poli e zeri possono essere aggiunti
o eliminati, sia sul luogo delle radici che sul diagrammi di Bode, cliccando col tasto di
destra del mouse su una delle LreRnestre grafiche (luogo delle radici, Bode modulo e Bode
fase) presenti sulla schermata principale, Un altro modo per aggiungere o rimuovere poli
e zeri dal controllore b selezionare do.Imenu 11Edlt 11 una. delle due optloni 11Root locus" o
"Bode".
• Nuovo aistema.
Bisogna ripetere la procedura di importazione: dal menu "File", scegliendo "Import" è
poaelbllescegliere uno del sistemipreventive.menterapppreeentatl In MATLAB,
22.7 Esercizi
Esercizio 22,1 Si traccino ì luoghi delle radici relativi alle seguet1tifunzioni di trasferimento
a ciclo aperto
416 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA
<:rimpPn sn1nr
•} I 1111 l!!lriilEl
I Galn: j1 ·- ··>
.. Format: lzero/PoleLooation
l
Gi(s) ==s(s + l){s + 2)'
si rappresenti sulla stessa finestra grafica tanto il luago delle radici quanto i relativi a,intoti.
Suggerimento. Si ricordi che detti n ed m il numero dei poli Pi e
degli zeri z; rispettivamente, gli asintoti del luogo delle radici forma no
una stella con centro nel punto dell'asse reale
O' ==L~=l
'R(pi) - L:,1'R(zi)
n-m
dove con 'R.(pi) (z,) si è indicata 1a parte reale del polo {dello zero),
ed angoli (supposto il guadagno a ciclo aperto positivo e la retroazione
11.nitarianegativa)
= (2a + 1)7r'
8 1 a= 0 1, ... , n - m - 1
1
n-m
22. 7. ESERCIZI 417
lii! f
,. I
/
IO
~ ./
/
/
i
l' ..
o
·+·\ ·
-1:?1
~ \
t!"''"' ·i
... \ ~ i~
........ ·. I
,., \
.. .;,, :.'I
\
'•· •
J~ ,,,..,01..,,
1(,c:
..
,o·' ~l 1il'
;\.;.: ....
•. 11~ltA4-"IAI:.)
..I
Figura 22.13: Schermata di sisotool con un nuovo compensatore.
Esercizio 22.4 Si rappresentino i luoghi delle radici relativi alle /unzioni di trasferimento
s+2
G )
(s = s3 + 0.95 s2 + s + 0.95'
1
s+Ul
G2(s) = s3 + 2 s 2 + 2 .,
....
relativamente alle retroazioni unitarie tanto negativa quanto positi11a.Si analizzino in particolare
gli effetti della f'etroazione positiva.
l
Esercizio 22.5 Dato il sistema con funzione di trasferimento
1
l
G(s) = (s + l){s + 10}
usando il comando rlocus si progetti un controllore di tipo Proporzionale Integrale ( PI) tale cl1e
il sistema a ciclo chiuso presenti dt,e poli dominanti, tmo risposta indicìale con sot1raelongazione I
I
del 5 % (corrispondente a ç = 0.7) e un tempo di assestamento pari a 9.2 s (corrispondente ad ' I
una parte reale dei poli pari a -0.5). Effettuare quindi un confronto tra la risposta indiciate !
del sistema a ciclo chiuso con e .tenza il controllore progettato. È pouibile ottenere le .ttes3e
prestazioni con un semplice controllore di tipo Proporzionale (P)P E con un controllore di tipo
Integrale (!)?
?
Pll = s- + 8 + 1, pu = s 2 +a+ 2
P 22 = s + 2 s + 2,
2
P21 = s + 2 s + l
2
418 CA.PITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA
OJ
oe
I i
eo 100 1IO
l'M(lt<I
l Figura 22.14: Risposta al gradino del sistema a ciclo chiuso con C(s) = 1/s.
,i uerifichi che gli zeri di p(s, 1r), al variare di 1r1 e 1r2 negli intervalli suddetti, appartengono
sempre alla regione del piano complesso delimitata dai luoghi Pll + kp12, P12 + kp22, P22 + kp:n
ì e P21 + lcp11, con k E I0, 1] (questo risultato é il coaiddttto "Edge Theorem'').
Esercizio 22 . '7 Data la funzione di trasferimento
G s) ::: lOOOk
( (s + 0.5 ± 0.4j}(., + 2 ± lOj)
si calcolino i maryini di ampiezza e di fase per k ==1. Si determini per quale valore di k ai
ha un aistema a ciclo chiuso stabile, ma non asintoticomente stabile ed il valore di k per cui ai
ha un margine di fase pari a 30°. Si analizzino le ris11ettiuerisposte al gradino. Introducendo
un ritardo ingrtsso-uacita, ai uerificl1i che il massimo ritardo aul sis,ema a ciclo aperto che
mantiene lo stabtlitd del sistema a dclo claiuso l pari a At = m~/wt, dove m~ é il margine di
fase e Wt la frequenza di attrauersamento.
Esercizio 22.8 Si calcolino i marigini di fase e di ampiezza relativi alla funzione di trasferi-
mento
0.1 10
G1{s) :::
2s +s'
G2(s) = --
2., + S
0.1 10
G3(s) ::: -, G4(8) = --
2s- 5 2a - 5
22. 7. ESERCIZI 419
) ou,.,,,..,,J,. , ,, ... ,, ll!!lr.:ll:I
.,._ ~ ~ C--• I- ~ ~
.._G_·_~_:,_2a:c.....-===-·
1
_'_·_:-_' ___________
_I.OC.,
__.I 1.~,I
~holC!&l91m
D
!
Il
IO
i 20
J ~
1 o ... ~...
....... ,......
:O (Ut 1W
I
•
1
! ...--·
◄
:
r .,
...~
·10
3
.,.
•IO
, ...............
4 .. •N l.\llf
• '
i
;
l-•:-e
, '"····
...
lii>
~ ...,..,
,,
,o• __ ..,io'
Alaht•olln • ,._. ,_tAI
_, ,...,....,...,.
k
G(-') = (s - l){.t + 5)
con k = 1 e k = 10. Per quali di questi due valori di k il sistema a ciclo chiuso risulta stabile?
Esercizio 22.13 Data la funzione di trasferimento
2
G(s) = le s + 2 s + 101
s3 + 7 si + 1 s - 15
si determini mediante il criterio di stabilitd di Nyquist e co11 l'ausilio del relativo diagramma
per quali valori di k il sistema a ciclo chìuao risulta stabile.
. Esercizio 22.14 Si calcoli con l'ausilio del comando nyquht il valore di k per cui il sistema
con funzione di trasferimento
ai.,11e....,..
u------------------T---------,
oa I.S
Figura. 22.16: Risposta al gradino del sistema a. ciclo chiuso con C(s) = 243(1 +
0.49s)/s.
G(s) _ 150
- s(s + l0){s + 20)
usando il comando nichola si progetti una rete anticipatrice che assicuri un margine di fase di
45° con p1Jlsazionedi attraversamento pari a 8 rad/ s.
G(s)=10s2+7s+l
s(s + 1}3
usando il comando nichols si progetti una rete correttrice che assicuri un margine di fase di 30°
con pulsazione di attraversamento pari a 10 rad/s. Si calcoliquindi il guadagno del controllore di
tipo proporzionale che fornisce lo stesso margine di fase. Usando il comando etep si confrontino
quindi le rispode dei sistemi a ciclo chiuso, con e senza i controllori progettati. Si costruisca
uno schema S/MUL/NK del sistema a ciclo chiuso e si ponga una satura.ziòne prima del blocco
corrispondente al sistema, sim1Jlandola saturazione dell'attuatore. Utilizzando ±1 quali limiti
della saturazione, si verifichi l 'inftuenza della saturazione rispetto alle risposte al gradino del
sistema ciclo chiuso ottenute in assenza di saturazione.
22.7. ESERCIZI 421
\
Figura 22.17: Schermata dì "Export '1 •
Eserc izio 22.17 Si acriua una MA TLAB /unction che, dato un st,tema S/S O roppre,entato in
termini di funzione di trasferimento o nello spuio di stato e dati il margine di fase e la pulsa,ione
di attrauersamento desiderati, fornisca in uscita i parametri relativi ad un controllore tipo rete
ritardatrice, qualora questo consenta di soddisfare le specifiche richieste, o un segnaledi errore.
1
G(8 ) = -s(_l _+_O
_.O_l_s
)-2
422 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA
si progeUiun controllore di tipo Propor:iionaletale che la risposta al gradino del sistema a ciclo
chiuso abbia un tempo di salita tr = 0.07s.
I G(8 }
= s(l
1 + 0.2s
+ 0.018) 2
si progettinc,.,duecontrollori di tipo Proporzionale tale che il sistema a ciclo chiuBo abbia una
banda a 3dB pari rispettivamente a 30 rad/a e 570 rad/1. Successfoamente ai effettui un'analisi
del aiaterno usando il luogo delle radici, i diagrommi di Bode e quelli di Nyquist. Quindi,
costruendo un opportuno achema SIMVLINK, si confrontino le risposte indiciali dei due sistemi
a ciclo chiuso su un intervallo temporole di h. È possibile aumentare ulteriormente il guadagno
del controllore e con quali corueguenze?
10
G(s) =
s(8 + l)(s + 3 ± j)
,i progetti la rete anticipatrice tale che il sistema a ciclo chiuso abbia una banda a 3 dB pari a
0.52 rod/1.
G(s) - 100
- (8 + 1)3
si progetti un controllore tale che l'errore a regime ad una rompa unitaria sia del 10%, il maryine
di fase sia di 40° con pulsazione di attrauersamento pari a 10 rad/s. Successi11amentesi realizzi
lo schemo.S!MULINK corrispondente al sistema a ciclo chiuso e si determini se il controllore ·
proposto verifica le specifiche richieste. Quindi si in,erisca a uolle del controllore un ritardo
=
finato pari o r 0.05, 0.1, 0.2 s analizzando I~ prestazioni del sistema.
j Suggerimento. Il controllore oltre ad u.n polo nell'origine e ad un
opportuno guadagno, dovrà essere composto da più reti correttdci in
cascata;per il progetto di tali reti può essere utile consultare gli op-
portuni abachi. Il ritardo finito sì può realizzarecol bloccoSIMULINK
Transport Delay.
Capitolo 23
In questo capitolo saranno descritte le funzioni di CONTROL utili per il progetto di un con-
trollore mediante retroazione di stato e per la stima dello stato nei sistemi LTI. Per la completa
comprensione di quanto segue si rende necessaria la conoscenza di alcune teorie cli base dei Con-
trolli Automatici, nonché di a.lcuni concetti del Controllo Moderno per i qua.li si rimanda. a testi
universita.ri di ampia. diffusione. La lista. delle istruzioni utili a tale tipo di progetto è qui di
seguito riportata.
Si noti che, fatta. eccezione per il comando phce, tulLi gli altri comandi della. tabella.
precedente sono specifici per sistemi tempo-continuoe non p088ono essere utilizzati per elete-
mi tempo-discreto. Per I corrispondenti comandi da utilizzare con I sistemi discreti si veda Il
Paragrafo 24.8.
Esamineremo in dettaglio ora. queste istruzioni, separando le trattazioni relative ai seguenti
argomenti: la. retroazione di stato, il progetto di un osaervntore, il controllo ottimo Lineare
Quadratico, il filtro di Kalman ed il principio di separazione.
·I·
I:
'··
23.1 La retroaz ione di stato
Come noto dalla. teoria. dei Controlli Automatici, dato un sistema. completamente controllabile,
è po88lbile aura.verso una retroazione lineare dello stato piazzare i poli del sistema a ciclo chiuso
I .
424 CAPITOLO 23. CONTROLLO E STIMA NELLO SPAZIO DI STATO
:i:=Ax+Bu
e la retroazione linea.re dello stato
u = -Kx
Il sistema a ciclo chiuso diventa
:i:=(A-BK)x
dove la matrice K consente di assegnare i poli a ciclo chiuso.
Consideria mo il sistema descritto dalle equazioni
:i:1 = :r:2
:i:2 = -2 :r2 + u (23.1)
y = ~l
Tale sistema., assunta xi una posizione, ~:i una velocità. ed u una coppia, può ad esempio
rappl'esentare il modello delle. sola parte meccanica di un motore elettrico. Dal luogo delle radici
di questo sistema (relativo cioè ai poli del sistema a ciclo chiuso ottenuto retroa.zionando la sola
variabile z1 ), ottenibile con il comando
si evince che, al variare della costante di retroazione, non è possibile piazzare i poli del sistema
o.ciclo chiuso dove si vuole nel piano complesso. Ciò può invece ottenersi con una retroazione di
tutto lo stato. Se ad esempio voglio conoscere i valori di k1 e k2 tali che Il sistema a ciclo chiuso
rappresentato in Figura 23.1 abbia poli in -2 ± j posso usare il comando
ti X2 X1
+ + 1 l
s+2 s
- -
k2
k1
K=place(A,B,polides);
K•acker(A,B,polides);
\.
ai ottiene la matrice dei guadagni di retroazione T<te.le che I poli del sistema. a ciclo chiuso
coincidono con quelli specificati nel vettore polidea. In particolare il comando plact si ue&
anche per un sistema. con più Ingressi (tutti considerati come ingressi di controllo) mentre acktr
I
solo per sistemi con un solo ingresso .
L'istruzione place calcola la matrice dei guadagni di retroazione mediante la formula
dove Q è una matrice simmetrica semidefinita positiva., mentre Runa matrice simmetrica definita
positiva ed entrambe vengono dette "matrici di peso". L'ipotesi necessaria sul sistema affinché
I
tale problema abbia soluzione è che la coppia (A, B) sia controllabile o almeno stabilizzabile (cioè
tale che la parte non controllabile risnlti asintoticamente sto.bile ). Sotto queste ipotesi si ricava
che il gudagno di retroazione è dato da
L
o o 1 o
o o o 1
_il !.. _,!_ o
m
1cm _1!_ o _i,
m m m
,I
Scegliamo come parametri m = l k9 1 k = 1000 N/m e b ==5 Ns/m. Supponiamo ora di voler
· progettare un controllo LQ che minimizzi la variazione della posizione relativa delle due masse ,
desideriamo in altri termini che le masse sia.no quanto più possibile tra loro solidali. Il nostro
indice di qualità può essere quindi del tipo
426 CAPITOLO 23. CONTROLLO E STilvfA NELLO SPAZIO DI STATO
I
;,?
:,.;aJ
) ,. '
-•
'
ì
Figura 23.2: Sisten~ameccanico masse-molle.
K•lqr(A)P,Q,r);
\ Confrontiamo ora le prestazioni del sistema a ciclo chiuso con quelle del sistema non contr ol-
-~ ~.;.i}
.,
lato. Definiamo innanzitutto i vettori che individuano gli istanti di tempo e il disturbo d (per ....
l quaat 1ultimo 1 su un Intervallo di simulazione di 2 a1 si è scelto un segna le costante e dl ample:aaa ~,~·":'
~ ifj;
•
b I l(• ' •
1000 per il primo secondo e nullo succe8Bivamente): ·~f-
.. 11>:.
t•0:0.001 : 2; d=(1e3•ones(1,1000) zeros(l,1001)): i.4:fd
·~·.\
li confronto des ideral o si può quindi ottener e con i coman di .!f:, ' "
~~~
1i1=11(A,B,C ,D);
Ac•A-B•K;1i1cc•11(Ac,B,C,D);
(y,t,x]•l1im(1i1,d,t); • ,.J
(yc,tc,xc]•l1im(1i1ee,d,t);
plot(t,[x{ : ,1} ~{: , 1)]);
figure{2);plot(t,(xc( : ,1) xc(:,2)]);
0.8
0.8
0.4
0.2
-0.2
[K,P,E]•lqr(A,B,Q,R);
Talvolta minimizzare l'integrale di una norma pesata dello stato sommata ad una norma
pesata dell'ingresso o non è sufficiente rispetto alle specifiche richieste o non è ciò che ai desidera
direttamente. In particolare è possibile che si desideri tener conto anche dell'effstto diretto di
accoppia.mento Lra ingrosso e stato, oppure si vuole iener conto <lell'uscitn anzicché dello stato.
lntereMa In altri termini la minimizzazione di Indici di qualità del tipo
o del tipo
J = 1 00
(K,P,E)•lqr{A,B,Q,R,N);
(K,P,E]alqry(sis,Q,R);
i
.f dove sia è l'oggetto corrispondente al sistema rappresentato n~llo spazio di stato. :I
Spe88o, pur avendo effettuato Il progetto nel dominio del tempo continuo, si rende neceeso.ria )
I '
una implementazione del controllore di tipo diacreto. ln te.I ce.so, eITet\uato il progetto nel ··I
,.
dominio del tempo-continuo e ricavate quindi le opportune ma.trici di peso, si può ricova.re la 'I
,r I
0.6
0.6
0.4
-o.a
-0.41-----1---.J.--....L.--....L..---'---.&..----'---I..--....L..---.J
O 0.2 0.4 0.8 0.8 1 1.2 1.4 1.8 1.8 2
tampoI&}
(K,S,~J•lqrd(A,B,Q,R,N,Tc);
dove Te è il tempo di campionamento, S è la soluzione dell'equazione discreta di Ricca.ti,E contiene
gli autovalori della matrice Ad-Bd•K con Ad e Bd le matrici ottenute tramite una discretizzazione
con l'istruzione c2d e dove eventualmente la matrice N, nel caso non vi sia. accoppiamento ingresso-
etato, può essere omessa.
Gli stessi riaultt\ti ottenuti con l 'ist.ruzione lqr possono essere anche ottenuti con l'istruzione
lqr2 che utilizza un metodo diverso detto di Schur che risulta più lento ma. anche più robusto
nel caso in cui li sistema non sia. diagonalizzabile.
23.3 L'osservatore
Il progetto di un controllore attraverso retroazione linea.re dello stato presuppone di avere accesso
diretto a tutto lo sta.to del sistema. Questa ipotesi nella pratica è spesso lontana dall'essere
verificata. In questi casi sì rende necessario il progetto di un osservatore che, a. partire dalla
conoscenza degli ingressi e delle uscite del sistema fornisca una. stima dello stato. La struttura
classice. dì un osserva.tare consiste in una. replica. del modello del sistema con l'aggiunta di un
termine che tiene conto dell'errore tra uscita. misurata e uscita. stimata. In termini di spazio di
stato, denotando con x lo stato stimato, l'osservatore ha. una dinamica del tipo
: ~
-':- t,
•• 1l
; ii
23.3. L'OSSERVATORE 429
L=place(A',C',polidea)•:
dove nel vettore polidea vanno assegnati i poli che si desidera caratterizzino la dinamica del-
!'osservatore.
Vediamo ora un eaempio dell'uso del comando place per il progetto di un osservatore.
Consideriamo il sistema (23.1). Tramite le istruzioni
l
rank(obav(A ,C))
si evince che il sistema è osservabile essendo il rango della matrice di osservabilità uguale all'ordine
del sistema. Gli autovalori della matrice dina.mica sono Oe -2. Si vuole progettare un osservatore
che consenta la stima della seconda variabile di stato {la prima coincide con l'uscita) e che abbia.
i poli in -10 ± j. Con il comando
i Co=eye(2); Do=zeros(2,2);
si aasegna.no le matrici dell'osservatore che ha come uscite la. stima. dello eta.te del sistema.
Per vel'ificare le prestazioni dell'osservatore progettato consideriamo l'evoluzione dello stato del
I
sistema e la sua stima in presenza di un ingresso a gradino di ampiezza unitaria. Per quanto
riguarda il sistema basta digitare
si1a11(A,B 1 C,D);
I [y,t,1J•1tep(1i1,0:0.0l:~);
Assumendo come stato inizia.le dell'osservatore il vettore (0.2, -0.4), lo stato dell'osservatore ed
una rappresentazione dello stato vero e di quello stimato possono ottenersi con le istruzioni
xo0..,(0.2 -0.4);
siso=ss(Ao,Bo,Co,Do);
(yo,to,xo)=lsim(siso,[onea(size(t)) y] ,t,xoO);
plot(t,x,to,xo,'.');
de.Ile quali si ricava la Figura 23.5 dove le variabili stimate sono rappresentate con puntini.
È importante ribadire che la simulazione nel tempo qui considerata poteva anche essere
ottenuta in modo altrettanto semplice utilizzando SIMULINK.
Le matrici dell'ossevraotre possono essere calcolate facendo uso del comando eetim. L'istruzione
place consente di progettare la matrice dei guadagni, ma non costruisce il sistema dinamico "os- ,• I
.t I
servatore". Per ottenere quest'ultimo, dopo aver ricavato la matrice dei guadagni, si può appunto
impiegare l'istruzione estim. In particolare con l'istruzione
(Ao,Bo,Co,Oo]=estim(A,B,C,D,L);
430 CAPITOLO 23. CONTROLLO E STl!vIA NELLO SPAZIO DI STATO
-0.2
-0.4
-0.8 ,__ _ __. __ _._ __ ...J._ __ ..__ _ __. __ _._ __ ....1...__ _,__ __ .__ _ __,
i = (A - LC)i + Ly
(~) = (~)x
mentre tre.mite l'istruzione
[Ao,Bo,Co,Oo]•estim(A 1,C,D,L,mis,in);
ai possono specificare nei vettori mia e in gli indici relativi rispettivamente alJe uscite (misure)
ed agli ingressi non di cont.rollodel sistema che costituiscono gli ingressi per l'o88erva.tore.
i
'( i = Az+ Bu+ Gw
y = Cx+ Du +v
dove il rumore di processo w ed il rumore di misura 11 sono tipicamente assunti p'roceasl stocastici
gaussiani l>lancbi.In questo caso il progetto di un osservatore nella sua. forma cla.&Sica.
fornirebbe
dei risulta~i non accettabili e quindi deve esaere impiegato un filtro di Kalrnan. La sua struttura
è
23.4. IL FILTRO DI I(AL!vIAN 431
(L,P,E):lqe(A,G,C,Q,R);
o 1 o
MXJr9
o o
(23.2)
o o o
-v o o
dove :z:1ed x:i = .t1 sono rispettivamente la posizione e la velo cità angolare del pendolo, mentre
:z:sed :z:4= :i:3 sono la posizione e la velocità della massa M.
Per ricavare il modello (23.2) si deve tener conto che il centro di massa relativo alla massa
m ed a.I pendolo ha coordinate xc = :i:3 + l sin :i:1 e !IG = l cos x 1 e che le energie cinetica e
potenziale del sistema complessivo possono scriversi come
i (8L(:z:) ) _ 8L(x) =O
dt 8:t1 8:c1 '
si ricavano le equazioni
+
m .2:3 ml :i:1 - mg :z:1= O
(M + m) za+ ml it1 = u
Introducendo z2 = :i:1 e :z:,i= :i:a, con semplici passaggi si ha il modello (23.2).
..;
1!J
'
432 CAPITOLO 23. CONTROLLO E STIMA NELLO SPAZIO DI STATO
A pa.rtlre da questo modello consideriamo per semplicità. le equazioni relative alle eole prime
due variabili di stato la cui evoluzione non dipende dalle altre due variabili di stato. In altri
termini consideriamo Il sistema
:h = z2
:i:2 = OZ l - ,8u + V . :•
Y Z1 + W=
dove o = (M + m)g/Ml e /3:: 1/Ml sono delle costanti, v è un disturbo che rappresenta ad
esempio la coppia risultante dall'azione del vento di intensità e direzione variabile e w è un rumore
di misuri\ sulla posizione angolare del pendolo. Assunto M = 2 kg, m = 0.1 kg ed l = 0.5 m si
ricava a = 20.6 e /3 = l. Ci interessa quindi stime.re posizione e velocità del pendolo mediante
un filtro di Kaiman. Definite le matrici
Aa(O 1;20.6 O]; B=[0;-1) i
C=[1 O]; D=O;
tra.mite l'istruzione
~•lq1(A,[O 1),C,10,1);
et calcola la matrice del guadagni del filtro !\vendo assunto come covade.nia del rumori di processo
e di misura rispettivamente 10 e 1. Possiamo ora defìnire le matrici che caratterizzano il filtro:
At=A-L•C; Bt=(B-L•D L);
Cf=C; Df=zeros(2,2);
Lasciamo a.I lettore la verifica delle prestazioni del filtro di Kaiman o in MATLAB seguendo
una procedura analoga a quella riportata nel Paragrafo 23.3 oppure costruendo un opportuno
schema SIMULINK.
Analogamente e.l caso dell'osservatore, anche le matrici del filtro possono essere calcolate
fa.cendo uso del comando estim:
(At,Bf,Ct,Df]aeetim(A,B,C,D,L);
Nel caso in cui i rumori di processo e di misura sia.no tra loro correlati con una matrice di
correlazione N, si può impiegare l'istruzione
[L,P,E)Plqa(A,G,C,Q,R,N);
Gli stessi risultati ottenuti con l'ietruzione lq• poesono esse1·eanche ottenuti con l'istruzione
11:1•2che utilizza un metodo diverso detto di Schur che risulta più lento ma anche più robusto
nel ca.so in cui il sistema non sia diagonalizzabile.
L'istruzione
(L,P,E)•lqov(A,C,C,H,Q,R);
calcola invece lo. matrice dei guadagni di Kaiman. relativamente al sistema
dove keat fornisce un modello nello spazio di stato del filtro di Kaiman
! = (A-LC)t+Ly+(B - LD)tJ
(~) = (;)x+(~)u
e P è la soluzione dell'equazione algebrica di Riccati
sis=ss(A,B,C,D);
sier=reg(sis,K,L);
1i1r•reg(eia,K,L,mi1 1 in,eont);
l
dove l'ultima va utilizzata nel ca.so si debbano specificare quali uscite, ingressi non di controllo
ed ingressi di controllo intervengono nel progetto del sistema complessivo.
23.6 Esercizi
Esercizio 23.l Dato il sistema costituto da un doppio integratore si progetti lo, retrollzionedi
stato che porti i poli del sistema a ciclo chiuso in -1 ± j.
• I
1
G( 8 ) = -,(-s-+-1}-(s_+_2_}
Si progetti una retroa,iione di stato tale che il sistema a ciclo chiuso abbia i poli in (-2 ±
3j, -10). Successiuamente si ualuti la risposta al gradino del sistema a ciclo aperto e di quello
a ciclo chiuso.
434 CAPITOLO 23. CONTROLLO E STI1WA NELLO SPAZIO DI STATO
( !~) = ( -~ -! ) ( :~) + ( i ) u
y = (1 -1 ) ( :~ )
Si progetti un controllore tale che il siatema a ciclo chiuso sia di tipo 1 e abbia poli in
(-1 ±j, -10).
I G(s)- "+ 7
- (1+2)(,+ti±j)
uno retmaiione di atato tale elle ti siatema a ciclo chiuso abbicJpoli in (-1 ::J:.j, -16}.'
prvgetta,--e
Supp0t1tooro taon acceuibtle lo stato, ai progetti un oaseNJatorela cui dinamica aia "sufficien•
temente'' più veloce di quella del sistema. Si confrontino infine le riaposte ad un gradino dei
sistemi a ciclo chiuso ottenuti con 1-etroazìonedello stato effettivo e di quello stimato supvonendo
I 'ouervator-e con condizioni iniziali diverse da quelle dello stato effettivo.
Esercizio 23.6 Si scriva una MATLAB /unction che, date in ingresso le matrici di un si4tema
f S180 in cui l'uscita coincide con una delle variabili di stato, /orniaca le matrici relatiue ad
un osservatoredi ordine ridotto, cioè all'osservatore che stima solo le variabili di ,tato dfoer8e
dal'uscita.
(1::1~;
) (::) + ( ;~ ) u
y = ( I O ) ( :~ )
:i;= 2x + u, y =%
23.6. ESERCIZI 435
00
J = fo (y(t) 2 +ru(t) 2 } dt
con diverai 11alot'idella costante r. Si confrontino quindi le napoate indìciali dei diuersi 1i11temi
a ciclo chiuao. Coaa accade considerando le ateaaematrici di µe8o nel caso in cui nell'equaiione
dinamica al posto di 2 e'~ -2'
i:=a~+ffo.
con a e {J quol,saai ma diversi do aero, si progetti una retroa,iorie di atato che minimfats 1'indice
di qualità
J = 1 (q00
x(t) 2 + r u(t) 1 ) dt
con dfoerai valori delle costanti positfoe q ed r, ma in modo da mantenere inalterato il rapporto
q/r. Come varia il guo.dagno di retroa.zione al variare dei pesi ,celti? Come si apolta il polo a
ciclo chtuao per q ➔ O (oppure r-+ oo) 'I Verao dove tende il polo a ciclo chiuso quando q ➔ oo
(oppure r ~ O) nel ca,o di o negativo o posWuo riapettivam1J11te'I
dove :ci ~ una pom:ione, x2 una velocità e la variabile di controllo è una coppia. Si progettino
le due retroazioni di atato che minimi.uino gli indici di qualità con R = 1 e Q1 = diag(lO, O) nel
primo caso e Q2 = diag(O,10) nel secondo. Si confrontino le risposte indiciali dei due sistemi a
ciclo chiuso.
Esercizio 23.10 A partire dal sistema dinami co descritto nel pr-ecedenteesercizio, si progetti
un controllo ottimo che consenta alla variabile xi di inseguire una posizione di riferimento del
tipo
J = 1 00
• I
: I
:: 1·
.,,
I·
lf
.
Considerando inizialmente t ==O, si progetti la retroa.iione di stato che minimiua l'indice
di qualitd . ···~
:.•
J = 1
00
(x1(t)-x2(t))
2 2
+ ru(t) ) dt • I
con r ::: 11 10- 2 , 10- 4 , St uerifìchi che con il Jc progettato in condizioni nominali, i diuer,i .
.fistemi a ciclo chiuso diventano inatabìliper E = -8, -0.9, -0.2 rispettivamente.
::;~~,
.
-~
;
•~1
... 1.:(
~-◄
•
~
{
'
:r' ~
)
.~i
ti ·,,
j,,T, i
? .r;1,\. ..:-, ,
: ,::ffb_';~ .
•.·1..,~•
.. • ·\-""ti•
, •. , t
:~.;
~
•.•1,~,.
~.-
.;1:;.l.>
_f,
:-i
~~
.
,-:!;r.~ ..
.•.
· ,cl~:s.
~9
• i::'l·• ·
' ,:;U'.• f,
h :ti°~
;.>•~··
.-i.fr&
ii
,t~~--1
. i,..,,_.,
•.t
1 •
'',··:'SI.~,,;!
. ti
• ·t "F.i._,.
l!
di."~.;:.
. : j~i~~jf
. . ....~i'"·
i;z
~U
··'1!,
Ht,, '
. _.,.~
.,.,.,.:1,
.....•"~ , I,)
\·~li
:1ifd
t!
. '~·~:,{
··®'~
~·
.,.,~.-~
·;"W~r:1
'q/·~
-.!·
;
-,.~~~~
/Mit..
-/'~~;,
""•
...·-~
"".i" .. ~~
. ,._._';(
~..~hl_
~/{,~
1;...{"'~
.
a,.."}
t~f :
'f~'!i
1
t:"'J• t(
I
Capitolo 24
l
L'avvento dei siatemi di elaborailone numerica nell'implementa.ilonedel controllori ha reso di
fondamentale Importanza l'analisi del sistemi tempo-discreto. In questo capitolo saranno breve-
mente descritte le Istruzioni di CONTR.OLutilizzabili per tali siatemi. E importante sottolineare
che la maggioranza delle Istruzioni precedentemente presentate sono utilizzabili, oltre che per
sistemi tempo-continuo, anche per i sistemi tempo-discreto.
u(t) = 1t e('T}dr
l
Dividendo l'intervallo di integrazione in Jc intervallini (ti, t;+1 l con i = O, ... , k - I, posto
to = O e t" =t, potremo scrivere:
Supponendo ora che cia:Jcun intervallo tempora.le sia di lunghezza costante e pari a. Te (il
tempo di campionamento) e che l'istante finale di integrazione sia un multiplo di 'Te , cioè
t>: = kTc, posto u(k) = u(kTc ) la precedente relazione può riscriversi come
JiT.,
u(k) = u(k - l)
Quest'ultima equazione è un esempio delle cosiddete equazioni alle differenze, delle equazioni
cioè èhe, più in genera.le, forniscono l'uscita di un sistema in un istante di tempo discreto in fun-
zione dell'ingreaeo e dell'uscita valutati in un certo numero di istanti di tempo precedenti. Noto
il segnale di ingresso e(k), il modo più semplice per ricavare il segnale u(k) è applicare iterati-
l: vamente l'equazione alle differenze. Ad esempio, anpponendo di volere calcolare numericamente
I l'integrale dj una. rampa di pendenza unitaria attraverso la (24.1) si possono usare i seguenti
comandi MATLAB:
Tc:0.1; k•100;
e•O:Tc:k•Tc;
u(l)•Tc•e(l);
tor i•2:k+1
u(i):u(i-l)+Tc•e(i};
end
I Per l'analisi e la. manipolazione dei sistemi tempo-discreto, analogamente al ca.so dei sistemi
tempo•contlnuo, risulta speseo vantaggioso utilizzare una rappresentazione in termini di funzione
di trasferimento Bnzicché quella in termini di equazioni alle differenze. La funzione di trasferi-
mento di un sistema LTI discreto si definisce come il rapporto tra la 2-trasforma.ta del segnale
00
H } .a-0.l z-0.1
(z = (: - l)(z + 0.5) = z 2 - 0.5z - 0.5
Per assegnare in CONTROL questa fun.iione di trasferimento posaiamo usare l'istruzione
che fornisce
Tr&.111ter function:
z - 0,1
Tc=0.01;
hz•t:t([l -0.1],[1 ·0.6 -0.5),Tc)
che fornisce
Tranafer function:
z - 0.1
z•tf('z',Te);
hz.•(z-0,1)/((z+0.6)•(z-1))
dove, ancora una volta, va scelto Te = -1 nel ca.so in cui il pPriodo di campionamento non sia
noto o .non sia definibile (sistemi intrinsecamente tempo-discreto).
Così come nel c&Bodel comando t:t, anche il comando zpk può essere utiliziato sia. per sistemi
tempo-continuo che per sistemi tempo-discreto (vedi Pare.grnfo 18.2), o.condizione che in questo
secondo ca.so el specifichi Il periodo di campionamento (o, perlomeno, si indichi il parametro
Te= -1).
RelaUvamente alla rapprMenta.zione nello spazio tli stato anche il comando es può essere itnp•
iegato sia per sistemi tempo-continuo che per sist.emi tempo-discreto (si veda il Paragrafo 19.1).
Prima di descrivere l'utilizzo del comando c2d, ricordiamo che, dalla definizione di trasfor-
mata di Laplace di un segnale tempo-continuo /(t)
00
(24.2)
Poiché usare la (24.2) per effettuare la conversione da continuo a discreto può risultÙe
alquanto complesso, spesso si utilizzano dei metodi che derivano dall'approssimazione della (24.2).
Uno dei metodi piì1 utilzza.ti per ottenere una rappl'esentazione di un sistema tempo-discreto
mediante il campionamento di uno tempo-continuo è il cosiddetto metodo di invarianzaal gradino. ·
li metodo consiste sostanzialmente nell'assumere che la. risposta. al gradino del sistematempo-
continuo coincida, negli istanti di tempo multipli del periodo di campiona.mento, con la risposta al
gradino del sistema.tempo-discreto. Vediamo a.quale relazione analitica corrisponde tale metodo.
Data una funzione di trasferimento G(s), la risposta al gradino può trovarsi come
da cui si ricava.:
H (z) = :...::2z
Z
[c- 1 ( G(s))
!
j
t::A:Tc
] (24.3)
Per ottenere la conversione continuo-discreto espresso dalla {24.3) bisogna utilizzare l'istru-
zione
hz•c2d(gs,Tc)
È semplice mostra.re che la fun2;ione di trasferimento che si ottiene col metodo di invarianza
nl grad ino coincide con quella. corrispondente a.I sistema. ottenuto mediante il metodo dei dati
campionati. Tale metodo viene utilizzato con le rappresentazioni nello spazio di stato . A partire
dn un sistema nella forma ...
:i: = A:c + Bu
y = Cx+ Du
che non abbia poli nell'origine, supponendo un periodo di campionamento Te costante ed as-
sumendo che il segnale di controllo u sia costante in ciascuno di questi periodi, la sua. versione a.
dati camp ionati risulta
X(z) = 3U (-z- - z T )
z - 1 z - e- "
Infine, applicando la (24.3} si ottiene
H(z)= z-lX{z)=3U(1-
z z - e- •
z-\)
Tuie funzione di trasferimento può ottenersi con l'istruzione
1i1•11(-1,3,1,0);
g1=-tt(1ia):
Tc•0.3; hz•c2d(gs,Tc );
Va notato che il primo argomento dell'istruzione c2d corrisponde al modello del sistema
continuo, mentre come secondo argomento del comando va riportato il periodo di campionamento
desiderato.
Consideriamo ora la. risposta indiciate del sistema (24..6) su un orizzonte temporale di 4 s ed
utilizziamo la (24.8) per ricavare la risposta nel tempo-continuo:
I
.I
I
La risposta del sistema discretizzato può ottenersi con le istruzio ni
i
[xd,~d)aatep(hz,4) I
I
Si noti che il secondo argomento del comando step rappresenta l'istante finale in cui valutare '
la risposta del sistema.
Il confronto tra le due risposte e con una versione continua a tratti pub ottenersi con
l'istruzione
(~c,xdc]•staira(O:Tc:4,xd);
plot(t,xc,td,xd, ' •',tc,xdc)
442 CAPITOLO 24. SISTE!VIITEMPO DISCRETO
2,5 3 3.5 4
che fornisce il grafico riportato in Figura 24.1. Da questo disegno si deduce che i valori del
segnale sono corretti negli istanti multipli del periodo di ce.mpione.ment.o, ma, considerando Il
eolo aietema discreto, nulla ai può dire riguardo al valore del segnale negli altri istanti di tempo,
In particolare, il comando atairs consente di determinare una versione "continua. a tratti" del
segna.le discreto ottenuto.
Da quanto 6n qui detto dovrebbe essere evidente che per l'efficacia del metodo di conversione
continuo-dis creto di invarianza al gradino (o quello equivalente dei dati campionati), il punto fon-
damentale è considerare l'ingresso costante durante il periodo di campionamento. Nella realtà
spesso ciò non è vero e quindi, al fine di ottenere un segnale costante nel periodo di campiona.-
mento, ai utilizza un sistema costituito de.Ila serie di un campionatore e di un orge.no di tenuta di
ordina zero (vedi Figura 24.2). L'organo di tenuta di ordine zero è un dispositivo che "mantiene"
Il valo,re campionato per tutto il periodo di campionamento.
r(t)
--..-
Te
-X\t-
___rd_(t_)
• ZOH
-I
Figura 24.2: Campionamento e tenuta di ordine zero.
In Figura. 24.2 un segnale di ingresso r(t) viene campionato con periodo Te ottenendo il
segna.le rd(t) e viene quindi reso continuo tramite un organo di tenuta. di ordine zero (Zero Order
Hold) ottenendo cosl il segnale rc(t). Potremo quindi scrivere
24.2. CONVERSIONE CONTINUO-DISCRETO 443
00
dove con 6(t) si è indicata la funzione di Dirac e con l(t) la funzione gradino unitario. Da queste
espressioni, calcolando le trasformate di Laplace si ricava la funzione di t.raaferimento di un ZOH
1 - e-•T•
GzoH(a) = ---
a
Soetituendo a= jw, dopo semplici passaggi si ricava. la risposta armonica di un ZOH:
. ) T. sin(wTc/2) -J ·w~ 12
G ZOH (JW = e wTc/2 e •
da. cui possiamo ricavare il legame frequenziale tra il segnale r(t) ed Il segnale rc(t)
D(.JW)
n.c
'
= iun(wTc/2)
----eWTc/2
-J1o1Te 12 L
+oo
.2,r)
R (.JW +Jn-
Te
(24.9)
n•-oo
Si o86ervl che il "guadagno" Te della ZOH è stato compensato dal "guadagno" I/Te del
campionatore.
Supponendo ora
+oo
flc(jw)= e-JwTd'l L R (;w+ jk~:)
k=-oo
dr(t) I
ezo H $ Te
I
mr,x
dt
l
Spesso interessa anche Il problema inverso a quello del campionamento, cioè come ottenere il
segnale tempo-continuo a partire dal corrispondente segnale campionato, A tale fine dnJ teorema
di Shannon discende che dato un segnale campionato, il corriepondeute segnale continuo può
I
I
·t
ricavarsi mediante la relazione
!
+oo •:
:I
/(t) = ~ /(kTc) ain(wc(t - kTc)/2) I'
,I
~ Wc(t- kTc)/2
Il
'
I
ì'i:':..[Z
1~
-:~~~
i/ •t~·
: ,''. c/J/'f'
·.•,;~~
444 CAPITOLO 24. SISTENII TElvIPO DISCRETO {_1\
~{
~·...·)-~{
•~ yi.f•"
•;,.<::;j
lll!f;
dove wc = 211'Tc. Quest'ultima relazione è non causale (in ogni istante di tempo ho bisogno dì ...
l • A• ~
tutti i campioni, passati e futuri, del segna.le) e quindi di impossibile implementazione on-line
per cui spesso si preferiscono utilizza.re dei "ricostruttori" di tipo diverso come ad esempio gli
organi di tenuta.
Oltre al metodo di invarianze. al gradino esistono altri metodi di conversione di un sitema f~ ;-,j~-l
.. ~
tempo-continuo in uno tempo-discreto. In particolare t>letruzione
.
-~, ..
. .,:~J/
.~~i~~
. "ti~...
,. .:~I'
,--,,'
. • ·"''"t ~--
1i1d•c2d(1i1,T, 1 {\it metodo}') . i.'':~:,..;.,
,./~ ~l'.Ì.!
:l.-"•lo( r ..~·:1
:'.°'!'l~
1•~lf'{ ·
consente di effettua.re la. conversione da continuo e.discreto sia con la rappresentazione media~t; ...,,•ft~ ;~~
matrice di tr~ferimento che con la rappresentazione nello spazio di stato, scegliendo un oppor- :_ •~,::
,K., ,,Jl
,...
tuno metodo di conversione, Il metodo di conversione da. specifica.re nell'impiego dell'istruzione -.•'#JK" t'
,. r~'A1'
c2d può essere scelto tra zoh, foh, tunin, prevarp e iutched . ....,. A.:'t
L'opzione zoh restitusce lo stesso risultato del comando c2d.
L'opzione foh assume come ingresso invece di un segnale costante a tratti ottenuto con ·~
~• l
. -\.
un ZOH, un segnale linea.re a tratti ottenuto con un First Order Hold (FOH)i in altri term ini
'vt E {nTc, nTc + Te) si ha.
Un FOH è quindi un dispositivo che restituisce in uscita un segnale continuo ma. non dif-
ferenziabile ed In particolare restituisce Il segnale di Ingresso negli istanti di tempo multipli del
periodo di c1Lmplona.mento ed un segna.le lineare negli !Litri lata.ml.
R.Ipatendo gli stBBsl ragiona.menti fatti nel caso dello ZOH I si ricava ln seguente funzione di
trasferimento di un FOH
. '•
.•,!':
'.f~
;"".1·
'· t\'i:t .,
,I •at1f
~...~,\Y-.
da cui possiamo ricavare il seguente lega.me frequenziale
;fJ\J' i,
• ./ I' I
,'...:';ft
.. ',,.~-i
l :~!'"t~
··
.;;P;\ ,-
u'\._:~
•:
che confrontata con la. (24.9) consente di evidenziare le differenze con un segnale ottenuto con ..,,.
. ' '~./
un ZOH. In questo ca.so l'errore commesso nell'approssimazione di r(t} con rc(t} soddisfa la . -~~;\.[:
condizione :t......
~.;.t,
~:-;.'ii:"
t r:!~ i ~
'·~~-~
~~,
"'f-rt?\
....,f.~m"
•i,'-'(.." t ~
_.._.,
._\.~ \r
Vs. sottolineato che questa. trasformazione non è invertibile cioè non esiste la corrispondente ·-·~;1'f\;_~; .
trasformazione da discreto a. continuo. \:ztf:~:
. ._,
~~l~i
L'opzione tustìn assume una trasformazione bilineare del tipo ~'i(/t
'·;!·,
.. ;~::._ì\~
2 z -1
s=---
Tc z + 1
(24.11)
•••l\ • i
"t
• ~c.~?!;
lly
·-.;,1
.ii:~--~
;;;,: ' l.
La trasformazione {24.11) è ricavata dalla formula. di approssimazione trapezoidale della. ,..tit",]
derivata . Questa trasformazione consente di "mappa.re" il semipiano reale negativo del piano -P-7.~
-j
•• h .. j, l
;~~
complesso "continuo" (regione dì asintotica stabilità dei sistemi continui) nel cerchio di raggio
unitario centrato nell'origine del pia.no complesso ''discreto" (regione di asintotica. stabilità dei ì
~~~- j
ilfl1t
, j••
:t ~
i_
24.2. CONVERSIONE CONTINUO-DISCRETO 445
sistemi discreti). In altri termini in ta.1 modo sistemi stabili sa.ranno convertiti in sistemi ancora
stabili e viceversa.
L'opzione prewarp si basa. su una trasformazione simile all'ultima descritta annullando però
l'errore di conversione in corrispondenza di una desiderata frequenza "critica". Si desidera in
a.Itri termini che la risposte. a.rmonìce. continua e quella. corrispondente diecreta. abbiano lo stesso
valore per una desiderata. frequenza che diremo w. Cominciamo col coneidera.re la trasformazione
{24.11). Diciamo G{s) una funzione di trasferimento continua ed H(z) la corrispondente diecreta.,
cioè
\
H(z) = G(s)l,=t;m
La rispoata armonica. del sistema continuo in corrispondenza. di una certa frequenza w è data
da. G(jw), mentre, in corrispondenza. della stessa frequenza, la rispoeta armonica del sistema
discreto è data. da H(ei"T• ), che in generale è diverso da G(jw). Osservando ora che
2 eiwTc - 1
- . 2j
= -ta.n (WTc)
-
Te eJwTc + 1 Te: 2
è immediato constatare che il valore assunto dalla risposta. armonica continue. in corrispondenza
della frequenza w sarà assunto da.Ila risposta. armonica discreta in corrispondenza delle. frequenza
w tale che
w z -1
s=----
te.n(wTc/2) z +1
{24.12)
H (ei,;;T,) = G(jw)
cosl come richiesto. L'opzione prewarp assume quindi una traeforma.2ione del tipo (24.12). Va
notato che tale trasformazione non consente di evita.re la distorsione in corriepondenza delle
frequenze diverse da quella specificata..
l
L'opzione matched utilizza le seguenti equivalenze per zeri e poli: un polo in s = -a si
converte in un polo in z = e-a.T, uuo zero in s = -b si converte in uno zero in z = e-bT I uno
zero in s= -oo ei converte in uno zero in z = -1 ed infine si impone la condizione di uguaglianza
dei guadagni statici (la funzione di trasferimento continua. valutata in O uguale a quella discrete.
valutata In 1).
Va sottolineato che non è possibile ricava.re dei criteri di carattere genere.le per le. scelta tra
i vari metodi di conversione continuo-discreto. Ciononostante, ne l senso di "linee guida." si pub
osservare che, per sistemi del primo Ol'dine, i metodi relativi alle opzioni zoh e matched forniscono
un sistema discreto la cui risposta in frequenza. coincide con buona approssimazione con quella
del sistema continuo di partenza. Per sistemi piil complessi invece è quasi sempre preferibile ·j
utilizzare l'opzione tustin, mentre l'opzione prevarp va impiegata nel caso in cui si deeideri una.
correzione della. risposta in frequenza del sistema trasformato per via bilineare ( tramite l'opzione
tustin) in corrispondenza. di una determinata. frequenza.
L'istruzione c2dt effettua la stessa trasformiuione precedentemente vista. nel caso Ìf'! cui vi
sia. un puro ritardo nell'ingresso del sistema continuo.
L'istruzione c2dm viene impiegata. utilizzando come argomenti le componenti della. nppresen-
tiuione del sistema (matrici della rappresentazione nello spazio di stato o polinomi numeratore
e denominatore per la funzione di trasferimento). La sintassi del comando risulta:
Il.
446 CAPITOLO 24. SISTE!vII TENIPO DISCRETO
(Ad,Bd,Cd,Dd)2c2dm(A,B,C,D,T,'{\it metodo}');
(numd,dend]=c~dJn(nU111,den,T,
1
{\it metodo}');
Prima di concludere questo paragrafo riportiamo alcune linee guida sulla scelt~ del periodo
di campionamento. Va detto inna nzitutto che non esistono regole di carattere generale se non
di tipo empirico . Nel caso di un sistema controllato In retroazione la scelta del periodo d i
campionamento va. fatta in relazione al sistema a ciclo chiuso; ciò perché tipicamente i proceasi
da controllare sono di tipo pBSsa-basso ed inoltre la banda passante del sistema a ciclo chiuso è
maggiore di quella del sistema a ciclo aperto. Nella scelta di Te conviene riferirsi ad un parametro
adimens ionale N che, nel caao di modi aperiodici, detto tr il tempo di salita della risposta del
sistema, definiremo
N = 21t
wnTc~
aisc•d2c(aisd,Tc);
(Ac,Bc,Cc,Dc)•d2cm(Ad,Bd,Cd,Dd,T,'{\it metodo}');
(nWK,denc)•d2cm(numd,dend,T,'{\it metodo}');
a seconda che si desideri effettuare In conversione da discreto a. continuo nello spazio di stato o
nella rappresentazione mediante funzione di trMferimento .
24.4. PROPRIETÀ 447
24 .4 Propri età
Le seguenti istruzioni
che saranno descritte in questo paragrafo fanno riferimento a quelle equivalenti nel dominio del
tempo-continuo già descritte nel Paragrafo 18.4.
• ddamp Tale comando è equivalente al comando damp. Quest'ultimo, infatti, può essere
impegiato sia per sistemi tempo-continuo che per sistemi tempo -discreto. Il comando
ddup può essere usato in uno dei due seguenti modi
11od•ddamp(A);
[mod,vn,%it•J 3 ddlllllp(A,Tc);
dove il vettore mod contiene i moduli degli autovalori discreti Àd, il vettore vn contiene le
pulsazioni naturali continue equlvalenU
llog-ÀdI
Wn = (24.13}
Te
ed il vettore zi ta contiene i coefficienti di smorzamento conti nui equivalenti
{24.14)
Relativamente all'argomento A, valgono le stesse considerazioni del Paragrafo 18.4.1 cioè se
A è una matrice quadrata viene considerata come la mntrice dinamica di un sistema nello
spazio di stato, se A è un vettore riga viene assunto contenente i coe fficienti del polinomio
caratteristico e ee A è un vettore colonna viene él.88uotocontenente le radici del polinomio
caratteristico.
Per giustifica.re le relazioni (24.13) e (24.14) ripor tiamo alcune considerazioni teoriche. Le
suddette relazioni possono essere ric avate con due diversi approcci. Il primo fa riferimento
alla nota equivalenza continuo-discreto
(24.15)
Ricordiamo che data una coppia di poli complessi coniugati a± jfJ la pulsazione no.turale
ed il coefficiente di smorzamento ad easi relativi al definiscono come
cioè come il modulo e l'opposto del coseno della foae dl'I numero compelB&Ocr+ jfJ. Dalla
(24.15) ai ricavaquindi
i
,I
448 CAPITOLO 24. SISTEMI TEMPO DISCRET<:}
che fornisce la {24.14). Questi stessi risultati si possono anche ottenere passando , at
traverso la. decomposizione spettrale della matrice di transizione dei sistemi continui e
discreti. In particolare ad ogni coppia di poli complessi coniugati corrisponde una. riepostà
pseudoperiodica che nel tempo-continuo può essere espressa come
dove si sono evidenziati modulo e fase dell'autova.Jore complesso discreto >.d.Dalle ultime
due equazioni scritte possiamo ricava.re l'equivalenza tra. i para.metri nel tempo-continuo
e quelli nel tempo-discreto esprimibile attraverso le equazioni
log !>.di
-<wn = Te
{24.16}
/Àd
Wn~ = Te
(24.17)
Attraverso semplici passaggi (si sostituisca (wn da.Ila. (24.16) nella (24.17) 1 si calcoli wn
e poi lo si risostituisca. nella (24.16) per vR.luta.re {) si può verificare che le ultime due
relazioni scritte sono del tutto equivalenti alle {24.13) e (24.14),
• ddcgain Tale comando è equivalente al comando dcgain. Tramite le istruzioni
guadmddcgain(A,B,C,D);
guad:ddcgain(num,den);
si ottiene il guadagno In continua relativo alla corrispondente matrice di trasferimento
discreta 1 cioè il suo valore per z = 1. Detto sied un sistema tempo-discreto lo stesso
risultato può ottenerai con l'istruzione
guad•degain(siad)
• dgram Equivalente al comando gram, consente di calcolare i gra.miani di controllabilità. e
di osservabilità relativi a. sistemi discreti.
• dsort Tramite l'istruzione
Cpord,indp)•dsor~(p)j
si ottiene il vettore pord che contiene gli elementi del vettore p ordinati per va.lori de-
crescenti di modulo ed il vettore indp contenete gli indici corrispondenti a.Ile posizioni
originarie degli elementi di p.
Nel caso di sistemi discreti il comando step va utilizzato nel seguente modo:
(uscita,tempo)=atep(aiad,T);
dove se T è uno scalare va inteso come l'istante finale in cui valuta.re la risposta. a.I gradino del
sistema, Nel caso in cui il periodo di campionamento del sistema discreto non sia specificato,
allora lo scalare T viene interpretato come il numero di campioni in cui valutare la risposta del
sistema. Se invece T è un vettore, allora viene interpretato come gli istanti di tempo in cui .j'
valutare la risposta del sistema e quindi va. assegnato nella forma: I
T:tiniz:Tc :tfin;
(uecita,tempo,atato]aatep(siad,T);
G s2 + 3.2 a + 12
(s) = s3 + 1.2 s2 + 9.2 s + 9
Per determinare un equivalente discreto mediante il metodo di invarianza al gradino, scelto,
un periodo di campionamento pari a Te = l s, si possono usare i comandi
che consente di sviluppare in fratti semplici Y(z)/z in modo da ottenere poi Y(z) = z•frotti. • '
j
Ottenuti i residui potremo quindi scrivere la Z -trasformata dello. risposta del sistema come
.. ,.. ~
.,
(-0.17±0.0lj) z z 1.33 z · •' •ia .... .. ~
..',.,.
Y()z = .;._------'--- + - --- + --
% + 0.90 =f 0.l3j z + 0.37 z- 1
Utilizzando ora le Z-trasformnte dell e fonzioni discrete elementari si ricava ~I d (
•>l'•,l'{ •
.•irtt ..,.
~, • ~
.Jot~
-~~,,
,.~. · ~
y(k) = (o.33(0.91)" cos(0.14 k + 3.12) - (-0.37l + 1.33)l{k) ·h, ,
è data da
•I •
'· ,~::
?l&
[rc,tc]•atep(gs,0:.1 :20);
[yd,tdJ•step(hz,20);
plot(tc,yc,td,yd,'•');
forniscono il grafico riportato in Figura 24.3 dove i campioni discreti sono rappresentati con un
asterisco. Una migliore ricostruzione si può ottenere diminuendo il tempo di campionamento.
Vista la similitudine con l'impiego dei comandi nel caso di sistemi tempo-discreto e tempo--
impulae si rimanda al Capitolo 20.
continuo , per i comandi laìm, initìal,
Prima di concludere questo para.grafo, va però ricordato che da precedenti versioni di CON•
'}it,~
TROL, per la determinazione della risposta nel tempo di un sistema discreto, restano tuttora. ~-il.•
,XJ,·~m,,..
disponibili le istruzioni · .... .
. ~
"·,"'_.
• '4.'- ~, 1, .
;:J1i1::
. .;,-;~//r;
•.:7'~..
dinitia.l Evo luzione libera dato lo stato in iziale ,~ ( .,.,,...
dimpulae Risposta all'impulso ,-~~·.rv:
dl11i111 Risposta ad ingresso qualsiasi • !~él-1
.. :, ~,.t
• 4• ..
dstep Risposta al gradino • :J r
J(~· s.
,~-':1-
la cui sintassi non fa uso degli oggetti, ma della rappresentazione mediante i polinomi numeratore ""t..f
'1:,
.;,. '(r, ; •
e denominatore della funzione di trasferimento (o le matrici del sistema per la rappresentazione
dei sistemi nello spazio di stato).
,..
--~,
..~~,.
.....:
~·.
·.,
. \
, 1' .. ...
.r
24.6. RISPOSTA NEL DOMINIO DELLA FREQUENZA 451 t
I
i',
1.6 ,------,- --""'T""'- -r-----r---.- - -r----,.---,---.-----,
h I
1.2
O.I!
0.8
0.4
0.2
o 2 4 8 8 10 12 14 18 18 20
oo +oo
/c(t) = L /(t}6(t - nTc) -+ Fc(jw) = ;e L F (jw + jn ~) ,
n~l n=-~
Se quindi la funz ione continua ha uno spettro nullo, con buona approssimazione, fuori l'intervallo
di frequenze (- fom, + lum), per evitare fenomeni di a.liasing (sovrapposizione tra le repliche in
frequenza) e tenendo conto della simmetria del diagramma in frequenza rispetto a.Ilozero . bisogna.
utilizza.re una frequenza di campionamento le ?:2 flim , dove .ltim si dice frequenza di Nyquist.
Descrivl&mo ora sioteticamente l'utilizzo dei comandi elencati nella precedente tabella,
• bode Consente di ottenere a~traverso una delle istruzioni
452 CAPITOLO 24. SISTEMI TEMPO DISCRETO
(mod,fa1e,pul1Jabode(1isd);
(mod,ta11]•bode{1i1d,v);
[mod,ta1e,pul1)•bode(siad,{wmin,wax});
consente di determinare la risposta. in frequen2a di una funzione di trasferimento disc-
reta. Valgono le stesse considerazioni fatte relativamente all'uso del comando bode per
sistemi tempo-continuo, In particolare i vettori mode tue conterranno rispettivamente le
grandezze
mod(w) = IH(~"'T•)I
fase(w) = / H(ei"'T•)
mentre il vettore pula conterrà le frequenze in radianti al secondo in un Intervallo che
va da O a 1r/Te che rappresenta la metà. della frequenza di campionamento ( frequenza
di Nyquist). Stante la simmetria del diagramma frequenziale rispetto ai multipli della
frequenza di campiona.mento, tale intervallo è sufficiente per rappresentare completamente
la risposta In frequenza del sistema discreto.
A titolo di esempio, consideriamo la funzione di t rasferimento
G(s) = s+0 .2
s3 + 0.2 s 2
+ 4 s + 0.4
ed effettuiamo un confronto tra. il diagramma di Bode di questo sistema e quello del sistema
discretizz&to mediante il metodo di invarianza al gradino con tempo di ce.mplonarnento di
1 s in un Intervallo di frequenze tra O.I rad/s e 10 rad/s. Con le istruzioni
n•(l 0.2]; d•(l 0.2 4 0.4]; ga•tt(n,d);
w•logapace (-1, 1, 1000); [m, t] :bode (gs, v);
Tc=l; hz=c2d(gs,Tc)
(md,td]=boda(hz,w);
plot(w,squeeze(m),w,squeeze(md), 1
--
1
);
si ricava il grafico riportato in Figura 24.4 dove sono riportati i moduli delle risposte
armoniche dei due sistemi considerati. In particolare nell'Intervallo (O,r.), cioè Rno a.Ila
cosiddetta frequenza di Nyquist, li diagramma di Bode discreto rispecchia quello continuo,
mentre a frequenze superiori il diagramma. di Bode discreto presenta le repliche dovute al
campionamento.
• nichols Consente di traccia.re i diagrammi di Nichols della funzione di trasferimento
dis creta H(z) (si veda il Paragrafo 21.3).
• nyquist Consente di tra.ccia.1·e i dia.grammi di Nyquist della funz ione di trasferimento
discreta. H(z) (vedi Paragrafo 21 .2).
• 1ipa Consente di calcolare i valori singolari della matrice comp lessa
che però non fanno uso della definizione ad oggett i della rappresentazione di un sistema dinamico
(per la. sintassi di questi comandi si utilizzi l'help in linea).
24. 7. CONTROLLORE DISCRETO CON LUOGO DELLE RADICI 453
~
,, ~
', ,,
1'
,,
1,
,, ,,
1'
,,
,,,,
'1 II
,,
II
I I I I
I I I I
I
I I
'
I
I
I
I
I
I
'' ---- ,I'\
-- - ~
., I \
I
' .,
2 3 4 5 !I 7 8 11 10
Per l'utilizzo delle istruzioni, fatta eccezione che per zgrid, si rimanda. a.I Capitolo 22. 1.
Il comando zgrid è l'equivalente discreto del comando ,g:-id. Esso consente di rappresentare
sul pia.no complesso le curve corrispondenti a pulsazione naturale e coefficiente di smor2amento
costanti. Tali curve possono esser e ottenute analiticamente manipolando le seguent i relazioni
log lÀdl
-(w.. =
Te
/Àd
Wn~ =
Te
dalle quali ai ricava
li,
454 CAPITOLO 24. SISTElvII TEMPO DISCRETO
(24.19)
(24.20}
Dalla (24.19) si evince come Lutte le curve a ç costante passano per il punto (1 +jO) del piano
complesso; tali curve, per la loro particolare forma , si dicono cardìoidi . L'insieme dei punti la.
cui fase ed il cui modulo verificano l'equazione {24.20) con Wn costante, individua.no le curve a . i\.~ ~ •
pulsazione naturale costante ,
Dopo aver tracciato un luogo delle radici discreto con il comando rlocus o la posizione di poli '
e zeri sul piano complesso con il comando pz111ap,con il comando zgrid vengono rappresentate
le curve a. ( ed w,. costanti sul piano complesso coal come riportato in Figura 24.5 dove è stato
anche tracciato il luogo relativo alla funzione di trasferimento diecreta ·:.--.,-,1
,:
H(z) = z + O.l
z3 - 0.1 z2 - 0.2 z + 0.05
Le curve a coefficiente di smorzamento costante sono ottenute facendo variare ( tra Oed 1 con
passo 0.1. Le curve a pulsazione naturale costante sono ottenute con pulsazione normalizzata,
ael!umendo cioè costante il primo membro dell'equazione ottenuta dalla (24.20) portando al primo
membro Te e sono rappresen\ate facendo varie.re te.le pulsa.zlone oorma.lliza.ta. <la O a 1r con paeao
1r/lO.
Roolloeus
·""!f._J;.
~• 1,;lt
3,.,IOT ...;~~
08
...' -~
[~,
~~-..
--~ ~
o.e . ·o.a. .;
: ,o,. ......:·
O.! • : • .
04 · 0 ,8• ; •.• · ' , •
:ç-;\l i
.. -.,. .·..
· c►.1 .. . ••
...~;rft;
02 ...
: .. .:.
· 08 :····
.· . H ·:· ...
· :: :.
. ..·.
.. o/\0
·/
~:~~
,;
.. ..
J
f
o
.
,----~
.. ....
. ..
··---+-
. --- . ...·•... .
.•.. '. :
•."/ ':'
·.1.
-0.2 ,. ····:
-0.4 ."': ... ·... ..·•.. . i
-oe
·::<'
-..•"' ...
-....
,:·· ..
~.
-o.,
_,
• .r.;-7-•
•I -0,8 -0.8 -0 .4 -o.a o.e 0.8 -~~; ~•~
In modo del tutto analogo al comando agrid si può anche usa.re l'istruzione %grid(.zita.,wo)
per tracciar«J sul piano complesso le curve corrispondenti a dei valori desiderati di coefficiente di
smorzamenL~ e di frequenza naturale specificati nei vettori zita e vn.
I
..
"' .,.,.,
:;. ~ ( ~-:
,,, . .-.)!!
.~-,..:
-l-"-
..""tr~
.1
24.8. CONTROLLORE DIGRETO CON RETROAZIONE DI STATO 455
Anche se non strettamente attinente a questa istruzione, per completezza si ricorda èhe le
regioni del piano complesso continuo corrispondenti ad un valore massimo desiclerato di tempo di
assestamento (semipiani a sinistra di una retta verticale con ascissa -(wn) diventano nel piano
complesso discreto dei cerchi, come si evince In modo immedloto dalla (24,16).
Esse fanno tutte riferimento ai comandi corrispondenti nel dominio del tempo continuo
<leect"ltte nel Capitolo 23.
• destim Equivalente discreto del comando estim, consente di ottenere le matrici relative ad
una rappresentazione ingresso-stato-uscita di un filtro di Kaiman per un sistema discreto.
• dlqe Equivalente discreto del comando lqe, a partire da una rappresentazione nello spa.zio
dì stato del sistema discreto, consente di ottenere tramiLe le istruzioni
[L,H,P,EJ•dlqe(A,G,C,Q,R);
(L,H,P,E]•dlqe(A,C,C,Q,R,N);
(L,H,P,E]•dlqev(A,G,C,J,Q,R,N);
[K,S,E]•dlqr(A,B,Q,R);
[K,S,E]adlqr(A,B,Q,R,N);
456 CAPITOLO 24. SISTENII TENIPO DISCRETO
consente di ottenere: la matrice K dei guadagnidi retroazione dello stato che minimizza,
rispettivamente, i seguenti indici di qualità. ....••
- .,
00
J = ì:(x(kfQx(k)+u(k)TRu(k))
k:=0
00
la soluzione d.eftnita positive. S della equazione di Rlccati discreta e, nel vettore E, gli
autovalori del sistema a ciclo chiuso. Le variabili di uscita S ed E possono eventualmente
essere omesse.
• dlqry Equivalente discreto del comando lqry, tramite l'istruzione
(K,S,E]•dlqry(A,B,C,D,Q,R):
consente di ottenere: la matrice K dei guadagni di retroazione dello stato che minimizza
l'indice di qualità
00
la soluzione definita positiva S dello. equazione di Ricce.ti discreta e, nel vettore E, gli
autovalori del sistema a ciclo chiuso. Le variabili di uscita S ed E possono eventualmente
essere omesse.
• dreg Equivalente discreto del comando reg, consente di ottenere le matrici relative ad una
rappresentazione ingresso-stato-uscita di un controllore costituito da un filtro di I<alman
e dalla. retroazfone del corrispondente stato stimato.
• kalmanSi veda quanto riportato nel Capitolo 23 e l'help in linea che 11ivisualizza. mediante
l'Istruzione help dkalman .
24 .9 Esercizi
Esercizio 24.1 Data la funzione di trasferimento
1
G(s) ==-
s+l
sì ottengano le corrispondenti rappresentazioni discJ'ete con i diversi metodi di conversione
continuo-discreto e con i tempi di campionamento 0.01 s e 2 s (si usi una frequenza critica
relatit1a all'opzione prevarp pari a l rad/s).
s
G{s)---- 2
- s + s + 25
si ottengano le corrispondenti mppresentazìonì discrete con i diversi metodi dì conuersione
continuo-discreto e con frequenze di campfonamento 3 Hz e 15 Hz {si usi una frequenza critica
relatiua all'opzione prevarp pari a 5 rad/ s).
G(z) = z + 0.4
(z - 0.2}(z - 0.3 ± O.lj)
si ricatii con l'aiuto del comando residue la risposta nel tempo in forma analitica ad un ingresao
costante e ad una rampa.
z
G(z)= --
z-o
si ricavino e sì confrontino le diverse risposte impulsive del sistema ottenute per i seguenei11alori
di a: -1, -0.3, O,0,6, 1, 1.2.
Gz)= z(z-rcosO)
( ,:i-2r(cos8)z+r2
si ricavino i poli della /unzione di trasferimento e le dfoerse rispoate impul1i11eottenute per•le
diverse combinazioni dir= 0,0.3, 1,1.1 e IJ= 0,1r/4,1r/2 1 31r/4 1 1r,
G(z) = z - 0.1
(z + 0.8){z - 0.1 ± 0.2j)
se ne ricat1ila risposta in et1oluzionelibera con condizioni iniziali (0.1, -0,1 1 0) 1 ed i primi 20
campioni dell'uscita per un ingresso impulsàtlo,a gradino e ad una rampa con condizioni iniziali
nulle.
Successiuamente si tracci il luogo delle mdici relatìt10alla stessa funzione di traaferimento
e si determini il valore del guadagno a ciclo aperto in modo che risulti a ciclo chiuso <= 0.3 ed
Wn = 2.3.
\.
458 CAPITOLO 24. SISTENII TE!vIPO DISCRETO
1
G(s) = (s + o.t)(s 2 + 1)
se ne confrontino le risposte al gradino su un intervallo di tempo di 70 s ed i diagrammi. di
Bode con quelle dei corrispondenti sistemi discreti ottenuti con i diversi metodi di conversione ,
continuo-discreto (11ediParagrafo 2,1.2) e con tempi di campionamento Te= 0.1 1 l 1 3 1 6s. .. , ,
1
G(s)- --
1 + 10 s . .]
ed aBsunto un tempo di campionamento Te = 5 s, si progetti un controllore discreto
z-a
C(z)=kz-b
tole eh~ il sistema a ciclo chiuso presentì u,l errore nullo a regime ad un ingresso a gradino ed
i pnli del sistema a ciclo chiuso si tr'ovino nel piano compleuo all'interno della regione definita
dalle curve ç = 0.8 ed il cerchio cli raggio 0.5.
v(k) = ( O 2 ) ( =~~:~ )
Si progetti una retroa,ione di stato tale che il aistema aottoposto ad un ingresso o gradino
si porti a regìmd in tm tempo finito (risposta deadbeat). Si roppreaentino quindi gli andamenti
delle variabili di stato d dell'uscita del sistema gm,tijìcandone gli andamenti.
Esercizio 24.10 Si scriva una MA 1'LA B function che dato un sistema di tipo O rappresentato
nello s1,aziodì stato o in termini di funzioni di trasferimento, restituisca il vettore dei guadagni
di retroaJione di stato tale che il sistema a ciclo cliiuso si porti a regime in un tempo finito. ·.
Si scrilla quindi un'altra MATLAB function, simile alla precedente, ma relativa ad un
siJtema di tipo 1.
24.9. ESERCIZI
J = L (10oxt(k) 2
+ u(kf')
.I
I
II
.... o
'
Suggerimento. Si allarghi lo stato considere1ndoanche l'equazione
che caratterizza la presenza di un integratorein ingresso all'impianto
(si veda l'Esercizio 23,4)
z + 0.2 G2(z} =k z - 0 .2
G1(z) = k (z - l)(z - 0.5)' (z - l)(z - 0.5)
si detemtini il valore del guadagno k per cui i corrispondenti sistemi a ciclo chiuao ai portano
al limite di stabilitd.
~ ~·:·~-?:;
·:~:
. ~J. ;~;
~·~
....::
:
-:
. ..
Capitolo 25
11
I I
I
categorie
In questo capitolo sa.ranno riepilogate tutte le istruzioni di CONTROL, la maggioranza delle quali
sono state già. presentate nei precedenti capitoli. Per tale motivo esse saranno solo brevemente
commentate; per gli approfondimenti relativi al modo di utilizzo di queste funzioni si rimanda
all'help in linea e al manuale.
25.1 Modellistica
I
I\
...
f.1
.~~~
• ! ·-~~,;;.~ ·,; 4;
< ,-3 t rf.,j;• I
• :~.; •• 1'
I
462 CAPITOLO 25. COMANDI CONTROL PER CATEGORIE ;
I
'
25.2 Caratteristiche dei modelli &·,•• l,
-;-'ft1_:-f
, ,>
:
... '
•%,;{!ii •. i
:,t , .'> I
.I
hasdelay Vero se il sistema ha ritardo .\.:,:~--~#,..
'"" ) .~
isa Vero se il sist ema è del tipo specificato
~1f1·t~!;..i
isct Vero se il sistema è contin uo '1~
::.·!l'. ...i
ìsdt Vero se il sistema è discreto . ;,-•~~ri
isempty Vero se il modello è vuoto
1•
~'~ ,\-.I
,..
isproper Vero se il modello è proprio .t •;. r, , I
iuiso Vero se il sistema. è SISO l~ot1a.• •--\ I
:•.. -,-•. J , I
1
I
i
25.3 Conversione dei modelli •i%
,t ~'-J
i • .
c2d Da conti nuo a di screto .:;.1{f~';
: .,. l"!.,,_,,-;
chgunita Converte le unità per modelli 1'rd ' ,J_.',~ ~l
i);, ,c i'b j,;..!-'.-
d2c Da conti nuo a discreto lt, '\1'·_.
g
d2d Modifica il periodo di campionamento
delay2z Converte ritardi in modelli dis creti o frd
frd Converte in modello su dati frequenziali - ~.'
.........
pad1
ruhap,
Appro88lmazioni di Padé del ritardo
Cambia le. forma di un a.rray LTI
...
rnidue
98
Calcola. i residui
Converte in modello ne llo spa zio di stato
.
t1' Co nverte in modello con funzione di tras ferimento
zpk ·:"'f--\ ...,
Co nverte in mode llo con zeri, poli e guadagno •"<:
'•tu ~
~r:it~
:"·-;~
~
';·:~~
,,i;:. (:.,
~·:,,1~
'• \ 1:1'!
.
·::;.Jt
,,~.;...
25.4 Riduzione dei modelli •t·•~if
':.....
;f ::"\-~~~
.,. .... •~j•
balr eal D continuo a disc reto
minreal R..ppresentazione minima con cance llazi one poli/zeri
;~:~,;~:'!~
:-:~-
.:;! ;.J~•• l
} ..,.
modred
sminr eal
Elimina sta.ti
Calcola riduzione di modello strutturata '\~f
•J · ·'I_,-_,
~ -,;':
• ,'11; ~ :,";?
4 ,,ir-~
i.:.;1
,,.
.I
A;''·
'
25.5 Rappresentazioni nello spazio di stato
canon Rap presentaz ione ca nonica
ctrb Matrice di controllabilità
ctrbf Forma canonica di controllabilità
gram. Gr&mlanldi controllabllltà ed osservabilità . •. ~ii, •
obev Matrice di osservabllltà ·,1:
v
ob1vf Forme.canonica di osaer vab llità ,\'f.i
~ t
'.,
-~'.,A.
1'~
88291 'I\-a.sfor1na2ionedi stato ~-.:-:t
. ,q ,
ubal Rappresentazione bilanciata nello spazio di stato ·.,: i
.. -:J,~iif'-.1,
-rw
.
.. ., .fA!,l'1,
~ Il!• . ,
'
25.6. CARATTERISTICHE DEI !vIODELLI 463
I
,I
1,
Il
!r
damp Frequenze naturali e coefficienti di smorzamento 'I
dcgain Guadagno statico
covar Covarianza della risposta a rumore bianco
d1ort Ordinnmento per ampi~za
esort Ordinamento per parte reale
norm Norma di modelli LTI
pole, eig Poli
p2map Rappresentazione di poli e zeri
roota Radici di polinomio
zero Zeri
~
:,.!~~ -
"./-'=t
·t,...it,11,/
fYJ~f'
• ·~J-••
_,:~t.l\
.,_"'t
'j ·
lqr Guadagno LQ per sistemi continui .. ,,·;i
dlqr Guadagno LQ per sistemi discreti •1Il/")_.~·
:.r{,tfa---~
lqry Guadagno LQ con pesi sull'uscita .~.~ ..{i~
lqrd Guadagno LQ discreto per modelli continui .~;,:.~
·
kalman Filtro di Kaiman . ,:t,
;i~fi'l.
.,_,
kal111d Filtro di I<alman discreto per sistemi continui 1,!ì'"-~ ,:""
1-r,
.,lj,,,•I.,...
lqgreg Regolatore LQG dato guadagno LQ e filtro di Kaiman · 1.:1'f1.I
,~~ •• #~
• '6,,'i»•
.,4~~\~tr
. 1,'-~•.r
25.12 Equazioni di Lyapunov e Riccati 1 J1,r•'i':X
~:~}f
ca.re Equazione algebrica continua di Riccati
dare Equazione algebrico. dìscreta di Ricca.ti .-,
lyap Equazio ne di Lyapunov continua
dlyap Equazione di Lyapunov discreta '"j :· i~
,,r-\
''')/.I;.;
. a.,,:.., 1,
•'
~.:r::l
:vt
--)~ •f
~~ s·l~
..~}_1'Y.{
J:~~i
;.......
tF!f-
l:.!<~-
-~~
~11;;
·ti~.' :
-'~
r.l'ij·-
~!
--
-}
·1!• !
~ Ml ·,;, /{
:t
!,r ~·;.}
I'
ilIfi
j :~: ,;
'
I
l I
I
,,
Parte IV
! ;
I
,· 'i'!:.'·•
l
i t·
Appendici
;
•j
1
I
I
\
\.
I. ·.I
i
l
I
I
lI
..l
I.
l
'I
r
'\t- · ~
I
. /
•!I,
••-:1/V·J
• r, .a;.
•;i:-:
t.~
..~}ilu'
.,.,:
1 ...
•r~,:: ' ,(, q
vi<
•.;'',
+.)•
\ T;; ò
.. _.. 1.!I- ' ~,
~
.,/
••-I
·:
•.,.
~ 4~: ;J
Appendice A
1. La funzione gcf (Get Current Figure) restituisce il puntatore della figura corrente. Per gli ..... .
oggetti di tipo axes c'è un comando analogo: gca. Per oggetti di livello gerarchico inferiore esiste ,_ .• :T•
.,: ,...
! ·r.~
...
,. ,#
il comando gcoj tuttavia, questo comando agisce solo sull'oggetto corrente, ma se abbiamo già
trl:l.Cciato un insieme di curve, come posBiamo Individuare l'handle della prima, e.d esempio per
. ..; ;
+ .. : :
tnaformarla In una. linea tratteggiata? In realtà fra gli attributi degli oggetti grafici abbiamo :,;:{'-·
.....
anche Children, che è un elenco del 11figlì11 dell'oggetto In questione, e Par1nt 1 che, dualmente,
ne fornisce il (puntatore al} genitore. Ricordando quindi che le linee sono figlie dell'axes corrente,
possiamo essere certi dì rintracciarne il puntatore fra i Children dell'axes corrente. A questo
scopo usiamo il comando get, che permette di leggere (e, più in generale, rende disponib .ile)"i~
valore di un attributo. La sua sintassi è
p•g1t(puntatore,'N0~1Attributo 1
);
-"1r
• ,1
e '
che memoriua nella variabile p il valore dell'attributo NomtAttributo relativo alJ>oggetto lnd17
viduato dal puntatore puntatore. Nel nostro caso quindi, l'elenco dei figli dell'a.'<es corrente si
ottiene con
p•get(gca,'Childreu');
delete(puntatore)
Un esempio può servire ad acquistare familiarità con queste istruzioni. Si supponga di iniziare
una sessione MATLAB con le seguenti istruzioni ,.·,
,:
t•0:.1:10;
t•t' i
Y"'Sin(t);
plot(t.y) : ··..
Ora, sulla finestra. grafica, clicchiamo sulla curva, ed eseguendo pl•gco otteniamo il puntatore
• I.
alla linea corrente. In alternativa, potremmo digitare pa=gca per ottenere il puntatore a.ll'axes
corrente (ch e avremmo potuto ottenere con l'istruzione pa'"get(gct, • Cnildxen') ), quindi con
pl•get(pa, • Cnildren') ricavare il puntatore a.Ila llnen che definisce ìl grafico dolla funzione
seno. Per modificare questo oggetto, usiamo il comando eet, duale di get:
. •...
- ··..
set(pl, 'LineStyle','-.')
traccia la linea a tratto-punto, fornendo lo stesso risultato che avremmo ottenuto usando il
comando plot ( t, y, • - . •). In genera.le la sintassi del comando set è
set(puntatoro,'NomeAttributo',NuovoValore})
Si noti che l'istruzione get (puntatore) fornisce un elenco degli attribuii dell'oggetto individu-
ato dal puntatore e i relativi valori, mentre aet(puntaton) dà l'elenco dei va.lori assegnabili
a.gli attributi. Si noti inoltre che i nomi degli attributi possono essere scritti indifferentemente
..,
in maiuscolo o minuscolo, sebbene la forma usata in questa appendice e nella successiva sia
preferibile perché ne migliora la leggibilità .
Continuando il nostro esempio, ora digitiamo:
yl•cos(t);
plot(t,(y y1])
A.1. OGGETTI GRAFICI IN .MATLAB 469
Questa volta eseguendo pl•get (pa, •Children'), osserviamo che ora pl è un vettore con
due elementi, i puntatori alle due curve. Procedendo in questo modo è chiaro che il numero ùi
risultati forniti dal! 'istruzione get relativa alla proprietà Cbildren può crescere enormemente,
e può presentarsi il problema di capire ogni puntat ore a che tipo di oggetto si riferisce. La
risposta a questo Interrogativo è fornita. dalla proprieià Typ•, definita su tutti gli oggettt , e che
~,
ne specifica il tipo. Nell'esempio considerato, g•t (pl ( 1) , 'Type ') fornisce come risultato l in• 1
mentre get(pa, 'Typ1') ha come risultato axu. Per Inciso, molte primitive grafiche di alto livello I
possono restituire i puntatori agli oggetti già. in fase di creazione dell'oggetto stesso: ad esempio
'
'
..
pl-plot(t,[y yt])
disegna le due curve e ne rest itui sce i puntatori nel vettore pl.
Un comando molto utile nella ricerca di un puntatore è tindobj, che restituisce il puntatore
ad un oggetto grafico caratteriznto da una certa proprietà. Ad esempio,
pl•tindobj('Type','Line'):
restituisce di nuovo i puntatori alle due curve viste in precedenza, dopo aver cercato fra tutti gli
oggetti grafici definiti correntemente. Talvolta però può essere utile o necessario specifi care in
che punto della. gerarchia degli oggetti iniziare la ricerca. Ad esempiu, ridisegna.mo le due cu rve,
selezioniamone una e con set (geo, 'LineStyle • , •- . •) alteriamole lo stile di tracciamento. Ora,
digitiamo il comando
delete(tindobj{'LineStyle' ,'-') );
Cosa succede? Ci saremmo aspetta.ti di aver cancellato solo la curva a. tratto continuo , ma
scopriamo che sulla finestra non è rim a.sto più nulla. Infatti, fra gli oggetti a linea. continua
abbia.mo anc he gli axes, che sono stati inesorabilmente cancella.ti da l comando. Per evitare
questo inconveniente, dobbiamo dire a ti11dobj di iniziare la ricerca solo a partire dai figli degli
assi correnti {il che ha per inciso il vantaggi o di rendere più spedita la. ricerca), quindi il coma.odo
corretto è:
delete(tindobj(got(gca,'Children'),'LineStyle 1
1
1
~ 1 ))
In conclus ione, dovrebbe essere chiaro che se si prevede di modificare oggetti grafici è buona.
abitudine memorizzarne l'handle in faae di creazione, evitando poi di doverli rintraccia.re in corso
d'op era. Ultima. osservazione: disponendo del puntatore ad un oggetto , possiamo memorizzare
le sue propietà in una struttura. tramite il comando get. Ad esempio, digitando b:aplot(t,y}
traccia.mo il grafico e memorizziamo in h la sua handle. Ora, scrivendo a•get (h) avremo creato
una struttura a i cui campi hanno memorizzate le proprietà della curva, quindi potremo a.d
esempio tracciare due curve con lo stesso colore (anche senza indicarlo esplicitamente) con
h•plot(t,y):
a"get(b);
hold on;
plot(t,y1,'color',a.Color);
Sì faccia ovviamente attenzione a.I fatto che mentre i nomi delle proprietà possono essere
abbreviati, e quindi scrivere 'Color' o 'c:olor' o 'col' è irrilevante, a.Color deve essere scritio
esattamente coel, trattandosi del nome di un campo.
A questo punto possiamo iniziare un'analisi particolareggiata degli oggetti grafici.
MATLAB definisce dieci oggetti grafici, che sono di seguito elencati insieme alle funzioni ad
alto liveJlo che li creano:
1. Radice: è la radice della gerarch ia. e corrisponde allo schermo del computer.
2. Figure: come già detto è una si ngola finestra. Non c'è limite a.I numero di finestre apribili ,
che sono tutte figlie <lella radice. Sono create con la funzione figure.
470 APPENDICE A. FUNZIONI DI GRAFICA AVANZATE
3. Axes: anche di questo oggetto è già st ato fatt o ceono in precedenza , è una parte della
finestra destinata a contenere grafici. Ha per genitore figure ed è creato con la funzione ,
axes.
4 . Line : si tratta delle primitive grafiche per tracciare linee in due e tre dimensioni. Sono'
figlie di axes . Sono create con diversi comandi , fra cui plot, plot3, contour e contour3,l
' ' .1;
5. Llght : sono oggetti che definiscono le sorgenti di luce di altri oggetti; di per sé non sono
visibili, ma il loro effetto lo è. ··'
:. 11.r{
6. Pa.tch: sono poligoni riempiti. Loro genitore è axes. Sono crea.te con i comandi tp1· e
fill3, non descritti in questo testo.
7. Surface: cosi come line definisce segmenti congiungenti due punti e serve da unità d~
base per il tracciamento di curve, gli oggetti di tipo eurface definiscono quadrilateri ..
._ , .)
elementari con vertici in quattro punti de.ti. Sono Agli di axe1 e sono crea.ti con i comandi
della fa.miglia aurf I meah e pcolor.
8. Image: sono il risultato di 888ociazioni di elementi di una matrice con elementi della
mappa di colore corrente. Sono figli di a .xes e sono creat i con la funzione image. •i.,
9. Text: si tratta delle stringhe di caratteri inserite nei grafici . Sono figlie di axes. ··•_;,\
•• ,1
10. Rectt!lngle: nonostante ciò che suggerisce il nome non si tratta solo di rettangoli, ma di
oggettì bidimensionali la cui forma spazia da un rettangolo a un'ellissi. .i•:,
11. Ulcontrol: sono controlli cbe eseguono una azione predefinita quando selezionati. Per il
loro uso si consulti l' Appendice B. Sono figli di figure .
12. Ulmenu: sono oggetti che permettono di creare dei menu a tendine in ambito grafico.
Per il loro ueo ei consulti l'Appendice B. Sono figli di figure. . :➔
13. U lcontextmenu : sono menu di contesto che posaono essere associati a singoli oggetti'
grafici. ...... ,t
'
La gerar chia degli oggetti è ricapitolata in Figura A.l. Si osservi che la gera.rcl1ia risulta. utile.
eia per eliminare oggetti (eliminando un genitore si eliminano automatica.mente tutti i figli) che . ,,
per consentire al figli di ereditare proprietà: ad eeempio la. posizione di tutti i figli di axea è ' , I
') , '
determinata da.I sistema di coordinate stabilito dal loro genitore.
Esistono alcuni &ttl'ibuti comuni a tutti gli oggetti grafici, i cui principe.li sono
..'
A.2 Radice (Root)
·,•....
I •
·1
t
A.2. RADICE (ROOT) 471 ,I
:
Radice
'
i, .I
figure
• I
•I
textI~hlI rectangle
surtacelinespatch'1mage
Figura A.1: Gerarchia degli oggett i grafici.
dello schermo non è alterabile. e i rimanenti possono essere modificati più semplice" .I
mente usando comandi ad alto livello. Se ne riporta comunque un elenco parziale,
ricordando che l'elenco completo può essere ottenuto con l'istruzione gat (O) (si
I
noti che il valore del puntatore alla radice è O). !
I
II
• CurrentFigure è il puntatore alla figure corrente.
• Echo definisce lo stato di abilitazione del comando echo (si veda pag. 131)
che visualizza le istruzioni durante l'esecuzione di un M-file.
- pixels
- normalized, in cui l'angolo in alto a destra ha coordinate (1, 1)
- inches
1
472 APPENDICE A. FUNZIONI DI GRAFICA AVANZATE.-
centimeters
pointe
while 1
home
1
smsprintf('Coordinate: 'l.d 'l.d, Finestra, 'l.d 1
1 ••• ..,,. .''
[get(0,'PointerLocation'),get(0,'PointerWindow')] '):
disp(s);
end
(il numero 1 al terzo rigo serve solo a forzare una svuotamento del buffer).
.
....
A.3 Figure
li comando t'igure come già detto crea o rende attiva una finestra grafica. Usato nella form!!f
p•Ugure definisce una nuova finestra. e ne memorizza il puntatore nella variabìle p. Abbiamo già.
parlato del comando set per alterare gli attributi di un oggetto, ma è anc:he possibile definirli in
fase di creazione dello finestra stessa con il com ando
p•tigure('NomeAttributo',Valor•Attributo, , .. )
Gli attribut i più interessanti sono quelli che permettono di definire i colori della finestra., la
mappa di colore corrente e la. posizione del disegno su carta. Ecco quindi un elenco parziale degli
attr ibuti degli oggetti figure
• Color definisce il colore di sfondo della finestra.. La definizione dei colori avviene secondo
le regole date a pag. 96.
• Colormap definisce la mapp& di colore attiva. Equlv&Je al comando colormap visto a
pag. 06.
• Uni u definisce il sistema di coordinate per la finestra. I poss ibili sistemi di coordinate
sono quelli elencati al paragrafo precedente.
• Pointer definisce la forma de l cursore del mouse all 'int.erno della finestra. Possibili valori
sono:
• anov I
è il valore di default, la freccia.; ..........·
• c:roubair' una crocei
1
11atch' una clessidra.i
• cron' una doppia croce;
'topl', 'topr', 'botl', 1
botr 1
freccie oblique;
'circl• • una. circonfe renza;
A.3. FIGURE 473
1 A.4 Axes
•, .
11-at.tando oggetti di tipo axes ci addentriamo sempre di più nella costruzione del grafico. Ab- ,• .' "'
biamo inizialmente visto che la radice sostanzialmente controlla lo schermo del computer, e
flgure la struttura e la dimensione della finestra in cui appariranno i gra.fici, sia su vijieo che
su carta. Gli oggetti a.xes iniziano a riguardare plù eia vicino il grafico: infatti controllano la
posizione dei grafici nell'ambito delle finestre e definiscono gli assi, sia. per grafici bidimensionali
che tridimensionali. Inoltre , per questi ultimi, definiscono anche il punto di vista.
La defiuizione dì un oggetto di tipo axes può avvenire con il comando ues, che funziona in '''' -
modo analngo a tigure , e può essere quindi impiegato nelle tre forme \_~
•: !~~',
p=axes
axes(p)
p=aies('HomeAttributo',ValoreAttributo , . .. )
.. : ·
' •t .... " -n,~:~;;~.li.:!.
" ,,ijl;~ ; v.hl,,,tti14 ·" ...... ' •. ""'" ",;{ ~ ;;- , - -~ ~ -,:.:
p(JJ
::,
07
.,. \•.., .
,
o.e
,..,.....
~
05
o•
0.3
, .{~'·.=~
0.2
\
01
,<I)
Di questi solo gli ultimi sono definiti come proprietà del sistema di assi, mentre gli altri
sono a loro volta oggetti di tipo text, e come tali sono figli dcli 'axes corrente (si veda la
Figura A.l). I valori sugli assi sono tracciati con un tipo di carattere definito dall'attributo
1
FontName 1 , il cui valore è uno qualsiasi dei font definiti dalla corrente configurazione
Windows, dimensione definita con FontSiu, spessore seleiionato con FontWeigbt, che pub
assumere i valori ' light 1 , 'normal' , 'demi I o 'bold •; è possibile inoltre tracciare caratteri
sottolineati o "cancellati" (ovvero attraversati da una linea orizzontale) assegnando il
valore •on• agli attributi Fontthlderline e FontSt rikeThrough rispettivamente; infine i
caratteri possono essere più o meno inclinati assegnando a FonUngle uno dei tre valori
'normal •, 'italic' o 'oblique'.
I puntatori a testi e commenti vanno quindi ricercati nell'attributo Children, il puntatore
al titolo è registrato nell'attributo Titl•i delle intestazioni degli assi si parlerà nel prossimo
punto, nell'ambito della definizione delle proprietà degli assi.
• I tre o.asi sono controllati in maniera indipendente con una eel'ie <li attributi che hanno
tutti lo stesso significato ; per questo ci limitiamo alla. sola des crizione degli attributi che
controllano l' asse ~, essend o immediata l'estensione delle operazioni descritte agli assi y
e z. XColor definisce il colore dell'asse x; Wir definisce la direzione dell'asse: 'reverse •
dà valori cres centi su ll 'asse da sinistra verso destra, 'norn.al' è il valore di default. La
grig liatura a. partire dall'asse x (ovvero nella direzione y , per grafici bidimensionali) può
essere eliminata. con ut (gca, 'XGrid', 'otf ') (e ovviamente ripristinata settando lo stesso
attributo nl valore 'on'). Attribuendo a XScale il valore I log' si definisce una sca.latura
logaritmica, come quella ottenuta con aemilogx, ma. con la possibilità di agire anche su
grafici tridimensionali. I limiti della scala si fissano con XLim e la ecalatura automatica
con 'XLimMode, che funzionano in maniera identica agli attributi CLim e CLimModevisti in
precedenza. Il puntatore ali 'intestazione de li 'asse è definito da XLabel. I valori indicati
sugli assi sono gestiti da due attributi: XTickLabel contiene un vettore di test i e controlla
"cosa." scrivere, mentre XTick è definito da un vettore numerico e controlla. "dove" scrivere;
chiariamo questo punto con un esempio: nella seguente tabella sono riportate le velocità
orbitali dei pianeti del nostro sistema solare in km / s : .. •, '••
....,
t ..
, 1 9°
h•axea('Poaition',[0 O 1 1],'Viaible','off');
axes ( 'Pos' , (. 26, . 15, . 7, . 8]) i
1et(gcf, 1 CurrentAxea 1 ,b);
Ann•[{'AJU1otazioni 1 },{'varie'}];
text(0.01,.6,Ann)
0.9
!
! 08
01
o.e
0.5
,f.....
~ ·-
'
..
:, .. O.◄
03 ,,
I 0.2
•• O.I
!·-
·: 00'---- 0-,--~0A ___ o....
.a,----O"':- .• - _~ ;I
- \-._:·
....
~.
Per concludere, ecco un esempio di come produrre grafici con ~i doppi. Vogliamo rappresentare
una curva molto veloce, del tipo y1 (t) = e-t/ 7 sin St - 0.15, dove t è espresso in microsecondi,
e una curva più lenta, y~(t) = 2.2 • (1 - e-t cos 2t), dove questa volta il tempo è espresso in
secondi.
Si digiti Il seguente listato
t1•0:.1:40; yl•-ein(6•t1).•exp(-t1/7)-.16;
t2a0: .1:10; y2•2.2•(1-exp(-t2).•coa(2•t2));
bl1•plot(t1,yt,'r');
ul•gca;
set(axl,'XColor','r' ,'YColor' ,'r')
ax2=axes( 'Position • ,get (ul, 'Pos •), ...
'XAxiaLocation','top•, .. .
'YAxiaLocation','right', .. .
'Color','none',, .•
'XColor', 'k', 'YColor', 'k') i
hl2•line(t2,y2,'color','k','Parent',ax2);
si noti però che a questo punto, anche se l'effetto è già raggiunto, il risulta.to non è ancora
soddisfacente: bisogna allineare le tacche degli assi, altrimenti i grafici risultano scarsamente
leggibili:
xlim•get(ax1,'XL1m'); ylim:get(axl,'YLim');
xincQ(xlìm(2)-xlim(l))/6; yinc•(ylim(2)-ylim(1))/6;
11t(ax1, 1 XTick',[xlim(l):xinc:xlim(2)] , ...
'YTick',[ylim(l):yinc:ylim(2)));
xlabel('Tempo (\mus)','Parent',axl,'color','r')
xlabel('Tempo (s) ', 'Parent' ,a.x2, 'color', 'li:')
I
-1
T~l•I
0_8o,...--..---i-2 __ --•..-----s,---...,er--_-,1 __
,..a ...,a
______
-,---;1~
0.◄667 2.5
0.1333 2 .. ,
.:~~ ~ ...
·/ i
-0 .2 · 1.5
-05333
-0.8867 0.5
A.5 Line
Gli oggetti cli tipo line possono essere creati con il comando line, sebbene normalmente siano
generati con le istruzioni plot o plot3, che stabiliscono anche i parametri dell'axes corrente. Ne
abbiamo appena visto una applicazione nell'esempio precedente.
Il numero di proprietà delle linea è considerevolmente inferiore di quello di axes. Si consideri .. -' ..
Ot• • •
il seguente esempio
.t •.
0 .8 .t;"'"'\'
e !: .
~
0.8 ~ ~)
\t:,.,,
';• •~ It,
..,,-;
0.4
t
'-,.d .~
I
\:';,
{<:.!)
I
I; •• )
CJ. q
!
V. ·'~'( ·.) :i
,._l, ~.....I I •
0.2
1.J j
o
\ .J
y, d .,.J...
-0.:Z ~-
l I; /
'Ì ~
-0.4
'ri
,C\ (
1.:J
)
=~
¼>"'
,,::.1..
-0 .8
i "'2
~.
~"\. § ~~
-,.
....
,..... I.
'·-·
·,?
Q '·:i
- 0 .8
•,
'--..
!. • ~
-1
o 2 6 1 8
-~1/
9 10
Gli altri attributi di linee sono Xdata, Ydata e Zdata, i cui valori sono i vetto1·i delle coordi-
nate delle linee tracciate, e EraseHode, che definiace il modo In cui sono disegnate e cancellete
le linee e può I.\BSUrnercquattro valori: con 'normal' quando uno. linea è cancellate. l'intera ,.
regione corrispondente sullo schermo è anaUzzata e ridisegnata., In modo da evitare la. cancel•
!azione di eventuali linee sottostanti; 'background' cancello. la linea attribuendole il colore dello 'I
l,,.
sfondo, quindi colorando eventuali oggetti sottostanti; 'none• non cancella la linea anche quando 1!
l'oggetto è spostato o distrutto; infine 'xor' permette una. cancellazione senza danneggiare figure li
;I
sottostanti, ma presenta un altro inconveniente: se il colore di sfondo non è nero il colore della )
curva risulta alt er at o. Con riferimento al precedente esempio si provino ora le seguenti ist ruzioni :
set(p(l),'EraseHode','xor')
set(gca,'Color','w' ) Y.la l i nea cambia colore
set(p(1),'EraseHode', 'uone ' ) %torna al colore originario i,
delete(p(l)) %noncancella la curva
function tx>om(mappa)
g•0.81;
...
;
v0•randn{l)•1000;
teta0=rarid(l)•pi/2+pi/4;
iO=fix(rand(1)•64)+1;
cO:armappa( iO, : ) ;
set(pnt_p,'color' ,cO);
vOxmvO•coa(tetaO):
vOy•vO••in(te~aO);
t=O;y•O;x•O;
vhile (y>=O)l(x>-6000)t(x<6000)à(y<30000),
t=t+.1;
x=vOx•t;
y=vOy•~-.S•g•t -2;
set(pnt_p, 'xdata' ,x, 'ydata' ,y);
dravnov
end
end
A.6 Surface
Gli oggetti di tipo surface sono gli analoghi tridimensionali di quelli di tipo line e sono generati,
oltre che con i comandi grafici ad alto livello mesh, surf e eur:fl, con il comando surface.
Gli attribu ti EraseHode, LineStyle, LineWidth, Marker e HarkerSize hanno lo stesso signi•
ficato e uso vis to per gli oggett i di tipo line. EdgeColor e FaceColor permettono di definire il
modo in cui il colore, definito nell 'attrlbuio CData viene distribuito sui bordi e sulle facce dei
singoli elementi che definiscono l'intera superficiej questi attributi possono assumere come valore
un colore specifico oppure i ve.lori none 1 tlat o i11terp 1 con cui i corrispondenti elementi non sono
colora.ti, sono colore.ti con un solo colore o con un insieme di colori risultanti da. un 'interpolazione
linee.re, come vlat.o a pag. 98. Ovviamente, sarà possibile definire la. traapa.renza sia per I bordi
che per le facce, u11&ndogli e.Ltributi E:dgeAlphae Fa.ceAlpha, che definiscono il modo In cui si
distribuisce le. trasparenza. definita da. AlpbaData, Infine HohStyle definisce un tracciamento del
bordi solo in base alle righe della matrice di cui rappresentare i dati, alle colonne o ad entrambe
le informa zioni.
Come per \Ines, i dati di cui tracciare il grafico sono contenuti negli attributi XData, YData
e ZData, con l'aggiu nta di CData per i de.ti relativi al colore e AlphaData per quelli relativi alla
trasparenza .
Com e esempio si provino i seguenti comandi
A.7 Image
Gli oggetti di tipo image sono caratterizzati dall'associazione immediata fra valor i numerici e
mappe di colore, al punto che si può dire che sono visua.li:n.azioni delle mappe di colore. Un
oggetto di questo ti po è creato con il coma ndo image(C), dove la matrice C contiene un insieme
..
.,··.
fI
di numeri interi in genere fra l e 64 (si ricordi che le mappe di colore predefinite contengono 64
colori). Per vìeuaJizzare i colori nella mappa di colore hot poeaiamo usare
image(1:64), colormap(hot)
Naturalmente ogni immagine bidimensionale può essere interpretata come un insieme di colori.
:J
Si carichi il file dimostrativo EARTH.MAT, che contìene le due variabili X e ma.p
l.
load earth
image(X)
,I
-i '
colormap(rnap)
I
l
Lo stesso risultato si potrebbe ottenere con il comando pc olor, come visto a pag. 99, che però I
impiega un tempo notevolmente m·aggio re per completare il disegno. n motivo è che pcolor
crea in realtà un oggetto di ti po surface e definisce una vista dall'alto, ovvero con angolo di
elevazione di 90°, mentre image crea un oggetto di tipo image . Il numero di attributi di questi
ultim i è decisamente ridotto rispetto ai primi: sono presenti solo CDau, XOata e YOata; que~ti
ultimi specificano la posizione delle righe e colonne nell'immagine. Infine, abbiamo ancora due
proprietà legate alla trasparenza, AlphaOata e .AlphaDataMapping.
A.8 Text
Sono oggetti di tipo text tutte le stringhe di caratteri presenti nei grafici. Abbiamo già acr.enna-
to a tre oggetti di questo tipo quando abbiamo parlato degli attributi di axes: Title, Xlllbel e
Ylabel contengono i puntatori a titolo e intestazioni dei due assi. Abbiamo visto a pag . 75 la gen•
erazlone di commenti nei grafici con il comando text. In realtà questo comando genera un oggetto
di tipo text e ne restituisce il puntatore se usato nella. forma p•tut Cx,y, 'stringa'). Oltre agli
attributi FontAngle , FontH11.JDe, FontSize, FontWeigh1:, FontStrikeThrough e PontUnderline visti
in precedenza , nonchè la definizione del colore del testo con l'attributo Color, eeiste un gruppo di
attributi necessa..ri a definire la posizione della stringa; questi sono: Unita (si noti che per definire
una posizione occorre sempre defìnire delle unità di misure.); Po1i1:ion, che definisce le due (o
tre per grafici tridimensionali) coordinate del testoj Extant è un attributo di sola lettura (nel
senso che non può essere modlfìcato con un comando 111:)e che fornisce le dimensioni del teetoi
per modificarlo bisogna u:,are l'attributo Font9ize, HorizontalAlignm■nt e VenicaUlign111ent
possono assumere I valori 'ldt'i 'cenur• o 'righ1:' il primo, 'top', 'middle' o 'bottom•
il secondo, e definiscono l'allineamento del test.o rispetto al punto definito In Poeit ion; infine
Rotation permette di specificare uno dei sette angoli (in gradi) predefiniti di rotazione per il
testo (O, ±90, ±180, ±270). È presente infine l'attributo EraseHode il cui significato è stato già
discusso per gli oggetti di tipo line . Se Editing è settato a 'on' è possibile modificare il testo .
I
.t
11
f
l
\.
Appendice B
Creazione di un 'interfaccia
utente
In questa appendice ci occupiamo della creazione di un'interfaccia grafica utente (GUI, Graphic
User lnterface) tramite MATLAB. Ovviamente potremo solo farCIdei cenni all'argomento, qu indi
ci limiteremo a dettagliare quanto basta per iniziare a cre&re semplici G Ul.
Lo strumeuto principale per la creazioni di GUI è il comando guide, che sta per GUI Deoign
Environment (ambiente per il progetto di GUI). Digitando ques to comando appare una finestra
piuttosto familiare a coloro che si occupano di GUI, con i soliti bottoni, chec k box, radio button,
ecc (Figura B.l),
Anche In queste. appendic e i nomi degli oggetti e delle loro proprità non sono stati tradotti ln
Italiano, sia per le difficoltà presentate 111alcuni CB8idal mnterlale linguistico ste111101 eia perché
,® imi
,® @ ~
~
1.f
1~i 111
, '
I? ·t: •.,•
che a questo punto MATLAB esegue un salvataggio preventivo della nostra figura; memorizzi-
amola. con il nome guiExl.fig. Quindi appare l'editor di MATLAB, che apre il file guiEx1.m e
si predispone sulla function:
Ora Cancelliamo l'istruzione eseguibile della function, e quindi sostituiamola con cloae(gcf);
l'intera function deve quindi essere:
Ora salviamo e chiudiamo il file guiExl. m, quindi torniamo sul nostro bottone, schiacciamo '
ancora il tasto destro e selezioniamo Inspect Propertiee. Si apre l'ennesima finestra, Property
Inspector (Figura B.3}, su cui modifichiamo il BackgroundColor e il ForegroundColor usando
dei colori ad arbitrio , e modifichiamo la proprietà String, con il valore Chiudi.
Ch iudendo questa finestra, scopriamo che sul nostro bottone è comparsa la scritta "Chiudi"
e che il bottone ha cambiato colore . Infine, clicchiamo con il tasto destro in qualunque punto del
foglio a quadretti, e apriamo di nuovo il Property Inspector, che questa volta. presenta diverse
proprietà., che riconoscerete subito essere quelle di un oggetto di tipo figure. Modifichiamo la
proprietà. Name in Primo esempio di CUI, il Pointer in circle e il Tag in gui1Ex . Quindi,
B.l. PRINIA.APPLICAZIONE 485
il
'
~v~•
;<tt:;i;' :.• .... •. ~3 •·j f. .
(~
·-~-.
I
salviamo i cambiamenti alla guiExl. :fig e chiudiamo la finestra guide. Infine, da MATLAB,
digitiamo il comando guiEx1 e otterremo la finestra in Figura B.4.
Ovviamente, schiacciando il bottone la finestra si chiude.
A questo punto ci si può chiedere: perché abbiamo posto a on la visibilità. della handle? E in
genera.le , a cosa serve questa opiione? La risposta è la. seguente. In genere, gli oggetti GUI sono
progetta.ti per funzionare come interfacce a se stanti. Tuttavia, anche una finestra GUI è una
normale finestra MATLAB, e come tale è soggetta ai comandi visti nell'appendice A. Questo
comportamento pub dare luo go ad effetti indesiderati, per cui in alcuni casi può essere opportuno I
"nascondere" i puntatori alle finestre GUI; ciò si ottiene ponendo a off la ho.ndle visibility. Un
oggetto con una handle nascosta non consente più l'uso di comandi quali get, aet, findobj. Nel
caso dell'esemp io appena visto invece l'uso del comando cloee(gcf) richiede che la finestra sia
visibile, e il suo puntatore ottenibile con gct {si noti che gef restituisce il puntatore dell'ultima
lI !
l
'\
, BacklngSiora • on
'- BusyActlon ..,. queue
- BunonDownFcn
- Cilpping ~on
j CloseRequestFcn ctosereq
•- Color ~~:, ,,.. ,:,1
Cotormap
,- CreataFrn
' - CunentCharacter o
finestra selezionata. il cui attributo HandleVieibility eia a on), altrimenti la GUI non potrà
chiudere Be stessa, cosa di cui il lettore potrà facilmente convincersi con il seguente esperimento:
I
si riapra la GUI precedente con il comando
guide guiEx1
e si ponga. l'opzione Command-line accessibilìty a ot!, poi si sa.lvi e si chiuda il tutto e si faccia
ripartire la GUI. Questa volta., schiacciando il bottone non succede nulla, e se sono aperte altre
flne8tre (per esempio create con un comando figure o un plot), saranno queste ultime ad esaero
chiuòe.
Se però da una. parte è vero che ponendo a oft la visibilità proteggiamo la GUI da chiusure
imprev iste, è pur vero che una GUl che contenga grafici o superfici o in genere qualsiasi cosa
legata a degli axe1 deve prevedere l'accessibilità del puntatore agli axes stessi. Perciò esiste una
possibilità "intermedia.": con l'opzione User Speci:tied si possono de6ni1'e le HandleVisibility
per ogni singolo oggetto che compone l11.GUI.
lnfine, va detto che l'esempio proposto è stato scelto solo per la sua semplicità: infatti in
realtà il problema della visibilità del puntatore alla figura GUI dall'interno delle callback si risolve
usando il comando gcbf (Get CallBack Figure) che funziona come gcf 1 quindi basla usare come
callback
cloee(gcbf)
...
B.2. OGGETTI GUI 4Bì
4. Radio Button: simili ai precedenti, sono però in genere usati in maniera mutuamente es-
clusiva, ovvero selezionare un oggetto della lista fa si che gli altri siano deselezionati; questa.
operazione non l! però automatica in MATLAB, per cui in seguito verranno illustrate le
operazioni necessarie ad ottenerla.
5. Static Text: si tratta di semplici commenti, stringhe di caratteri non alterabili.
6. Editable Text: a differenza del precedente, il testo può e8sere alterato dall'utente.
7. Slider: si tratta delle "barre di scorrimento" di Windows, e servono a definire valori
va.ria.bili con continuità. in un intervallo.
8. Frame: de6niace una. cornice per raggruppare più controlli in unità logiche. ·1
9. Pop-up Menu: sono menu e. tendine, una versionesemplificato. del menu di flnestra che
vedremo nel prossimo paragrafo.
10. List Box: simili ai precedenti, forniscono una lista di alternative.
11. Axes: sono normali axes, per inserire grafici nelle GUI.
B.2.1 Bottoni
Pa.esiamo ora ad un'applicazione meno banale della precedente, che ci permetterà di usa.re oggetti
GUI per eseguire funzioni MATLAB. Si riconsideri l'esempio boom.in visto a. pag. 479 e proponi-
amoci questa volta di creare una. G UI {guiEx2 ,m) per fa.rio eseguire. Introdurremo un Axea per
disegno.re i proiettili, un Toggle Button per abilitare l'esecuzione e un Pu11h Button per tracciare
i proiettili se l'esecuzione è abilitata o cancellare il contenuto degli axee in caso contrario.
Usando il comando guide, posizioniamo gli Axes, il Push Button e il Toggle Button, Si
noti nel menu Layout abbiamo vari strumenti che aiutano nel disegno, possiamo agganciare gli
oggetti alla griglia o allinearli esplicitamente, selezionandoli (per selezionare più oggetti basta
tener premuto il tasto SHIFT e continuare la selezione) e scegliendo l'opzione Align 0bjects
(Figura B.5).
Quindi. con il Property Inapector definiamo le seguenti proprietà: per l'intera figure poni•
amo il Nam .e a Eeempio boom (e volendo scegliamo qualche colore a piacere); per gli axea poniamo
a ott l'a.ttl'ibuto Visible; per il Toggle Button, poniamo a Abilita la proprietà String e a en1
il Tag; infine, per il Push Button poniamo a Fuoco! la String.
Ora dobbiamo definire le callback. Prima però modifichiamo il file boom.m. Infatti esso non
dovrà più tracciare i proiettili in un generica. figura corrente , ma esatta.mente in quella della GUI,
quindi dovremo passargli le handle degli oggetti nelle GUI. Inoltre. il ciclo 11hile non sarti più f;
infinito, ma dipenderà. dallo stato del Toggle Button. Ecco corne si modificano le prime linee
della function boom.111
function
1 che per comodità. abbia.mo rinominato
boom1(mappa,handles)
boom1 .m:
I
g=9.81;
ax_p=handles.axesl;
I
I
pnt_p=line('marker','.','erasemode','none', ...
'markersize',2,'parent',ax_p);
set(gcbf,'Color',mappa(end,:));
set(ax_p,'color',rnappa(l,:));
set(ax_p,'xlim',(-6000 6000),'ylim',,, ,
[O 30000],'xtick',[J, 1
ytic:k',());
dra11nov:
vhile(get(bandles.en1,'value'}=•1),
Il resto è uguale a quanto visto in precedenza. Si noti che la differenza. essenziale è l'a.ver
passato come parametro in ingresso la struttura handlos 1 che contiene le handle di tutti gli
oggetti nella GUI. Inoltre, i campi di questa struttura. sono proprio i Tag dei singoli oggetti
grafici: tigure1 per la figura, axea1 per gli a.sei,(valoridi default) en1 per Il Toggll Button.
Infine definiremo le due cn.llba.ck del Push Button e del Toggle Button.
488 APPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE
Come si vede, la struttura handles è "gratis", è definita. già nell'm-file che lancia la GUI.
Inoltre, per quanto riguarda. la callback per il Toggle Button, abbiamo usato · il comando gcbo,
che restitu isce la handle dell'oggetto che ha lanciato la ca\lback corrente (in alternativa si poteva
ovviamente usare get (handles. en1), come già si è fatto nella function booml). Ultima consider-
azione sul Toggle Button: qual'è it valore quando il bottone è schiacciato o non schiacciato? La
risposta è nelle due proprietà Max e Kin: quando il bottone è schiacciato la proprietà Value ha il
valore definito da Hu che per inciso è l per default, altrimenti ha il valore Hin. A questo punto
l'applicazione è completa, un esempio di funzionamento è riporta.to in Figura 8.6.
I[ l
B.2. OGGETTI GUI 489
r
f:
Altri punti sono degni di interesse in questo esempio. Anzitutto, si noti che dopo aver
schiacciato il Puab Button, la function booml è in esecuzione . Se schiacciamo il Toggll Button,
viene eseguita la ca.llba.ck dello stesso, che si limita a cambiarne il nome. 11 punto è che viene
eseguita. una fun~one mentre è gici in esecuiìone un'altra /un~ione. Cib è poseibile solo se la.
proprietà. Intarruptible (o.ssociata. In questo ca.so a.I Puah Button, ma. si tra.tta. di una proprietà
dì tutti gli oggetti gra.lici} è tiettata a. on (valore di default}. In questo ca.eo infatti, l'esecuzione
si a.rresta. alle. prima delle seguenti istruzioni:
• dravno\l
• figure
• gatframe
• pausa
• vaitfor
Raggiun ta una di queste istruz ioni , MATLAB sospende l'esecuzione e processa l'evento che
ha generat o l'interruzione. Se invece la proprietà Interruptible è settata. a oft solo quando
l'esecuzione è terminata si può processare l'evento che aveva generato l'interruzione, il che è
ormai possibile solo se esso è stato inserito in una coda. temporanea. A ciò provvede l'attributo
BusyAction, se settato a. queue. È chiaro altresì che se invece questo attributo è settatu a.
canee! l'interruzione è persa. Ricapitolando, un evento non è processato solo se la BusyAct ion
dell'oggetto che la genera è c:a.ncel ed è nel frattempo in esecuzione una funzione lanciata da un
oggetto con la proprietà Interrupt ible pari a. ott.
Si noti infine che mt!ntre l'applicazi on e è attiva è possibìle passa.re su altre finestre M ATLAB.
Talvolta però si vuole che l 'utent~ sia. costretto a rima.nere su una. sola. finestra., come nel ca.so
i'
. , j
,. I
.,,
I•
490 A.PPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE
di finestre io cui c'è una richiesta (quelle del tipo "Sei sicuro di ... ?"). Per ottenere questo
comporta.mento, si pone la proprie tà WindovStyle della finestra principale al valore modal.
Per aggiungere Re.dio Button e Static Text 8\H l"ume, dovremo selezionare quest'ultimo,
schiacciare il tasto destro del mouse e selezionare l'opzione Send to Baclt, per portare sullo
efon~o Il trn1111
1 altrimenti Il Framecopre gli altri comandi.
Defht!nmo quindi le seguenti proprletè.:
• per lo Sta.tic Text
- String -+ Traccia:
• per il primo Radio Button:
- String ➔ on
- Tag ➔ rbi
1
B.2. OGGETTI GUI 491
- Tag ➔ rb2
Per quanto riguarda la scelta del tipo di tracciamento, è sufficiente che ci sia un controll o,
all'interno della function boom1 del contenuto dell'attributo Valu• dei Radio Button: infatti,
quando uno di questi oggetti è sele-iionato il ano Value passa al valore definito daJl'attibuto Max.
Ecco quindi il frammento di nuovo codice da. inserire nel file boom! .111:
pnt.p•lin•(•~ark•r','.','par•nt•,ax_p); I
it (g•t(handle1.rb1,'Value')••1) ,f
, .
■ •tCpnt_p, 1 1ra11mod1','non•','mark1r1iz1•,~);
elt1
11t(pnt_p,'1ra11mode','xor','marker1ize',12);
end
Come si vede, se i Radio Button sono resi mutuamente esclusivi, è sufficiente controllare
uno solo dei valori. Ora dobbiamo definire le callback dei Radio Button, che hanno lo scopo di
renderli mutuamente esclusivi :
Si capisce che il l'attribut o Vs.lue restituisce l'indice della voce sele~ionata nel menu, mentre
String cont iene l'insieme delle voci. li motivo per cui si è usa to il comando eval è che in realtà
la. voce è restituita eotto forma di stringa di caratteri.
In Figura 8 .8 abbia.mo un esemp io di esecuzione della GUt.
Per completezza , prima. di abbandonarlo, riportiamo l'intero file boomi .111 , con tutte le mod•
ifiche fino a questo punto apportate:
,..
.I
,: I
li I
,I
I
492 ..\PPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE
I
I
-_.~·r,)~
.'"{i•,
-;~l;t.l~
.
......i:.!:
. ·,'it~.
i}.1
~~i' 1·
•f~
~~--~
,,
:ff_:t...,
·~
,•:~:.
I
. 't
~~
.-:~
., · t~ ~- ~ .. ~r
..,,·....
J.'-i\-tA.·
·!tr:r~·f"'i.~t··
•ll:~;:._~)
..\·~~i~~ ~'?-t4'~~
·J,~;;;~~~-!
· ~L,~'fl
.J ~ • '-~'1.11'f~ ,(1_1./i~~t
tunction boom1(mappa,handles)
g=9.Bl;
ax_p=handles.axesl;
pnt_p~lìne('marker','.','parent',ax_p);
if (get(handles.rb1, 'Value')•al)
1et(pnt_p,'erasemode','none 1
, 'markeraize',2):
else
set{pnt_p,'erasemode','xor','markersize',12);
end
set (gcbt, 'Color' ,mappa(end, : ) ) :
set (ax_p, 'Color 1 ,mappa( l,;), 'Vie111 , (O 90));
set(ax_p,'xlim',(-5000 5000],'ylim',(O 30000),,,.
'xtick', (), 'ytick', (), 'visible', 'on');
dra.wnov:
vhile(get(handle1.enl,'valu1 1
)••1),
vO•randn(1)•1000;
tetaO•rand(1)•pi/2+pi/4:
iO•tix(ra.nd(1)•64)+1:
cOamappa(iO,:);
set(pnt_p,'color',cO);
vOx=vO•cos(tetaO);
vOy•vO•ain(tetaO);
t•O;y=O;x•O;
while (y>•O)t(x>-SOOO)l(x<6000)t(y<30000),
tst+.1;
x=vOx•t;
y=vOy•t-.S•g•t-2;
. set(pnt_p, 'xdata' ,x, 'ydata' ,y);
'\
B.2. OGGETTI GUI 493
dra11no11
end
end
function boom3d(mappa,handlea)
g=9.81 i
ax_p=handles.axea1;
pnt_p=line('marker','.','parent•,a.x_p);
if (get(handlea.rb1,'Value')••1)
set(pnt_p,'erasemode','none','markeraize',2);
elu
1et(pnt_p,'era1em0de','xor','markar1iz1',12);
end
1at(gcbf,'C0lor•,mappa(1nd,:));
aat(u_p,'Color',mappa(1,:)):
sat(ax_p,'xlim',(-6000 6000),'ylim',(-6000 6000), ...
'zlim', [O 30000), 'xtick', [), •ytick', [), .. ,
•zt iclc • , (] , 'Vie11' , (-37. 6 30) , •viai bla' , 'on') ;
1
view(3);
drawnow;
11hile(get(handle1.1n1, 1 valua')••1),
vO=randn(1)•1000;
teta0•rand(l)•pi/2+pi/4;
fiO•rand(l)•pi/2+pi/4;
i0•fix(ra.nd(1)•64)+1;
cO=mappa(iO, :) ;
set(pnt_p,'color',cO);
v0xav0•coa(teta0)•coa(fi0);
v0y•v0•c01(tata0)•ain(fiO);
v0zav0•ain(teta0);
t•0;y•0;x:0;z:0;
while (z>=O)t(x>-6000)t(x<6000)t ...
(y>-6000)l(y<6000)t(z<30000),
t=t+.1;
x•v0x ♦ t i
Y"'V0y•t;
z•v0z•t-.6•g•t-2;
1at(pnt_p, 'xdata' ,x, 1 ydata 1 ,y, 'zdata' ,z);
dra11nov
end
end
Come si vede, è identico al precedente, tranne che per qualche variante che riguarda la terza r
dimensione. Proponiamoci quindi di variare l'angolo rli azimut dell'Axu tramite uno Slider
e poterlo imporre tramite un Edit Text. Useremo anche due Static Text per aumentare la
leggibilità . In Figura B.9 è riportata una esecuzione della GUI.
È inoltre presente anche un Check Box che descriveremo più avanti. Per il momento, si
I
osservi che l'Edit Text contiene solo il valore numerico dell'angolo, ed è preceduto e seguito
dalle due stringhe Azimut = e gradi che sono degli Static Text. L'angolo di azimut varia fra
-180° e 180°, e ciò sarà indicato ovviamente nelle proprietà Hu e Hin dello Slider. Inoltre, la
proprietà Value dà il valore corrent~ e Slider shp ha due componenti 1 la prima per indicare l
,.
1.,
l~
494 1lPPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE
- • lii!30
I • I
Figura B.9: Sliders e a.Itri comandi.
"\
l'avanzamento quando si schiaccia sulla freccia, la seconda. quello che sì ottiene achia.ccla.ndo su
una. wna vuota dello Slid•ri per la prim1\ definiremo un valore di 0.0278, pari a 10/360, in
modo che la freccia faccia. va.ria.re l'azimut di 10°, per il secondo Invece avremo il valore 0,24,
ovvero 90/360 per spostarsi di 90° (si noti che questo valore ~ sempre calcolato come rapporto
fra il valore effettivo e !'interva.llo fra. massimo e minimo). Inoltre , la. callback dello sl!der dovrà
definire il valore che appare sull'Edit Tnt, e viceversa, imponendo un valore di azimut nell 'Edi t
Text esso dovrà riflettersi sullo Slidu . Ecco quindi in sintesi i valori delle proprietà:
• per lo Slider:
- Max -+ 180
- Min ➔ -180
- SlìderStep X ➔ 0.0278
- SliderStep y -+ 0.25
- Value -+ -37
- Tag ➔ 11id1rAzimut
• per l 'Edit Tut
- String ➔ -37
- Tag -+ testoAz
l
•· l
'I
'I
Si noti che le due caJlback aggiornano vicendevolmente i rispettivi oggetti. lofine, l'azione
~·
l
effettiva. del cambiamento del punto di vista è effettuata. all'interno della funzione boom3d, all'in - !.
!I
terno del primo ciclo vhile, con le istruzioni: ,1
, r·
•!.
•·'
• I
azm~get(handles.sliderAzimut,'Value'); ,.
set(ax_p,'View•,(azm, 30));drawnow; l
!
Ovviamente, in maniera a.naloge. è possibile definire una barra di scorr imento verticale per
cambiare l'elevazione. A questo scopo, è sufficiente definire, nella proprie ti Poaition dello Slider
un valore di vidth minore di quello di height e la barra si trasforma. automa..ticamente in uno
slider verticale.
Infine, aggiungiamo un Checkbox , definiamone la Tag al valore check3d e usiamolo per
definire una. rappresentazione bidimensionale o tridimensionale; per ottenere questo effetto, basta
modificare la callback del Pu1h Button come seg ue :
1et(handlea.text4,'Visible 1 ,'on 1 );
1et(handlea.textS, 1
Visible 1 ,'on 1 );
1et(handles.sliderAzimut, 1 Visible','on');
eval ( ['boom3d(',mappaCorr{mappalnd},',handles)']);
elu
set(handles.testoAz,'Visible', 'off');
set(handles.sliderAzimut,'Visible','otf');
set(handles.text4,'Visible','off 1 );
set{handlea.text6,'Visible','oft');
eval(('booml(',mappaCorr{mappaind},' ,handles)']):
end
La. definizione della visibilità. serve ad evitare la visualizz,tzione dello Slider dell'Edit Text
e dei due Sta.tic Text Azimut = e gradi nel ca.so bidimensionale.
B.3 Menu
In questo para.grafo sono tre.tta.ti gli oggetti di tipo uimenu e uicontextmenu: i pr1m1 sono i
cla.saici menu a tendine ( ed eventu ali sotto-menu) che si a.ffia.ncano ai menu definiti nelle finestre
standard; i secondi sono i menu che appaiono quando clicchia.mo su un oggetto con il tasto
destro. Anche in quP..8toparagrafo procederemo con un esempio, più semplice del precedente, per
illustrare le caratteristiche di questa classe di oggetti.
Partiamo quindi da un file di eeempio che fa uso del comando pcolor (si veda. pag. 99). Si
consideri una matrice 11 x 11 che contenga i numeri naturali da. 1 e. 121 e ad essa si associ una
matrice in cui gli elementi omologhi divi8ibili per 3 sono contrsssegnati do 11 gli altri da Oi sì
visualizzi questa seconda matri ce con pcolor e si decida una gradazione di colori !nterpolota:
:I
.
:J
I•.
l
496 APPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE
C=1:121;
Csreshape(C,11,11);
c1..re111(C,3)=•0;
· pcolor(C1);
shading interp
Per prima cosa quindi creiamo una GUI, chiamiamola guiEx4 1 in cui inseriamo {con guide)
degli axes con un Tag pari al valore aui. Alla creazione, vogliamo visualizza.re l'immagine
definita dalle istruzioni precedenti, quindi definiamo la callback
Come 11ivede, il codice è idemico a quello riportato in precedenza, tranne per il fatto dì aver
definito la ma.trlce e e il puntatore all1 immagine come de.ti della finestra della GUI. Infatti, la
proprietà UHrData, comune a tutti gli oggetti grafici, può essere semplicemente vùita come un
contenitore, una variabile di appoggio in cui inserire dati. In questo modo, da ora in poi quando
ci servirà. la matrice C non dovremo più genera.da, ma la otterremo semplicemente con il comando
get. Ciò tra l'altro spiega anche perché abbiamo scelto di inserire C nella. tigun: è l'oggetto
grafico la cui handle è la più facile da ottenere.
Il seguente problema è la definizione di un menu a tendine per definire la mappa. di colori
usata e lo shading. A questo scopo, usiamo il bottone menu editor in guide, che lancia ìl Manu
Editor. Al suo interno aceglìs.mo il primo bottone, Nev Manu e definiamo il primo menu con le
seguenti proprietà:
• Label: ➔ tColori
• Tag: ➔ 111enuCol
Si noti che l'uso del carattere t fa si che la prima lettera sarà. sottolineata, creando uno
"shortcut" Windows, in modo che ALT+C faccia aprire il menu folori.
Ora, all'interno del menu, creiamo due sottomenu, con il bottone New Henu Item, con le
seguenti proprietà:
• per il primo sottomenu:
Label : ➔ 11:Happe
Tag: -t 111enuHap
• per il secondo:
- Label: ➔ 11:Stumature
Tag: ➔ sfmHap
- si selezioni la voce Separa tor above thie ì tam
Infine, per ognuno di questi sotto menu si definiscano ulteriori sottomenu, come visibile in
Figura B.10. 'i
In questo modo abbia.mo definito la struttura dei menu. Si osservi che in Figura B.10 è l
definito anche un menu Divisibilità, che per il momento ignoreremo. I
l
!
I
B.3. !vIENU
l
Figura B.10: Il Henu Editor.
A questo punto bisogna specificare le azioni da eseguire quando vengono selezionati i singoli
menu. Ancora una volta ci riferiremo alla proprietà Callback. Questa volta perb le callbaclc
non sono cree.te da guide, ma. è nostro compito scriverle completamen 'te. Nel caso di istruzioni
molto semplici Il compito è banale. Ad esempio, per le sfumature, pOSBiamoscrivere direttamente
l
nella casella Callback del menu edit or ahading tlat, shading taceted e ahadìng interp per
i rispettivi sottomenu. Le cose invece iniziano a complicarsi nella definizione delle mappe di
colore, in cni l'istruzione inizia a diventa.re più articolata; ad esempio, all'interno del sottomenu
Ho-eavremo
l
set(gcbf,'Colormap',hot)
e cos\ via per le callback degli altri sot tomenu. L'istruzione precedente ha. il seguente significato :
I
guiEx4 è il file in cui è memorizzato il codice, menuLcb il nome della function da invocare, poi
abbiamo il puntatore all'oggetto corrente, una variabile vuota, da lasciare per future estensioni
e infine la funzione guidata, che crea. la struttura handles vista in precedenza.
I.
h
l
il
li
498 AP PENDICE D. CREAZIONE DI UN'INTERFACCIA UTENTE
A questo punto i com andi dovrebber o essere chiari. L'unica novità è la funct ion d•Hleziona,
il cui comp ito è la.gestione del segno di spunto nelle voci del sottomenu. A questo scopo, si Umlta.
R.dellmlne.re I segni de. tutti I eottomenu e poi Inserirne uno nella poeiilone fissata. de.Isecondo
pl\ratne~ro:
analogamente, in 111enu:Lcb inseriremo l' istruzi one deseleziona(ha.ndles ,2), ecc . Per concludere,
in Figura 8.11 è riportata u na esecuzione del programma.
I
. i
i'
I
I.
B.4. USO DEL l'vIOUSE 499
get(gca,'CurrentPoint')
fornisce una matrice 2 x 3 in cui ogni riga contiene una tripla di coordinate {x, y, z ); nel ca.so
di grafici bidlmensiona.11 la teru coordinata (la quota.) è ovviamente flttizia., mentre nei ca.si
tridimensionali si tratta delle due coordinate estreme del eegmP.nto perpendlcolan a.Ilo schermo e
delimitato da.I pa.ralleplpedo che racchiude gli assi. SI noti c.he le coordinate sono ca.lcolate e.nche
se il puntatore non è ali 'interno degli assi correnti.
In questa maniera possiamo conoscere in ogni istante la posizione del puntatore in due di-
versi sistemi di coordinate, che possiamo chiama.re "assoluto" (le coordinate della figure, che a
loro volta possono essere espresse nelle diverse unità di misura coneentite dall 'attrìbuto Units)
e "utente" (le coordinate di axea, espresse nelle unità definite cll\gli Msi), Ora ci serve una
maniera. per eseguit1:1azioni tramite il mouse, delle CallBaclc. Gli oggetti dì tipo figure hanno
tre proprietà: 'WindowButtonDownFcn e 'WindovButtonUpFcn che sono delle callba.ck legate rispetti-
vamente allo schiacciare e rilasciare il pulsante del mouse, e WindowButtonHotionFcn, che è legata
al movimento del mouse; qua.le semplice esempio si digitì:
per ottenere una traccia visibile del movimento del mouse sulla figure. corrente.
Tutti gli a.Itri oggetti hanno le. sola proprietà ButtonDovnFcn, une. callback attivata qunn<lo
il pulsante del mouse è schiacciato in prossimità dell'oggetto stesso.
La possibilità di distinguere fra pressione e rilMcio del pulsante del mouse, propria del solo
oggetto figure, è usata frequentemente per definire azioni quo.li lo "zoom" del!& finestra . Se ad
esempio vogliamo definire un& possibilità di ingrandJmento sull'Insieme di Mandelbrot presentato
a pag. 99, poselamo usare le seguenti Istruzioni. Si noti per inciso che la funzione predefinita
z.oolll(pa.g. 82) non può essere impiege.ta, perché un oggetto frattale possiede Infiniti livelli di
dettaglio e richiede l'esecuzione dl nuovi calcoli a.d ogni ingrandimento, quindi non è sufficiente
alterare i limiti degli assi correnti.
Memorizziamo i limiti correnti dell'e..reaau cui tracciare l'insieme di Mandelbrot nell'attributo
Uee~Data della figura corrente. Quindi definiamo un a.xaa e delle callba.ck per le azioni di te.sto
schiacciato e rilasciato, che devono aggiornare i limiti dell'area. Per quanto riguarda la struttura
dei dati, creiamo una ma.trice che contiene le coordinate del punto in cui è stato schia.ccia.to il
bottone del mouse in prima riga e quelle del punto in cui è stato rilasciato in seconda.
Infine, usiamo un pulsante per attivare il calcolo dell'lngrandimento 1 • La. rel&tiva callba.ck
lancia la runction mand, che è una v&rlante di quella. presentata. a. pa.g. 89 1 snellita nel numero di
punti da. considerare:
function mand(P)
x=linspace(P(1,1),P(2,1),60);
y~lìnspace(P(1,2),P(2,2},60);
1 Ovviamente il calcolo può essere eseguito come ultima istruzione di WindovButtonUpFcn ,
ma ciò implicherebbe che una pressione accidentale del bottone del mouse forzerebbe un inutile
ricalcolo.
500 APPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE
(X,Y]•meshgrid(x,y);
C=X+j•Y; .
w~100•ones(size(C));
Zazeros(size(C));
tor n.,1:60,
Z•Z.•Z+C;
h•find(abe(Z)<2);
if -1sernpty(h),
W(h)an•ones(size(h) );
else
break
end;
end;
pcolor(X,Y,W);
u:ia( 'off');
ahading interp
Infine possiamo usare quattro !dit Text, con Tag xmin, xzcax,ymin e ymu sia per visualizzare
le coordinate scelte con il mouse che per selezionare da tastiera l'area su cui rappresentare
l'insieme di Mandelbrot. In figura B.12 è riportata una esecuzione del programma, dopo un
ingrandimento.
Di seguito sono mostrati i codici sorgenti delle callback . Si osservi l'azione di aggiornamento
degli Edìt Text
¼ ---------------------------------------------------------
l
functìon varargout • xmìn.Callback(h, eventdata, •..
handles, varargin)
¼ Stub tor Callback ot tha uicontrol handles,adìtl.
psgat(gcbt,'UaarData');
p(1,1)•atr2num(get(gcbo, 1
String'});
set(gcbf,'UserData',p);
'l, -- ----- -- ------------------------ ---- ---------------------
tunction varargout • x.ma.x_Callback(h, eventdata, •..
handles, vuargin) ·
7, Stub for Callback of the uicontrol handles.edit2,
p•get(gcbf,'U■ erData');
p(2,1)•atr2nu.m(get(gcbo,'String'));
1et(gebf, 1 U1erData 1 ,p);
l
l 11
,.
,.
Bibliografia
Balestrino A., G. Celentano, Teoria dei Sistemi, Liguori Editore, Napoli, 1982.
Bolzern P., R. Scattolini, N. Schiavoni, Fondamenti di Controlli Automatici, McGraw Hill,
Milano, 2000.
Cannon R. H., Dynomics of Phyaical Syatems, McGraw-Hill, New York, 1967.
Chen C., Linear Syatem· Theory and Design, Holt, Rinehart and Winaton, New York, 1984.
Chiacchìo P., S. Chiaverinl, Esercizi di Controlli Automatici, Llguori Editore, Napoli, 1996.
Desoer C. A., and M. Vidyasage.r, Feedback Sy,tems: Input-Output Propertiea, Ace.demlc Presa,
New York, 1975.
Franklin G. K., J. D. Powe!l, A. Emami-Naeini, Feedback. Control o/ Dynamìc Systems, III ed.,
Addison-Wesley, Reading, Massa.chusetts, 1995.
Franklin G. F., and J. D. Powell, Digitai Contro/ of Dynamic Syatema, III ed., Addiaon-Wesley,
Reading, Masaachusets, 1997.
Gandolfo G., Mathematical Methods and Models in Economie Dynamics, North-Holland, Am-
sterdam, 1971.
Hoppenatee.dt F. C., and C. S. Peakln, Mathematics in Medicine and the Li/e Sciences, Sprlnger
Verlag, New York, 1992.
Ja2winski A. H., Stochastic Processes and Filtering Theory, Academic Press, New York, 1970.
Kailath T., Linear Systems, Prentice Hall, Englewood Cliffs, New Jersey, l!l80.
Khal!l H. I{., Nonlinear Sy.ttema, Ma.cmillan, New York, 1992.
Kueera. V., Diacrete Linear Control, John Wiley, New York, 1979.
Luenberger D. G. 1 Jntroduction to Dynamic Systems, John Wiley, New York, 1979.
Maciejowskì J. M ., Multiuariable Feedback Design, Addison-Wesley, Wokingha.m, 1989.
Marro G., Controlli Automatici, Zanichelli, Bologna, 1987.
McKendrick A. G., Mathematics Applied to Medical Problema, Royal Society, Edinburgh, 1926.
Meirovitch L., Element.s o/ Vibrotìon Analysis, 2nd edn., McGraw-Hill, New York, 1986.
Sciavicco L., and B. Siciliano, Modeling and Control o/ Robot Manipulators, McGraw-Hill, New
York, 1996.
Smith C. A., A. B. Corripio, Principles and Practice o/ Automatic Procesa Control, II ed., John
Wiley, New York, 1997.
Thompson J. M. T., and H. B. Stewart, Noniinear Dynamics and Chaos, John Wiley, Chich•
ester, 1986.
Vidyaaage.r M., Nonlineor Syatems Analysis, Prentice Hall, Englewood Cliffs, New Jersey, 1993.
Testi su MATLAB
Cavallo A., R. Setola, F. Vasca, Using MATLAB, Simulink and Control Syatem Toolboz. A
Practical ApproacA, Prentice Hall, London, 1996.
MathWorks Inc., MATLAB. The Language o/ Technica/ Computìng. Using MATLAB, Math-
Works Jnc., Natick, Ma.ssachusets, 2001.
MathWorks lnc., SIMULINK. Dynamic Syatem Simulation /or MATLAB. Using Simulink,
MathWorks Inc., Natick, Ma.ssachusets, 2001.
Math Works Inc., Control Systern Toolboz. For Use with M ATLA B. Getting Started, Math-
Works Inc., Natick, Massachusets, 2001.
Bi bliografìa 505
Sha.mplne L. F., J. Kienenka, M. W. Reichelt, Soluing Boundary Value problemi Jor Ordinarv
Differential Equationa in MA T LA B with bvp4.c,
ftp://ftp.mathworks.com/pu b / doc / papers/bvp /tutorial. pdf.
Miscellanea
Bailey N. T. J., The Mathematical Theory o/ Epidemica, Hafner, New York, 1967.
I
Boulez P., Penaer la Muaique.aujourd'lwì, Schott's Sòhne, Mainz, 1963.
Devaney R. L., A First Course. in Chaotic D11namicalSyatema, Addison Wesley, Ree.dlng,
Maasa.chueetts, 1992.
Prìeberg F. K., Musica e:z:Machina, Verlag U\lstein, Berlin, 1960.
Quenau R ., Btiton, Chiffres et Letters, Gat\imard, Paris, 1965.
Schonberg A., Harmonielehre, Universal Edition, Vienna, 1922.
Zaripov R. C., .Kibemetika i Muzyka, Ne.kua. Akademli SSSR, Moscow, 1971.
\.
Indice analitico
WindowButtonUpFcn, 499
XColor, 476
XData, 480, 481
Xdata., 479
XDir, 476
XGrid, 476
XLabel, 476
xlabel, 75
Xlabel, 481
XLim, 476
XLimMode, 476
xor, 46
XScale, 476
XTick, 476
XTickLabel, 476
XY Graph, b\ock, 202, 324
ZData, 480
Zdata, 479
Zeri di tre.Bmiseione, 354
Zeri, dì polinomio, 112
Zero Order Hold, b\ock, 300
zero-crossing detection, 233
Zero-Pole (with initial outputs), block, 333
Zero-Pote (with initial :itates) , block, 333
Zero-Pole, block, 296
zeros , 31
~grid, 453
ZOH, 442
zoom,82
zpkdata, 340
l .
...