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 -