Sei sulla pagina 1di 522

Alberto Cavallo · Roberto Setola Francesco Vasca

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 •

l'ò' ~ .' UL .. fl .ll ~t a !I~ •é:• .•! .; • INDICE


iuSt J . :h,,~.T·~::;,,;-·
:.te · · Cl~. i ! • . ' ·' .
~: 3 Funzioni BU matrici
. 53
. _,i4 ()p~nci~ni logiche
. 56
' 4.5'. Complementi sulle matrici 58
4.5.1 Numero di condizionamento di una matrice 68
4.5.2 Ortogonalizzazione e spazio nullo , , ... , , , , ... 59
I 4.5.3 Fattorizzazione LU ed eliminazione gaussiana .
4.5.4 Soluzione del problema Ax = b: pseudo-inversa e minimi
5g

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

I 4.6 Altre matrici speciali .


4.7 Esercizi ........ , t I • ,
65
65

6 Grafica 73
lf 5.1 Grafici bidimensionali 73

I 5.2 Grafici multipli . . .


5.3 Scalatura degli assi ..
78
81

Il 5.4 Dati complessi ... , , .• , • , •. , . . ....


5.5 Tracciamento di più grafici nella.stessa finestra
I I • 83

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 6 Polinomi, interpolazione e insiemi


6.1 Operazioni fondamentali . . . . ,
111
111
6.2 Interpolazione .... . ...... 115
6.3 Insiemi e operazioni sugli insiemi 117
6.4 1:'~ ' •
ca:ierc1z1. . . . . . . . . . . , . . 120

.l
INDICE iii

1 Programmazione strutturata in MATLAB 123


7.1 Strutture fondamentali . 123
7.2 Script files .. ... ... . .. . . • ♦ 125
7.3 Funzioni ....... . . . .. . 126
7.4 La correzione dei programmi 131
7.5 Esercizi . . . . . . . . . . . . 134

8 Oggetti in MATLAB 141


8.1 Costruzione di una classe . . . . . 141
8.2 Ridefinizione di operatori e funzioni 146
8.3 Oggetti matriciali . 148
8.4 Ereditarietà. . .. . , , ' . 155

9 Funzioni matematiche 163


9.1 Derivazione e integrazione .. .. . 164
9.2 Ricerca di zeri e minimi ... ... . 165
9.3 Equazioni differenziali ordinarie .. . .. . 167
9.3.1 Problemi con condizioni iniziali t\8segnate ... 167
.... . .
I •

9.3.2 Problemi a.llnfrontiera . ' ' 171


9.4 Esercizi . . . . , . . . . . . . , . . . . . . 173

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

11 Gli schemi Simulink 189


11.1 Elementi testua.li . 190
11.2 Uso del mouse .. 191
11.3 Attributi dei blocchi 194
11.4 Un esempio non lineare: modello di una nave 197
11.5 Sinks - Blocchi di uscita . . . . 199
11.6 Sources - Blocchi di ingresso. . . 203
11.7 Alcuni blocchi funzionali . . 205
11.8 Look up table . 207
11.9 I segna.Ii 209
11.l0Esercizi . . . . 212
iv INDICE

12 La simulazione in Simulink 219


12.1 Schema di Lord Kelvin .. 219
12,2 Problemi di aimulazione . , , ... ' ( • ' ' JI
221
12,3 Metodl di integrazione numerica • I I 223
12,4 Soludone delle equazionidlfferenzlaliln Slmulink . , 228
12.S I parametri della simulazione .. , . , .. 230
. 12.6 Sistemi con discontinuità . . . . . . . . . . . 233
12.7 Sistemi tempo varianti . . . . . . , . . . . . 235
12.8 Equazioni differenziali con vincolialgebrici .. . .' 236
12.9 Esercizi . , , , ......... , ... , . , 239
13 Sistemi multi-variabili 245
13.1 Schemi Simulink multi-variabili . , ... . 245
13.2 Segnali l•D e 2-D ...... ... .... . 248
13.3 Manipolazione dei segnali multi-variabili . 249
13.4 Esercizi . , , . . . , , , . , , , , , , . . , , I I • I 252

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

15 Sistemi tempo discreto 277


15.1 Simulazione di equazioni a.Jledifferenze . , .... . 277
15.2 Un esempio: il ripopolamento di un lago ..... . 278
15.3 Sistemi con differente Sample time e sistemi ibridi 280
15.4 Esercizi ....................... . 282
16 Funzioni avanzate 285
16.1 Analisi del sistema . , ...... . 285
16.1.1 Integrazione . . . . , . . . . ... 285
16.1.2 Visualizzazione dei risultati 286
16.1.3 Linearizzazione ... 286
16.1.4 Punti di equilibrio . 287
16.2 Debbuging . 28B
16.3 Libreria 288
16.4 Esercizi . . 290
INDICE V

17 Librerie dei blocchi 293


17.1 Continuous . , . 294.
17.2 Discrete . .. , . , , . , . I I I I t , I , t t I I I I. I • t 296
17 .3 F\mctlon & Tabla , . ,
17.4 Math ... .. . ..
17.5 Nonlinear . . . . .
.
■ f • I t I t l

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

III Contro! System Toolbox 335


I
18 !Vlodelli nel dominio di Laplace 337
18.1 Funzioni di trasferimento . . . I • I I i t I t I f . .... . 337
18.2 Rappresentazione in termini di zeri e poli .. 340
18.3 Scomposizione in termini di residui e di poli . 340
18.4 Param etri carat teristici dei sist emi LTI . . . . 343
18.4.1 Frequenz e naturali e coefficienti di smorzamen t o 343
18.4.2 Guadagno statico . . 345
18.4.3 Ordinamento poli ..
18.5 Interconnessione dei sist emi
18.5.1 Connessione serie . .
345
345
346
l
18.5.2 Conn essione parallel o 346
18.5.3 Connessione in retroazione . 347 l
18.6 Proprietà nella definizione di un modeHo . 348
;
18.7 Rappresentazione per sistemi MIMO .. 349
!
18.7.1 Matrice di trasferimento , ... . 349
.I
I

18.7 .2 Rapp resentazione con zeri e poli 351


18.7.3 Array di sistemi SISO 352
18.7.4 Zeri di trasmi ssione
18.7.5 Connessioni .
18.8 Esercizi . . . . . . .
354
354
355
I
-Rl ~~ ì';"l7!"
"1'""'-::,,
.~ , ..

... ..

vi INDICE

19 Modelli nello spazio di stato 359


19.l Rappresentazione nello spazio di stato 359
19.2 Controllabilità ed oaeervabilità , . . .. 360
19.3 Conversioni tra le rappresentazioni 364
19.3.1 TraBfo.rma.zionedi baae . . . 364
19.3.2 Forme canoniche , ..... 365
· 19.3.3 Da e verso lo spazio di stato . 368
19.4. Riduzione dei modelli . 369
19.4.1 Sistemi allargati 371
19.5 Esercizi .. ·...... . 372

20 Risposta nel dominio del tempo 377


20.1 Risposta in forma analitica 377
20.2 llisposta al gradino .. . .. . 379
20.3 Risposta aJl'impulso . . . . . 380
20.4 Risposta ad ingresso qualsiasi 381
20.5 Evoluzione libera , , , . . , , , . . t I I 1 I
.
• I 383
20.6 Il comando ltiview .
' I f I I t •
' . 385
20.1 Esercizi . . . . . . . 387

21 Risposta nel dominio d ella frequenza 391


21.1 Diagrammi di Bode .. . 391
..
• • • I I

21.2 Diagrammi di Nyquiat .... .. .. . 394


21.3 Diagrammi di Nichols . , ...... . 395
21.4 Il comando l tiview per la. risposta in frequenza 396
21.5 Esercizi . . . . . . . . . . . . . . . . . . , . . . . 397

22 Controllo con retroazione di uscita 401


22.1 Traccia.mento del luogo . . . . . . . . . . . . . 402
22.~ Il comando rltool .. , .. , , ...... . . . .' . 405
22.3 Analisi di stabilità. con dlagre.mmi di Nyqulst ... 406
22.4 Margini di ampie2,zae cli fase ....... . a, ' .Il I 407
22.5 Reti correttrici con diagrammi di Nichols 410
22.6 Il comando siaotool. 412
22.7 Esercizi . . . . . . . . . . . . . . . . . 415

23 Controllo e stima nello spazio di stato 423


23.1 La retroazìone di sta.to . . . . . . . . 423
23.2 Controll o ottimo Lineare Quadratico 425
23.3 L'osservatore ... , .. 428
23.4 Il filtro di Kaiman . . . 430
23.5 Principio di separazione 433
23.6 Eserciz· ........ , 433
INDICE vu

24 Sistemi tempo discreto 437


24.l Modelli nel dominio tempo-discreto . 437
24.2 Conversione continuo-discreto . , . . t I • f I 439
24.3 Conversione discreto-continuo .. . . 446
24.4 Proprietà . . . . . , , . . . . . . . . 447
24.5 Risposta nel dominio del tempo . . . 448
24.6 Risposta nel dominio della frequenza . 451
24.7 Controllore discreto con luogo delle radici . 453
24.8 Controllore dicreto con retroazione di stato 455
24.9 Esercizi , . . , . . , , . . , . . . . 456
25 Comandi CONTROL pec- categorie 461
25.l Modellistica . . .... ... . 461
25.2 Caratteristiche dei modelli . . 462
25.3 Conversione dei modelli . . . 462
25.4 Riduzione dei modelli . . . . ••• t •• • • t I I I t 462
25.5 Rappresentazioni nello spazlo di stato t I I t -I J 462
25.6 Caratteristiche dei modelli , , . , . . , , ' e J I I • I I f • • ~ 463
26.7 Costruzione dei modelli . . , . 463
25.8 Risposta nel tempo . . . 463
25.9 Risposta in frequenza . 464
25.lOAllo.cazione dei poli .. . • • • I 464
25.llProgetto LQG , . . .. , , . . 464
25.12Equazioni di Lyapunov e Riccati • 1 • ■ I • • I 464

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

B.3 Menu .. . .. 495


B.4 Uso del mouse ' .. 499

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à

d'impiego del pacchetto per la didattica e la ricerca. L'avvento di Windows ha


portato un crescente interesse sullo sviluppo di interfacce utenti a finestra, per-
mettendo la nascita e lo sviluppo di Simulink, ambiente grafico a finestre per la
simulazione di sistemi dinamici, con potenzialità di funzionamento in real-time.
Il Control System Toolboxè formato da un insieme di funzioni MATLAB che
costituiscono una biblioteca di comandi per semplifica.re la gestione delle operazioni
più frequenti nelPanalisi dei sistemi dinamici e nella teoria classica e moderna dei
Controlli Automatici.
Questo libro intende essere una guida all'uso di MATLAB di Simulink e del
Contro! System Toolbox, indirizzandosi agli studenti dei corsi di laurea delle facoltà
scientifiche, nonché a tutti coloro che svolgono attività di ricerca sia in ambito
accademico che azienda1e.
L'approccio metodologico adottato nel libro è diverso da quello presente nei l
manuali. Attraverso l'impiego di esempi e per mezzo di una attenta organizza-
zione tematica, si intende condurre il lettore all'apprendimento del programma
evitando il passaggio per una pedissequa quanto sterile elencazione di tutte le
istruzioni a disposizione. I numerosi esempi consentono allo studente una imme-
diata interazione con i comandi presentati e gli oltre 200 esercizi, presentati nel
paragrafo finale di ciascun capitolo, costituiscono uno strumento cli verifica e di
incentivo nei confronti dell'uso personalizzato del programma. La. soluzione di una
selezione degli esercizi proposti è disponibile al sito www.liguori.it
L'approfondimento tematico è facilitato dalla scrittura delle parti in corpo mi-
nore. Queste parti sono orientate alla spiegazione di alcuni comandi "specialistici"
INDICE

o ad un approfondimento teorico relativo all'istruzione in esame; esse souo quindi


da intendersi come facoltative in una prima lettura.
Al lettore attento non può sfuggire la forte differenza stilistica fra le tre par•
ti che compongono il libro. Si tratta di una scelta. dovuta non solo al fatto che
ciascun autore ha curato una parte del Libro, quanto intrinseca al materiale stes-
I

,~ so presentato: la parte riguardante MATLAB ha un taglio fortemente didattico,


essendo propedeutica aWintero libro; l'apprendimento di Simulink invece è sem-
i plice da un punto di vista concettuale, ma lo sterminato ventaglio di possibili
i applicazioni suggerisce Wla presentazione basata principalmente su esempi; infine
il Control System Toolbox si rivolge ad un pubblico più specialistico, interessato
I: a problemi d.1modellistica, analisi e controllo di sistemi lineari e stazionari: per
questo moUvo deve esserne prevista una agevole e frequente consultazione, e una
terminologia più formalizzata.
Per esempi ed esercizi gli autori sono debitori a un gran numero di fonti, di
cui, per evitare di appesantire la bibliografia, solo le principali sono state citate.
Il libro fa riferimento alla versione 6.1 (release 12.1) di MATLAB,con le relative
versioni 4.1 per il Simulink e 5.1 per il Control Syatem Toolbox.

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 ';,
,
~

ul ••-rll 1••11••• '7 I


t t•uol T•l11• I
troc11n111 TNl.llmc ;

\j
Too~

I-~
,;

l
Figura 1.1: La finestra iniziale di MATLAB.

Inizialmente è meglio ignorare gli orpelli e dedicarsi all 'essen~iale. A que- I


I
, -·•
...: i

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

Figura 1.2: La Command Window.

Le.CommandWindowè la vera.finestra.operativa del MATLAB1 e de. qui potete


iniziare a digitare 1 vostri priml comandi.
La prima caratteristicache distingueMATLAB da molti altri progre.mmldi
calcolo~le.sua capacità di essere usato semplicementein maniera interattiva.,come
fosseuna semplicecalcolatrice: digitiamo

Premendo il tasto "INVIO" a cor~erma dell'istruzione, otterremo

ans =
13

Come ai vede, MATLAB rispetta la precedenza.della moltiplica.zioneaull'a.d-


dizione, e fornisce il risultato sotto forma di ane ( anawer,ovvero risposta.). Ov-
viamenteperò, ogni volta che eseguiamouna nuova operazione perdiamo il risulta-
to della precedente, quindi si pone il problema dJ memorizzare i risultaiì in maniera
permanente. Anche questa operazione è di una semplicità estrema: basta digita.re

a=4+3

I per memorizzareil valore 7 nella variabile l!l1 e digitando


1.1. PRlMI PASSI 7

potrete conoscere in ogni momento il valore memorizzato nella variabile.


Concludiamo questa sezione con un paio di osservazioni genet·ali. Anzitutto,
digitando
A=3+a+5;

scopriamo che il punto e virgola';' a fine istruzione impedisce la visualizzazione del


risultato sullo schermo , il che in questo momento può apparire inutile, o addiriUura
dannoso ( visto che non vediamo il risultato), ma quando si tratterà di comandi che
generano grosse moli di dati l'uso di un operatore che eviti lo sterile flusso sullo
schermo di migliaia di numeri assume la sua importani.a, anche per velocizzar e
le operazioni . Si noti che il punto e virgola impedisce solo la visualizzazione su
schermo del risultato, ma il calcolo del risultato stesso e la sua. memorizzazione
nella corrispondente variabile avvengono lo stesso, come risulta evidente digitando
A,a
che mostra i valori contenuti nelle due varia.bili (MATLAB è case sensitive, ovvero
maiuscola e minuscola sono diverse variabili).
A questo punto potete continuare ad esercitarvi memorizzando i risultati delle
operazioni elementari +, - , •, / in diverse variabili. Dopo un po' però scoprirete
che risulta difficile ricordare non solo cosa c'è in una variabile usata in prncedenza 1
ma anche se la variabile stessa è mai stata usata. Vi serve quindi un elenco delle
variabili che avete finora 4sate, e a. queeto scopo potete aprire una delle finestre
chiuse in precedenza: il 11Workapace" (ovverole spazio di lavoro, In memoria o-
perativa del MATLAB).Sul menu Viewselezionate Workspe.ce,e si aprirà una
finestra (Figure. 1.3) che vi mostrerà per ogni varie.bilefinora.utilizza.ta il nome,
la.dimensione (che discuteremo nel prossimo paragrafo), Poccupazionedi memoria.
in byte e la classe (che discuteremo ln un prossimocapitolo).
Notate per inciso che ans è una vera e propria variabile, che MATLAB crea
se non memorizziamo esplicitamente il risultato dì un 1operazione in una variabile.
Se inoltre non volete aprire una finestra, che inevitabilmente sottrae spazio alla
11Command Window" 1 , potete digitare il comando who, che restituisce l'elenco
delle variabili presenti nello spazio di lavoro, oppure whoe, che fornisce a.nche le
dimensioni.
Dopo aver memorizzato un singolo valore numerico, il passo successivo è la
memorizzazionedi un insieme di numeri. Abbiamo diverse possibilità:
• -vettori
• struttw ·e

• celle
1 In re&IUnon è eaa.tte.mente
coal, potete \raaclna.re Workspace11Fuorl11 dalle.8ne11tra.
le.fine11tra.
MATLAB.
8 CAPITOLO 1. ELElvIENTI FONDANIENTALI

..

Figura 1.3: La finestra Workspace.

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.2 Vettori e matrici


In maniera semplificata., possiamo pensare ad un vettore (o array) di numeri come
ad un elenco indicizzato di numeri, in cui si possa quindi definire qual è il primo,
quale il secondo, e cos\ via.
indice 1 2 3 4
valore 1 5 2 6
La memorizzazione di un vettore in una variabile è semplice:
A= (1 6 2 6]

cui MATLAB risponde con


A =

1 5 2 6

Vaccesso ad un elemento generico di un vettore avviene tramite indicei ad


esempio, per visuafrz.zare il secondo elemento del vettore usiamo A(2), per aggiun-
gere 4 al terzo digitiamo
1.2. VETTORI E MATRlCI 9
l
l
A questo punto possiamo pensa.re a ogni numero come ad vettore particolare1
di lunghezza unitaria. Questo modo di vedere le cose ci abitua a ragionare secondo
le strutture MATLAB. 1
In realtà, anche una stringa di caratteri è un vettore di caratteri (come avviene
anche in C). Ad esempio, definendo

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

che in algebra si indica con

1 3
I
( -24 4 5)
o
M=
1
6.3
5

In MATLABancora una volta la memorizzazione è banale:


12
-1.3
I I
M = (1 3 6
r' I

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

H = [1 3 6; -2 4 O; 4 6.3 12; 1 5 -1.3]

producendo lo stesso risultato.


I Generalizzando l'osservazione precedente, possiamo pensare ad ogni numero
I come ad una matrice molto particolare, con una sola riga ed una sola colonna,

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

ovvero "tutte le righe e la colonna 211,


A questo punto siamo pronti per l'ulteriore generalizzazione: forma.re array
tridimensionali (o di dimensioni qualsiasi). Precisiamo che da ora in poi, quando
parleremo di "matrici" ci riferiremo esclusivamente a matrici bidimensionali, come
quelle viste finora.1 mentre per le matrici di ordine qualsiasi parleremo di "arra.y" di
dimensione opportuna, per evita.re di generare equivoci (si fa presente che questa.
nota2.ione non è standa.rd, ma in algebra le matrici bidimensionali meritano un
posto speciale). Ovviamente perderemo la semplicità finora vista nell'immissione
dei dati: se una. matrice {bidimensionale) è una struttw·a planare, una tabella,
un arra.y tridimensionale è un solido, un inseme di matrici bidimensionali l'una
sull'altra, come le pagine di un libro (infatti i vari strati degli array tridimensionali
vengono spesso dette "pagine") e da questo punto in poi, ovvero per array di
dimensioni maggiori di 3 la nostra capacità di rappresentazione deve ce.pitolate.
Conaideriomo due matrici cosl definite:

A1=[1 2;4 3]; A2=[3 2;8 4];


e costruiamo l'a.rray tridimensionale

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;

La generalizzazione ulteriore è banale e piuttosto noiosa 1 visto che si corre


il rischio di impegolarsi in una. selva di dimensioni che rendono l 'uttlizzaziotte
12 CAPITOLO 1. ELEMENTI FONDAlvIENTALI

dell'array più complicata della riformulazionedel problema in modo da evitare


array di dimensione eccessiva,
Ovviamente, ancora una volta.l'accessoa.glielementi dell'array è tl'amite indici,
come nel caso B ( 1 • 2 • 1 ) .
1n generale, matrici e array possono essere fornite in tre modi diversi :
1. da tastiera come visto fino a questo momento.

2. caricate da files esterni di dati, eventualmente in forma di tabelle (solo per


matrici)i

3. generate dalle funzioni interne o create da utente (M-files).


Dettaglieremo queste possibilità in ca.pitali successiviJ perché in questo capitolo
si vuole dare solo una breve panoramica che renda il lettore rapidamente operativo
in ambiente MATLAB.

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

Altrettanto semplice è la de6nizionedi a.rraydi strutture. Definiamole schede


l
degli altri due autori e quindi l'array di strutture :
id_RS.Nome=1 Robert0 1 ; L
id_RS.Cognome=-'Setola';
id_RS.Naacita.giorno=-23i
id_RS.Naacita,mese•1;
id_RS.Naacita.anno•1969;
id_FV.Nome=,Francesco';
id_FV.Cognome:1 Vasca'i
id_FV.Na.scita.giorno=27;
id_FV.Nascita.mese=4;
l
id_FV.Nascita.anno-=1967;
id_Autori(1)~id_ACi
id_Autor1(2)•1d_RSi
id_Autori(3)=-id_FV
ecco come risponde il MATLAB (si noti che l'ultima istruzione non ha il punto e
virgola finale)

id.Autori•

1x3 struct array 1i1ith fielde:


Nome
Cognome
Nascita

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 :

z=struct( •Real• 1 O. O,' Imag' ,O. O) i

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

1.4 Celle e array di celle


Una cella è un dato di tipo qualsiasi. Fin qui, mtlla di nuovo : qualunque variabile
memorizza dati di tipo qualsiasi. Tuttavia tu te le strutture dati viste fino a
questo punto hanno una caratteristica comune: quando servono da elemento base
per costruìre un array devono avere tuUe la stessa struttura. Ad esempio, un
array cli caratteri è compoatioesclusivamente di caratteri, cosl come gli elementi
di un array di strutture devono avere tutti la stessa strutture. (ai riveda l'esempio
dell'array di autori di questo libro, nel pe.ragrafo precedente, ln cul ogni elemento
deve essere un autore}.
Un arra.y di celle invece supera questa. limitazione: ognJ elemento può essere
di qu&lsiasi tipo. Ad esempio, è possibile definire una variabile vettoriale K che
contiene tre elementi diversi: un vettore numerico, una stringa cli caratteri e un
numero:
K={[l 2 3], 1 prova 1 ,-2}
cui MATLAB risponde con

[lx3 double) 'prova' (-2]

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

e il secondo elemento di questo vettore si ottiene con


K{1}(2)

ans -=

Si può prea.llocare un array di celle con il comando cell: ad esempio

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.

1.5 Eliminazione, salvataggio e caricamento


Ormai il nostro spazio di lavoro inizia a brulicare di variabili, quindi dobbiamo
pensare ad eliminarne qualcuna. La maniera più semplice per farlo è selezionarle
nella finestra del Workepace e schiacciare il pulsante del cestino (il quarto pulsante
in alto nella stessa finestra.). Se inveceavete già.chiuso la finestra del Workspace,
potete ricorrere ad una soluzione differente: usate il comando clear nella Com-
mand Win.dow. clear A B C cancella le variabili A• B e Ci clear A• cancella
tutte le variabili che iniziano con una A maiuscola, ad esempio clear id• can-
cella le variabili create nel paragrafo sulle strutture; infine clear da solo (oppure
Clear \forkepace nel menu Edit) cancella tutte le variabili in memoria. Atten-
zione a non confondere questo comando con l'innocuo clc, che si limita a cancellare
la Command Window, ma non intacca le variabili memorizzate: il mondo degli
utenti MATLAB risuona delle urla di diaappunto dei neofiti che, crndeudo di ri-
pulire lo schermo pieno di messaggi di errore hnnno scoperto di aver mandato in
fumo una giornata di lavoro con un clear usato al posto di un clc!
A questo proposito, notiamo che è prudente salvare di tanto in tanto lo spazio
di lavoro, operazione che può essere portata a termine sia dalla finestra Workspa.ce,
schiacciando il bottone di salvataggio, o ancora dalla Comma,nd Window 1 usando
il coma.ndo save. save nomeFile memorizza tutte le variabili in memoria sul file
nomeFile.MAT,mentre save da eolo memorizza.tutte le variabili aul Aledi default
MATLAB.MAT (il che per inciso non è una. operazione consiglia.bile, perché è
il modo più disorganizzato e indìfferenziato per salvare i dati). Infine, volendo
salvare solo alcune variabili e non tutto lo spazio ili lavoro su un file useremo la
forma più generale, separando i nomi delle variabili con uno spazio bianco

e ave nomeFile nome Varl nomeVad! nome Var3 ...

Il comando save memorizza le variabili in formato MATLAB, quindi esse dopo


essere state salvate su file non sono leggibili che da MATLAB . Ciò è importante
perché un file in tale formato risulta più compatto e più rapidam ente leggibile da
MATLAB stesso. Vedremo nel prossimo paragrafo altri usi del comando save.
Per leggere le variabili salvate, apriamo il file che contiene i dati dalla finestra
Workspace, oppure utilizziamo il comando load nomeFile (nota.re che non è neces-
sario specificare l'estensione), che carica. in memoria tutte le variabili memorizzate
in nomeFile.MATmantenendo ina.ltero.to il nome con cui erano sta.te memorizzate.
16 CAPITOLO 1. ELE!vIENTI FONDA!vlENTALI

1.6 Dati da file in formato non-MATLAB


Il titolo di questo paragrafo dovrebbe essere più correttamente 0 Importazione ed
esportazione di dati" 1 ma il titolo scelto sembra più incisivo. Va premesso che
l'argomento qui affrontato riguarda ~ituazioni relativamente poco frequenti, quin-
di il lett ore, soprattutto alle prime armi, può tranquillamente evitare di leggere
questo paragrafo. La necessità di importare in MATLAB dati prodotti da altri
programmi può essere un evento raro 1 ma quando si presenta lo fa con una urgen,z,a
drammatica. Io stesso non mi sarei mai occupato di questo problema se non mi
fossi trovato nella necessità di tracciare diagrammi con dati prodotti da un simu-
latore della NASA, assolutamente incompatibile con qualunque altro programma
(e direi anche con la mia persona) .
Supponiamo che il file 1IN.DAT1 contenga i seguenti dati 1 scritti in ASCII per
esempìo da un programma Pascal, FORTRAN , BASIC o C.

1.00 2.01 3 . 98 9 , 67 -2.89


4.12 -12.66 7.99 23.43 0.01

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 :

. ( 1.00 2.01 3.98 9.67 -2.89 )


m= 4.12 -12 .65 7.99 23.43 0.01
Dualmente 1 aave nomeFile nomeVar -asci i memorizza la variabile nome Var
sul fiJe nomeFile in formato ASCII. Inoltre, aggiungendo -double, i dati sono
salvati in formato doppia precisione; infine -tabe lascia un tabulatore fra una
colonna e l'altra. In ogni caso si ricordi che, indipendentemente dal formato con
cui i dati sono rappresentati sullo schermo, MATLAB opera in doppia precisione .
Supponiamo ora che il file da leggere, per esempio in formato ASCII, abbia la
seguente struttura:

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

la presenza simultanea di caratteri e dati numerici impedisce di usare il metodo


vist.o finora. Tuttavia, si può in questo caso impìegare l'importazione guidata
di MATLAB, invocando dal menu File il comando Import Data ... , che può
importare alcuni tipi di file predefiniti. A questo proposito comunque, si fa.notare
1.6. DATI DA FILE IN FOR!vIATO NON-NIATLAB 17
l
che la soluzione più sicura è l'importazione di file ASCII, che non dà mai problemi.
Questo comando attiva Plmport Wizard, che esegue l'importazione in vari pas i.
Ecco come si presenta la situaiione dopo aver immesso il nome del file da importare
l
{Figura 1.4}.
l.

Figura 1.4: Vlmport Wìzard di MA.TLAB.

Come si vede, fra i nati letti (a sinistra.)i il Wizard ha riconosciuto la presenza


di dati numerici e di stringhe, e inoltre ha riconosciuto gli spaii bianchi come
separatori e correttamente propone di adottare la prima riga come int.estazi ne
(header) dei dati letti. Nella schermata successiva,per default propone di creare 3
variabili 1 na in cui siano presenti dati numerici, un I altra con le stringhe e l'ultima
con le intestazioni (che in questo caso coincide con la variabil precedente). Invece
l
di accettare questo default, selezioniamo l'opzione Create vectors}rom eachcolumn
using column name (Figura 1.5). A questo punto, dopo aver schiacciato il tasto
Finish 1 avremo in MATLAB tre variabili, xi. x2, x3, ognuna corrispondente a.ti
una colonna dei dati letti. Nella Comman<l Window, MATLAB segnala

Import Wizard created variables in the current workspace,

L 1Impol't Wizal'd ha molte potenzialit,à, tuttavia ha tre difetti fonda.m ntali: è


lento 1 non copre tutti i possibili formati di filee soprattutto, non è automatizzabile,
ovvero non può essere coma.ndatu tramite una M-function ma richiede sempre
l'intervento dell'operatore .
Una possibile soluzione a que to pr blema è l'uso di funzioni di ba so livello
che MATLAB mette a disposizione per le operazioni di ingresso-uscita . Si tratta
sostanzialmente di procedure C, per le quali il lettore familiare con i comandi di
1/0 del linguaggio C non avrà grosse difficolt di utilizzo. Tuttavia, piuttosto
che dettaglia.re quest argomento, ci sembra più utile descrivere le funzioni di
18 CAPITOLO 1. ELEMENTI FONDAMENTALI

Il'
I
I!
f

Figura 1.5: Importazione di dati ASCII.

importazione dati, di recente introdotte dal MATLAB. Per quanto riguarda le


funzioni di basso livello il lettore può consultare i manuali del MATLAB.

r Per importare dati memorizza.ti in file ASCII "delimitati", ai usa il comando

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

1.7. I COMANDI DI UTILITÀ 19 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

Per importare in MATLAB questi dati, bisogna ignorare le frasi "Esecuzione


completata con successo.", 111 risultati sono" e i tre nomi di varia.bile"xl", "x2" e
x3" e leggere solo i dati numerici, in particola.re tre colonne di da.ti rea.liiinoltre,
11

euppon1e.modi voler memoriz.za.reI risulta.ti in tre varie.bill,y1 1 y2 e y3 . Le.


soluzione è l'uso del comando tatxread, come nel seguente esempio

[yl,y2,y3]=textread('da.ta3.txt','%f ¼f 1/.f' t'headerlines' ,5)


i'I
Il formato dei dati da leggere è standard C {'%f' per i numeri reali, '%s' per le
stringhe, 1%d1 per gli interi, ecc.), il numero di linee di intestazione da ignorare è
5 e non 3, perché bisogna contare anche le righe vuote.

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

lo achermo. Normalmente di un numero vengono viauallzzate solo le pdme cinct_ue I' I

cifre significative. Per modificare la visualizzazione, possiamo alterare il formato


sia da. menu che digitando il comando fermat nella Command Window. In ogni
caso, il formato di visualizzazione è descritto dalla seguente tabella:

format ehort 5 cifre1 virgola fissa.


format long
format ehert e
15 cifre, virgola fissa.
5 cifre, notazione esponenziale
.I
fermat long e 15 cifre, notazione esponenziale
format hex esadecimale I
fermat bank 2 cifre decimali
format rat approssimato a una frazione
forma.t + solo +, • e spazi bianchi

Inoltre fermat comp~ct visualizza in maniera. più compatta riducendo al minimo


i caratteri di fine linea, mentre f ormat loose torna alla maniera. standard di
20 CAPITOLO 1. ELEA1ENTI FONDAMENTALI

Figura 1.6: Il menu preferences.

rappresentazione. Si ricordi che in ogni caso la rappresentazione interna dei dati


non è influenzata da questi comandi.
Uno dei comandi più utili in MATLAB è help, che, digitato nella Command
Window, rende disponibile un vero e proprio manuale in linea. Eseguendo help
senza altri parametri compare un elenco di argomenti di base, eseguendo help•
NomeArgomento compare un elenco di funzioni relative all'argomento, eseguen-
do infine help NomeFunzione compare la descrizione del modo di utiliz2.o della
funzione. A titolo di esempio si digiti help: apparirà Jlelenco
HELP topica:

matlab\general General purpose commands.


I
matla.b\ops - Operators and special characters.
rnatlab\lang Prograrnming language constructs,

'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

For more b.elp on directory/topic, type "help topic".


Digitando poi help alf un appare Pelenco delle funzioni matematiche elemen- '
tari (descritte nel Capitolo 3 di questo libro). Infine help sqrt illustra l'uso (
dell'operatore sqrt (radice quadrata) . i'.
Ovviamente, è sempre possibile usa.re il menu di help, ma quando si sia acquisi-
ta sufficiente padronanza del programma che permette J>uaodell'help solo come I
un mezzo per ricordare ad eBempiola sequenza di parametri di una funzione, il
comando help della Command Window è sicuramente più rapido.
Un'utilissima "facility" di MATLAB è Puso del tasto "freccia in a.I d' che {I]L
permette di ridurre notevolmente i tempi di immissione dei dati: infatti la pressione
di questo tasto restituisce le precedenti istruzioni digitate; lo stesso comando può
agire in maniera più selettiva : digitando una lettera ( o un gruppo di lettere) e poi
freccia in alto, vengono riproposti solo i comandi che iniziano con la lettera (o li
gruppo di lettere) digitati. Ad esempio si immetta:

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.

Esercizio l,S Si crei un array di strutture per memorizzare i dati anagrafici


(nome, cognome, data di nascita) dei membri della propria famiglia.

Esercizio 1.4 Si ripeta l'esercizio precedente, ma perì membri di se!Jsofemminile


si indichi solo giorno e mese di nascita, per evitare domande .'lpiacevoli. Dal
momento che si dovranno•memorizzare strutture diverse, si coruideri una .'loluzione
che faccia uso di array di celle. ·
22 CAPITOLO 1. ELEMENTI FONDAMENTALI

Esercizio 1.5 Si memorizzi it vettore v contenente cinque O e un 1, poi lo si salvi


sul file aacii V.DAT e dall'e.,terno, con un word processor, si modifichi l'J finale
in 2. Infine si legga da MATLAB il file così modificato.

I
I
Capitolo 2 ''
'

Manipolazione di variabili
.
r
!
I
1,
'

Illustriamo in questo capitolo alcuni comandi che permettono la generazione au-


tomatica di vettori, matrici e array d.i celle, e la costruzione di array (siano essi
matrici, vettori o celle) tramHe sottoarray componenti o, dualmente, l'estrazione
di sottoarray da array dati. ! I
•, 'I
..
2.1 Elementi di un array
Una. delle principali caratteristiche di MATLAB è il non richiede1'0dimensiona-
1
mento di array e matrici, quindi potremo avere la seguente situazione: I
II
x=[-1,3 sqrt(3) (1+2+3)•4/6]

che fornisce:

X = (-1.3000 1.7321 4.8000)


e poi usare il comando:

x(6 .)•x(1)

per ottenere:

X= (-1.3000 1.7321 4.8000 0 - 1.3000)


senza ridimensionare il vettore (ola matrice). Si noti che in assenzadi informazioni
sul quarto elemento del vettore x MATLAButilizza come valoredì default lo zero.
Analogamente, se la matrice A non è mai stata lnizislizzata1 il coma.odo
A(3,3)=1
provoca. la creazione della matrice
24 CAPITOLO 2. MANIPOLAZIONE DI VARlABILI

A=

o o o
o o o
o o 1

Dualmente 1 scrivere x (2)= [). elimina l'elemento il secondo elemento da.1vet-


tore x, la cui dimensione è ora 4. Si noti che xi:() elimina il contenuto del vettore,
ma non il vettore stesso, che come visto nel capitolo precedente può essere eliminato
solo con clear x o cancellandolo da.Ila finestra del Workspace.
Inoltre vettori e matrici possono essere affiancati: siano

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-

e D delPesempio precedente possono essere costrnite con i comandi


C=cat(2,A,B), D=cat(l,A,B)
Quindi, la prima dimensione è quella verticale (per righe), la seconda quella oriz-
zontale (per colonne). A questo punto il lettore può domandarsi perché è stato '
'
\
(
introdotto questo comando, visto che le soluzioni presenta.te in precedenza sono
evidentemente più semplici ed Intuitive. La risposta è che il comando cat per-
mette di lavorare anche con matrici di dimensioni maggiori di due, come visto nel ,
capitolo precedente; si provi infatti a digitare l'istruzione
E=cat(3,A,B)

e se ne osservi il risultato sullo schermo

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,:)•(]

che elimina la prima colonna. In tutte le dire1.ioni. MATLAB risponde con

E( :,:, 1) •
2
4

&(1,:,~) •
6
1

ll~:
8

In questo modo l'array tridimensionale E è in realtà. diventato una matrice bidimensionale, .,


e infatti sizo(E) restituisce (2 1 2] 1 quindi la econda. dimensìone è fittizia. Per 11compaLt.are11 •
la matrice si uea il comando aqueeze(E.), che a.pplìcato al nostro esempio fornisce correttament
una matric 2 x 2. Ii:.
Le operazioni viste finora si applicano anche su array di celle:
0•{[1 2;3 4) (6 6;7 8]}

forni ce

G=

[2x2 double] [2x2 double]

mentre
Gl={[l 2;3 4);[5 6;7 B]}

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

Rkordiamo che la particolarità degli array di celle è la capacità di contenere


elementi diversi, quindi potremo anche definire
G2={(1 2;3 4] (6 6;7 8],'stringa'}
il cui risultato è
G2 1111

(2x2 double) (2x2 double] 'stringa'


È possibile anche avere una rappresentazione grafica del contenuto dell'array di
celle, usando il comand o cellplot . Ad esempio cellplot(G2) fornisce il risultato
in Figura 2.1.
A questo punto però bisogna porre attenzione alla concatenazione di arra.y cli
celle. Infatti, lavorand o con le matri ci possiamo eseguire
C~[A B]; C=(C A];
oppure
C=(A 8 A]

ottenendolo stesso risultato, ovverouna matrice composta dalla giustapposizione


delle matrici A, B e di nuovo A.
Supponiamo invece di voler ripetere lo stesso genere di operazione sull'array di
celle G3, ovvero digitiamo
2.1. ELElvIENTI DI UN ARRAY 27

,.
'

Figura 2.1: Il comando cellplot.

G3=-{G1 etringa'}

Ci ll8petteremmo che G3 fosse uguale a.G2, come succedeva per le matrici, e invece
ecco il risultato:
G3 =

{1x2 cell} 'stringa'


di cui la rappresentazione con cellplot è riportati~ in Figura 2.2.

Figura 2.2: cellplot (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

devono essere memorizzate in una variabile MATLAB, è meglio usare comandi


della.Command Window, Per Ja dimensione di un vettore è sufficiente l'istruzione
length . Se il vettore è vuoto il risultato sarà O.
Le dimensioni di una matrice o in generale di un array si ricavano con U
comando size; per esempio se G è la.matrice definita in precedenza, Pistruzione
[m,nJ=size(C)

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

2.2. RAPPRESENTAZIONE DI INTERVALLI 29 li


I
L'operatore più usato è il carattere (due punti), che abbiamo già incontrato
1:1 l
nel capitolo precedent e e il cui uso ora approfondiremo. Esso serve a genera.re
vettori contenenti numeri equispaziati: per esempio x=1: 5 fornisce il vettore riga
I
i
x = (1,2 1 3,4 1 5); è possibile usare incrementi non unitari usando la forma

x=x_min:Delta:x_max

dove x_rnin e x.llla.xindicano gli estremi inferiore e superiore delPintervallo e Delta


il passai ad esempio, per definire un vettore da O a 1r con passo 1r/41
xaO:pi/4:pi
fornisce
X= (Q.0000,0.7854,1.5708,2.3562,3.1416)
dove pi è la variabile MATLAB predefinita iJ cui valore è 1r. Sono permessi
anche incrementi negativi: ad esempio x=5: -1: 1 dà x :::: (5, 4,3 1 2, 1). La funzione
linspace permette di ottenere lo stesso risultato prefissando però il numero di
punti piuttosto che il passo; la sua sintassi è
linepace(Valoreiniziale},ValoreFinale},NwneroPunti)
Quindi k=l inspace (-pi, pi, 4) definisce

k = (-3.1416, -1.0472, 1.0472, 3.1416)

È 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

logspace(Valoreini2iale, ValoreFinale, NumeroPunti)

ma i punti sono equiapaziatilogaritmicamentesecondo le potenze di 10, e il numero


di elementi per default è 50. I valori iniziale e finale dell'intervallo sono gli espo-
nenti della base 10 dei valori naturali rappresentati: logspace ( 1, 2) rappresenta
l'intervallo {101 , 102 ] con 50 punti eqUIBpaziatilogaritmicamente.
La corriapondenza fra lln1pace e l0g1pace può essere megllo evidenziata ricorrendo ad un
1 = 1.0481.xi
esempio: x•log1pac1 ( 1, 2) e y•lin ■pe.ce (1, 2) defi.niscono due vettori taU che :a:1+
e I/H l = y + 0.0204; al considera che log 10 1.0481 = 0.0204 si percepisce immediatamente ìJ
legamefra. i due operatori
Una potente capacità di MATLAB è la posaibllità di prelevare sotoornatrici
da matrici; ciò avviene usando come indice un vettore. Abbiruno già visto che
se i e j sono due numeri interi, A(i,j) accede all'elemento di posto (i,j) della
matrice A. Ma se i e j sono vettori allora con l'istruzione A(i, 1) si accede agli
elementiai( ),l .. • , a,cn),l mentre l'istruzione A(i, j) fornisce la matrice estratta
da A prelevando le righe indicizzate dal vettore i e le colonne da j. Se per esempio
la matrice A ha dimensione 5 x 6, allora B•A ( 1: 3, 1: 3) preleva una matrice 3 x 3
formata dagli element.i delle prime 3 righe e delle prime 3 colonne della matrice
data. Inoltre i vettori possono anche avere increment,i negativi. Coal se

2 3
5 8
O 1

allora B•A ( 3: -1 : 1, 1 : 2: 4) dè.:

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

2.3 Matr ici speciali


Ecco un elenco di funzioni che permettono di costruirn matrici particolarmente
usate in MATLAB:
j

eye matrice identità '.,


zero s matrice nulla .!
...
ones Ojj = l,Vi,j
rand matrice pseudo-casuale {distribuzione uniforme)
randn matrice pseudo-casuale (distribuzione normale)
diag diagonale

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

allora repma.t (A, 2, 3) fornisce


2 1
4 3
2 1
4 3
32 CAPITOLO 2. MANIPOLAZIONEDI VARIABILI

che, come si vede, equivale ad una copia a blocchi su due righe e tre colonne del
tipo

diag ha due modi di funzionamento duali: se il suo argomento è un vettore


fornisce la. matrice diagonale i cui elementi sono quelli del vettore: A=tliag( [1 2
3 4] ) produce

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,

2.4 Stringhe di caratteri


Una stringa di caratteri in MATLAB è un insieme di caratteri alfanumerici rac-
chiuso fra apici, come a:;' gioco', MATLAB rappresenta una stringa di caratteri
come un vettore di caratteri 1 quindi a= ( 1 g' , ' i' , 'o' , 'e 1 , 'o' J rappresenta an-
cora la parola precedente. Un apice all'interno della stringa. va rappresentato con
un doppio apice: a=>un 1 'al tra' fornisce a=tm'altra.
Come avviene per tutti i vettori, l'accesso a caratteri alPinterno della stringa
avviene tramite . indici: se per esempio a=' oste' , allora digitando a ( 1) =i'a I otte-
niamo a=aste, a= (' e 1 , a] dà a=catJtee a ( 4) = [] a=caJe.
Se una. parola (stringa) è in realtà un vettore (riga) di caratteri, un vettore
(colonna) di stringhe sarà. una. matrice di caratteri, quindi ogni parola del vettore
dot>ràcontenere lo stesso numero di caratteri,inclusi eventuali spazi bianchi: la
memorizzazione in un vettore delle parole 'oggi 11 'non, 1 'piove' avviene tramite la
definizione della matrice A

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

che ignora le stringhe vuotet mentre str2mat le trasforma.in righe bianche.


Ovvie.menteperb, la struttuta dati più naturale per la memorlzzazionedi vet-
tori di stringhe è I'array di celle: l'esempio precedente poteva essere banalmente
memoriizato con

Acell={'oggi','non' ,'piove'}

oppure, dal momento che abbiamo già.definito la matrice A1 si può usare il comando
cellstr:

Acell:zcellstr(A) \

che produce lo stesso risultato del comando precedente.


Gli operatori più utili nel trattamento di st.ringbe sono strcmp e f indatr.
Il primo è in realtà un operatore logico (cfr. Capitolo 3) e, usato nella forma
atrcmp (a, b) restituisce il valore 1 se le stringhe a e b sono uguali, zero altrimen-
tl; una sua variante è strncmp (a, b, n) 1 che confronta eolo i primi n c&ratteri; il
secondoinveceal usa con In stessa sintassi, t indatr (a, b), ma restituisce le occor-
renze della stringa b nella stringa a. etrcmpi e etrncmpi funzione.nonella stessa
maniera, ma ignorano la differenza fra maiuscole e minuscole. Infine, l'uguaglianza
logica ==serve ad analizzare i caratteri uguali in stringhe di uguale lunghE2za.:

'barocco'••'balocco'

fornisce

ans =
1 1 o 1 1 1 1

Per quanto riguarda ricerca e aostituzione,k•t indetr (s l, e2) restituiacel'in-


dice k di ogni occorrenza di una aottoetringa s2 in una stringa al:

posi2ione•findstr('Un oscuro scrutare','sc')

restituisce

posizione=

6 11

Analogamente, e2=strrep(s1, aOld,sNev} sostituisce nella stringa s1 la stringa.


sOld con sNew:
34 CAPITOLO 2. l\lLANIPOLAZIONE Df VARIABILI

strrep('critica della ragion pura','pura','pratica')

ans =

critica della ragion pratica


Gli operatori di conversione fra numeri e stringhe sono:
int2str(a) trasforma l'intero a in stringa di caratteri
mun2str(a) tra.sformail numero a in stringa. di caratteri
str2num ( s) trasforma la stringa B nel valore numericocorrispondente

2.5 Tecniche avanzate sulla manipolazione di ar-


ray
In questo paragrafo vedremo degli operatori che consentono di alterare la 11forma 11
degliarray cui sono applicati. Sebbene il loro uso sia piuttosto infrequente, possono
essered'aiuto nel semplificare la gestione di altuazionl anomale,
• rot90 ruota la matrice cui è applicato di 90° iu senso antiorario, per esempio
se

allora rot90(A) fornisce

ans =( 3 6 9)
2 5 8
1 4 7
rot90(A,k) ruota di 90k gradi.

• fliplr e f lipud scambiano rispettivamente le colonne e le righe della ma-


trice (vettore) che hanno come argomento, il che equivale a post- e pre.-
rnoltiplicare per la ruatrl'ce rot90{1): con la stessa A precedente, fliplr (A)
e flipud(A) dànno;

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)

ribalta I'array E intorno alla terza dimensione e ne memorizza il risultato in


F; si noti che lo stesso effetto si sarebbe ottenuto definendo F=cat (3, B A).
J

• permute e ipermuta sono generalizzazioni della trasposta nel caso in cui


gli array abbiano dimensioni maggiori di due; il primo si usa nella forma
permute(A,ordine), dove il vettore ordine specifica il nuovo ordine in cui
andranno consideratele dimensionijconsiderando che I operazione di traspo•
sizione per matrici bidlme.nslonnli non è altro che I'inversione delle righe
con le colonne, essa può essere ottenuta con il coma.ndo permute (A, [2 1J) :
come ai vede nel nuovo ordine si considera prima 1 seconda dimensione (le
colonne) e poi la prima. (le righe) . L'operazione inversa si ottiene con il J :,
comando ipermute. I,
I

• reshape è l'istruzione più potente 1 in quanto permette di alterare la forma di


una matrice. Infatti reahape(A,m,n) genera una matrice mxn i cui elementi
aono presi per colonne dalle. matl'ice A, Supponle.rnoche un programmo
esterno per esempio Pascal abbia generato un file ascii DATI,PAScontenente
una colonna di 6 numeri che vogliamo memorizzate per righe in una matrice
3 x 2. Allora baBterà digitare:

load dati. pa.s


A=(reehape(dati,3,2))'

reshape funziona anche con array di dimensioni maggiori di due.

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

Esercizio 2.3 Si costruiscail vettore riga

(-1, -0.75, -0 .5) -0 .25, o,0.25, 0.5, 0.75, 1)

1, inserendodirettamentei valori numerici da ta,tiera;


36 CAPITOLO 2. lv!ANIPOLAZIONE DI VARIABILI

8. con l'istruzione linspace (-L 1, 9) i


9. utilizzando l'operatore ':'.
Esercizio 2.4 Si costruisca il vettore

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 )

Suggerimento. Si usi l'operatore : con incrementi negativi o IJope-


ratore tliplr,

Esercizio 2 .5 Costruiti i vettori

a=(O 3 6 9)

!
I b = ( 45 40 35 30 )
si costruiscail vettore

e= ( O 45 3 40 6 35 9 30 )

Suggerimento. Si creino i vettori di appoggioi1 e i2 che contengano


j rispettivamente i primi quattro numeri pari e dispari.

I' Esercizio 2.6 Si definisca la matrice

1
-1
A= ( O
-6
e si valuti:
A(!,2) 1 A(l:3,2:4), A([2 4),3:4) 1 A(:)

. Esercizio 2. 7 Considerata la matrice

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

e quindi la matrice diagonale a blocchi


B=
l ...~.
'
~~
}!
,'
i I

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.

Figura 2.3: Impulso triangolare l


Esercido 2.10 Dato il vettore a = (3 2 1), si costn~isca la matrice in forma
compagnaorizzontale inferiore ad esso assodata, ovvero la matrice

(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

nomiDiat={ 'do', 're', 'mi', 'fa', 'sol', •1a 1 , 'ai'};

e a questo punto, dato un vettore noteDiat di n numeri compresifra


I! O e 6, le corrispondenti note si ottengono con

nomi0iat{noteDiat+1}
i

I: Analogamente, per la acala cromatica occorrelimitar3i ai ualori com-


pre3i fra O e 11 e definire il vettore cli celle:

notnlCrom={ 'do', 'do#', 're', 're#', 'mi', 'fa', 'fa#', ...


'sol' , 1 sol#, ' la' , 'la# 1 , 'si'};

n motivo per cui conviene la codificaa partire dal valoreOpiuttoato che


dal valore 1 (che semplificherebbel'indicizzazione dei vettori nomi. .. )
risulterà evidente nel seguito.

'i
'•

',·11 •
.,

Capitolo 3

Operazioni scalari

Fino a questo punto ci siamo occupati solo di operazioni di immissione e manipo-


lazione di dati. Iniziamo da questo capitolo a trattare le operazioni di tipo aritmeti-
co e logico sulle variabili. In particolare saranno trattate prima le operazioni scala ri
e poi, nel capitolo successivo, quelle dell'algebra delJe matrici. Per uoperazioni
scalari" non si intendono solo quelle in cui gli operandi sono scalari, ma tutte le
operazioni in cui gli operandi siano trattati come scalari. Per esempio, l'operatore
sqrt calcola la radice quadrata, quindi sqrt (2) fornisce 1.41421, ma è possibile
usare argomenti vettoriali: sqrt([1 2 3)) dà come risultato (11.414211.73205),
risultato che si sarebbe ottenuto in maniera meno efficiente con (eqrt (1) sqrt (2)
sqrt (3)]. Tutti gli opero.tori descritti in questo capitolo (tranne alcuni descritti
nel prossimo paragrafo) lavorano in questo modo, ovvero è possibile applicarli a
vettori, e il risultato è quello che si sarebbe ottenuto applicando l'operatore a ogni
3ingolo elemento del vettore.
Va sottolineato che tutte le operazioni definite in questo e nel prossimo capitolo
non ai applicano a. vettori di celle (a meno che non sia esplicitrunente indicato il
contrario, come nel ce.so della traepoalzione).
È utile premettere che MATLAB ha alcune variabili predefinite.
Ma.tematiche:
epe precisione di macchina
pi 1T
i,j unità immaginarie(✓-=I)
Int infinito
NaN Not-a-Number (per esempio il riaultat.o di 0/0)
realmax massimo numero in virgola mobile
realmin minimo numero in virgola. mobile
nargin numero di parametri in ingresso ad una funzione
nargout numero di parametl'i di uscita di una funzione
Generali:
40 CAPITOLO 3. OPERAZIONI SCALARI

ans qualsiasi risultato non memorizzato in una variabile


computer tipo di computer
Tempo:
clock orologio di macchina
cputime tempo di CPU trascorso
date data
Il significato di alcune di queste variabili è evidente, di altre sarà chiarito nel
seguito.

3.1 Operazioni aritmetiche


I calcoli aritmetici sono eseguiti con i classici operatori + 1 - 1 •, /. Ci sono poi gli
opel'atori .. (elevazione a potenza), aqrt (radice quadrata) e \ che esegue una
divisione inversa.,ovvero 3\2 in realtà fornisce 2/3 = 0.66667. Questo operatore
può apparire superfluo per le operazioni scalari, ma manifesta la sua potenza nelle
operazioni matriciali, come si vedrà nel seguito.
In realtà gli operatori presentati in questo paragrafo seguono le regole delPalge-
bra matriciale. Ciò può provocare errori nell'interpretazione dei risultati quando
sono applicati a vettori. Per esempio il prodotto ay di uno scalare a per un
vettore y si esegue con a•y e fornisce correttamente il vettore il cui elemento i•
esimo è ay 1; ma il prodotto fra due vettori si definisce in algebra come prodotto
interno (o prodotto scalare) e cosl è definito in MATLAB. Quindi, se abbiamo:
x :::::(x1, x2, x3) e y -: (Y1,Y2, Ya)T > x •y dà il prodotto scalare X1 Y1+ X2Y2 + X3y31
come si vedrà meglio nel prossimo capitolo; volendo invece ottenere un vettore i cui
elementi siano i prodotti degli elementi omologhi si deve premettere il carattere '.,
(punto) aJl'operatore: x. •y produce ans = (:z:1111,x211i,X31Js),Analogamente sono
definiti gli opera.tori . / per la divisione fra elementi di due vettori e ... per elevare
a potenza gli elementi di un vettore. Per questo comando si noti che l'esponente
può essere tanto uno scalare quanto un vettore della stessa cardinalità della base:
[2 3 4) . ~ 2 fornisce (4 9 16) 1 mentre nel secondo caso ogni elemento del vettore
base è elevato al corrispondente elemento del vettore esponente: (2 3 4] . • [3 2
1) dà (8 9 4).

3.2 Funzioni elementari e trascendenti


MATLAB dispone delle seguenti funzioni elementari:

• 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

Gli operatori di arrotondamento e troncamento hanno significato e funziona-


mento facilmente intuibili.
Le funzioni di approssimazione razionale fratta forniscono un'approssimazione
delPargomento mediante un rapporto di interi. Ad esempio
rate(9.22)

produce come risultato ane-461/50. Si noti che il risultato è di tipo stringa di


caratteri.
È po88lblle anche speclftca.re la lunghezza me.salma della stringa di uscita, Il cui valore di
default è 13; &d esemp io

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

(n, d] =rat (x, tol)

il risultato è dato da due interi n e d tali che il loro rapporto verificala relazione

-_
I lx-JI~ tollxl
t

Il valore di default per la tolleranza è 10- 5 •


rat può essere anche invocato enza gli argomenti di uscita (n, d], nel qual ca.so
· moatra i termini dell'espansione troncata:
rat(sqrt(2))

.
I

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

GU operatori esponenziali e logaritmici sono


pow2 esponenziale in base 2
exp esponenziale in base e
log logaritmo naturale
log2 logaritmo in base 2
log10 loga.rìtmoin bru,e10
Infine le operazioni trigonometriche si eseguono con i seguenti comandi.
Dirette:
sin seno
cos coseno
tan tangente
aec secante
csc cosecante
cot cotangente
Inverse:
e.sin arcoseno
acos arcocoseno
ata.n arcotangente
atan2 arcotangente a quattro quadranti
asec arcosecante
acec arcocosecante
acot arcocotangente
Iperboliche:
sinh seno iperbolico
cosh coseno iperbolico
ta.nh tangente iperbolica
sech secante iperbolica
csch cosecante iperbolica
coth cotangente iperbolica
Iperboliche inverse:
aeinh arcoseno iperbolico
e.cosb arcocoseno iperbolico
atanh arcotangente iperbolica
asech arcosecante iperbolica
acsch arcocosecante iperbolica
acoth arcocotangente iperbolica
Osserviamo che mentre l 1arcotangente atan (x) restituisce un valore nell'in-
tervallo [-n-/2,11'/2), atan2(y,x) calcola l'arcotangente su quattro quadranti e
assume valori in [-1r,1r];x e y sono l'ascissa e l'ordinata del punto che definisce
Parco.
Infine ci sono gli operatori di conversione fra sistemi di coordinate:
44 CAPITOLO 3. OPERAZIONI SCALARI

cart2pol cartesiane ➔ polnri o cilindriche)


pol2cart polari (o cilindriche) ➔ cartesiane
cart2sph cartesiane ➔ sferiche
a h2cart sferiche ➔ cartesiane

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

3.3.2 Funzioni composte


Un esempio più generale è: tabellare i valori di e3 t sin 51rt nell'intervallo t E f-2, 2)
con 45 punti; le istruzioni sono:

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.

3.3.3 Funzioni razionali fratte


Infine tabelliamo il modulo della funzione razionale fratta 1

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

omega=logspace (-2, 2) i gli argomenti sono gli esponenti


s=j•amegai
x1=3•s. -2+S•s+7; tabella il numeratore
x2=-=s.-a+5•s. -2+7+s+12 tabella il denominatore
xi:;:xi./x2 tabella i valori della funzione
x=abs (x) calcola il modulo della funzione
[s x]

3 .4 Operatori di relazione e logici


Sono definiti i seguenti operatori di relazione:
< minore
<= minore o uguale
> maggiore
>= maggiore o uguale
-- uguale
= diverso
e gli operatori logici:
1 Si vedrà nel Paragrafo 21.1 l'uso dell'istruzione bode per risolvere in maniera più efficiente
;
questo problema.
I
l li1
46 CAPITOLO 3. OPERAZIONI SCALARI

& 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

Tabella 3.1: Coefficienti.


3.5. ESERCIZI 47

Esercizio 3.2 Si calcolix mod 3 per z = {l, S, 312, 22. 64).

Esercizio 3.3 Dati x = 3 + j5, li = -2 + j4, z = j3, si calcolin~: • ··


1. x + y, x - z, (x + y)z
2. lxl, 1/y, z1

3. logx, e", lx/yl.


Ee rcizio 3.4 Si risolva il aistema di equazioni

x2 +1,,2- a
x/y b

per a= (1, 4, 3) e b = (1, v3,0.5).


Suggerimento. Si riaolva il sistema in coordinatepolari.
Esercizio 3.5 Si verifichi la formula di Eulero

e-' =e%+iw=e 111(cosy+jsin11)

per vari valori del n-umerocomplessoz.

Esercizio 3.6 Si verifichi che la trasformazione bilinear:e


z+2
w=--
z+4 ..
1

trasforma cerchi in cerchi.


Suggerimento, Si costruiscanoi cerchiin z in coo dinate polari e si
verifichi il risultato con il comando plot ( w) .

Esercizio 3. 7 Si memorizzino in due vettori i valori di ascissa e di ordinata della


funzione Isin ti riportata in Figura S.1.

Esercizio 3.8 Si de/foisooil vettorex contenente31 ualoridell'inteNJallo(1/2 1 26 }


ottenuti con spaziatura logaritmica in base 2.

Esercizio 3.9 Riferendosi al vettore x definito nell'Esercizio 2.1, calcolare:


L=(x>•2), ~=(x<3), L= (x<3). L=(x<4 & x>-4)

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

,s,----,----,--~ - --r---,-- - .----,---r------r--,

0.5

'
Il

OO'----''--'.._._ _ __._.I_ _.,,__..._.lO


__ l.,._I
,._....,14_ .........
IB_ _.li.__,

Figura 3.1: Seno raddriz,za.to.

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

Soluzione. La sequenza data si codifica con il vettore

note=[4 2 O 5 5 4)

per trasporre di due toni {quattro semitoni) basta l'istruzione

noteTrasp=rem(note+4,12);

si noti che l'operazione di addizione è eseguita modulo 12. La retro~


gradazione è
3.5. ESERCIZI 49

noteRet=fliplr(note);

Infine l 1inversione rispetto alla generica nota n si ottiene con 2n -


note mod 12, quindi rispetto al sol (codificato con 7):

noteinv=rem(2•7-note,12);

Ovviamente le note corrispondenti possono essere visualizzate usando


l 'array di celle nomiCromdefinito all 'Esercìzio 2.11.

\
I
l
)

l
l
l

I
!.
Capitolo 4

Operazioni matriciali

Come detto in precedenza l'elemento base in MATLABè la matrice: anche uno


scalareà in realtà una matrice 1 ><1. Ciò spiega.perchéle operazioniscalari definite 1·
nel capitolo precedente sono immediatamente estendibili a matrici. Ad esempio se
A è la.matrice
I !
I
!. I
, I
, I
allora C=exp(A) forniace la matrice I •
I ;

Sì noti per inciso che questa operazione non è l'esponenziale di una matrice, che
invecesi definisce come

I i •J

In questo capitolo ci occupiamo delle operazioni definite in senso matriciale pro-


prio, ovvero secondo le regole delPalgebra. delle matrici.

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

Se il vettore o la matrice sono complessi per eseguire una semplice trasposizione


senza coniugazione bisogna usare l1operatore . 1 1 per esempio (1+j, 1-2•j]., dà

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

4.2 Operazioni algebriche


Come accennato nel capitolo precedente, le operazioni algebriche si eseguono con
gli usuali operatori +, - , •; aomma e differenza sono definite anche per array di
dimensioni maggiori di due (purché ovviamente abbiano le stesse dimensioni). Per
quanto riguarda. la divisione abbiamo in MATLAB due simboli diversi:

• X= A\B esegue X= A- 1 · B, risolvendo il sistema A· X= B (divisione a


sinistra);

• X= B/A esegue X= B, A- 1, risolvendo X· A: B (divisione a destra).

La divisione a sinistra A\B fornisce A- 1 B se A è quadrata e invertibile, altri-:


menti se ha rango k (sia quadrata o no} fornisce una soluzione a minimi quadrati
al problema AX = B, in particolare una soluzione che ha al più k elementi non
nulli per ogni colonna; analogamente per la divisione a destra, che è definita come
8/ A= (A,\ b 1 ) ' 1.

.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

4.3 Funzioni su matrici Il :I


l•

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:

• max(x) (min(x)) dà il massimo (minimo) elemento del vettore Xi applicato


I •' -;
I:
,i
I
ad una matrice restituisce un vettore che contiene i valori massimi per ogni ,I
'
colonna, per cui max(max (A)) fornisce il massimo elemento del.la matrice
l
'\
A. Applicato ad array di dimensione maggiore di due, la ricerca del m8.9si-
mo avviene lungo la prima direzione "utile" (ovvero non nulla); ad esempio
se B è un array tridimensionale, aqueeze (max ( B) ) restituisce una matrice,
e max(max (max (8))} restituisce il valore massimo nell 'array 2 • Là sintassi
completa è l
[Y, I] =max(X) t
che memorizza in Y il massimo (o il vettore di massimi nel ca.Boin cui X
l "

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.

• eum(x), mean(x) sono rispettiva.mente la somma e il valor medio degli ~


tementi del vettore !lii come per i due comandi precedenti, applica.ti ad una
matrice danno un vettore di somme e valori medi per colonne. Anche questi
comandi possono essere usati con arra.y di dimensione maggiore di due.

• ra.nk(A) calcola il rango, ovvero il massimo numero di righe o colonne li-


nearmente indipendeuti. Lavora.solo su matrici (e vettori monodimensionali,
ovviamente).
È possibile specificare una totlera.nza: ruk(A, tol) calcola il numera dj valori singolari ·
maggiori della tolleranza tol.

• det (A) fornisce il determinante di una matrice .

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

• norm(X ,argomento) calcola. la norma di una matrice o un vettore aecoado


la seguente tabella in cui A è una matrice e x un vettore:
' f

4.3. FUNZIONISU MATRICI 55

comando operazione commento


rn

norm(A,1) IIAlli= max LI a,; I massima somma. per colonne


i l=l
norm(A,2) IIAll2= m~ J Ài(A • A}
I
massimo valor singolare .:

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

norm(:x,p) llxll.~ (t lx,1•). normap

norm(x) llxll:i= Ri norma euclideo.


norm(x, int) llxllm= max la:,I massimo modulo
norm(x,-inf) ' l:i:1I
l!xlloo= mio
i
mJnimo modulo

in cui l'asterisco indica le operazioni di trasposizione e coniugazione.


norm(X) equivale a norm(X,2) sia per matrici che per vettori.
• kron(A,B) dà il prodotto tensoriale di Kronecker, ovvero fornisce una ma..-
trice il cui blocco ij-esimo è pari al prodotto dell'elemento di posto ij della
matrice A per la matrice B , (A® B)u a 1B.=
Queste funzioni coprono un ampio spettro cli applicazioni: per la ricerca. di
massimi e minimi in un vettore si usano gli operatori max e min 1 per normalizzare •I
un vettore o una matrice basta usare x/norm(x) 1 per il calcolo c.lelladimensione di i
I

un sottospazio generato da un insieme di vettori si possono raggruppare i vettori in


una matrice e calcolarne il rango: rank ( [x 1 1 x2, . . .• xn]). Di particolare utilità
si rivelano i comandi min, max e sort con due parametri di uscitai ad esempio,
volendo calcolare il massimo elemento di una matrice A e la sua posizione in
ermini di indici h, k si usa:
[ml.11]•mu(A) i
(m. k] -=ma.x
(m1) ; I I
h•i1(k); '
I
Comeulterioreesempio ai consideri il caso in cui ai debbano ordinare le colonne
di una matrice rispetto alla prima, come nel seguente caso: si consideri la matrice
I t
I
I

iI

ii I l

'I,
56 CAPITOLO 4. OPERAZIONI !vlATRICIALI

usare A=sort (R) produrrebbe

I

Come si vede le colonne sono ordinate in maniera indipendente, l'associazione


reciproca è persa. Volendo invece conservarla dobbiamo usare

(S 1 11] wsort (R) i


AaR(11,:)j

il cui risultato è

..

Si noti che per questa operazione è disponibile anche il comando sortrowa.


Le funzioni esponenziali su matrici disponibili in MATLAB sono
expm(A) eA
logm(A) log(A)
aqrtm(A) 'radice quadrata' di A
L'ultimo comando ha senso solo per solo per matrici definite positive e calcola
la radice quadrata della matrice A, ovvero la matrice U tale che A= u• · U.
In particolare per la funzione eA matriciale abbiamo altri tre operatori, expml,
expm2, expm3 che usano rispettivamente i metodi" di Pade, Taylor e del calcolo
degli autovalori. Nel caso in cui siano richieste altre operazioni su matrici, si può
usare la. funzione funm, con sintassi funm (X.' funzione'), che esegue la funzione
,I
specificata sulla matrice X, per esempio funm (X, 'sqrt ') equi vale a sqrtm (X) .

4.4 Operazioni logiche


Abbiamo visto nel Paragrafo 3.4 un esempio di operazione relazionale su una
matrice; ora ci occuperemo più diffusamente di questo argomento. Va premesso
che gli argomenti affrontati in questo paragrafo possono essere generalizzati ad
arra.y di dimensione qualsiasi, anche se, per semplicità espositiva, conviene non
• I
i I
avventurarsi in esempi di dimensioni maggiori di due.
Come detto in precedenza, l indica VERO e O FALSO, quindi se A e B sono
matrici delle stesse dimensioni con soli O e 1, è chiaro che A&Bdà una matrice i
cui elementi sono I solo se entrambi i corrispondenti elementi di A e B sono l; ma
esistono operatori logici più interessanti: per esempio any (x), dove x è un vettore
di O e I, dà 1 se almeno un elemento di x è 1, mentre all(x) esegue l'operazione

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

mentre diag(B) fornisce il vettore degli elementi di A maggiori di 2: (4 3 5).


In questo caso una maniera più semplice per ottenere lo stesso risultato sarebbe
stata 811;:A(A>2)(cfr. Esercizio 3.10), ma l1operatore find è uno dei più potenti (se
non il più potente) operatori logici MATLAB e la sua applicazione non si limita
al caso considerato. Si consideri il seguente caso: definiti i vettori

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

any vero se esiste almeno un elemen to non nullo


all vero se tuUi gli elementi non sono nulli
!ind trova. indici di elementi che soddisfa.no la. condizione
exist indaga. l'esistenza della variabile
isnan ispeziona i Nn.N
finite ispeziona gli elementi finiti
isinf ispeziona gli elementi infiniti
iaempty vera se la matrice è vuota
iaieee vera per matematica. in virgola mobile IEEE
isatr vera se la. variabile è una stringa

4.5 Complementi sulle matrici


ln questo para.grafo ci occuperemo di opera.zioni più complesse sull'algebra linearn e in pa.rtlcola.re
di fa~torizzazioni, decornpoaizioni. pseudoinveraioni, ortogonalizzazioni e calcolo dello spazio nullo
di una matrice.

4.5.l Numero di condizionamento di una matrice


Il numero di condfaionameoto di una matrice è una misura della sensibilità della soluzione di un
sistema lineare di equazioni a variazioni nei dati. È noto che la soluzione del sistema di equazioni
Ax = b è x = A- 1 b, quindi è chiaro che l'operatore A- 1 può esaltare o smussare le vadazioru del
termine noto b. Se poi si assume che la variazione possa. avvenire in ogni elemento dei vettore b
ri&ultll chiaro che il numero dl condizionamento dipende eolo dalla m&trice A. Matematicamente
Il numero di condizionamento definito in bue alla norma euclidea è il rapporto fra masalmo e
minimo valor singolare di una matrice. E!!BO è calcolato In MATLAB con l'latrozione

c•cond(A)

Una stima. più rapida ma meno accura.ta si olf.iene con


i.
t:

4.5. CO!vIPLEMENTISULLE MATRlCI 59

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.

4.5.3 Fattorizzazione LU ed eliminazione gaussiana


Per risolvere un sistema non singolare nella (orma

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

li MATLAB calcola I f ttorizza.zione LU con l'istruzione

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

4.5.4 Soluzione del problema Ax = b: pseudo-inversa e mi-


nimi quadrati
Se In matrice A non ~ quadrata o di rango pieno è noto che la sua Inversa non BBlate. Se ne
pub Invece calcolare la pseudP•invor,aA+. Se A ha rango pieno di rie;hela 1ua paeudo-tnvereaè
def\nlta come

A+= (AT A)-l AT


altrimenti, se A non ha rango pieno si pub usare la decomposizione ai valori singolari

A+= vnuT
dove n = dlag(wd e w,= 1/rrh i= 11 , •• , re w, = O, i> r. In MATLAB avremo:

Con la pseudo-inversa siamo quindi in grado di affrontare il problema

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

:Z: = Q,0061 I 'Y::;


~~0~~~6
o
0.0119 O
0.0246 0.0406
=
li vettore x ha norma llxll= 0.0666 1 mentre IIYII 0.07, ma y ha solo tre elementi non nulli,
contro i cinque di x.
Nel ca.so, invece di sistemi irresolubili, ovvero in cui il rango di A è minore di quello di (A bJ,

.I il rroblema è cercare la migliore a.pprossima.zione della soluzione. L'operatore pinv cerca di


minimizzare la. norma dell'errore:
min IIA:r- bll
I r

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

min JlAz - bll


J:
4.5. GOMPLElvIENTISULLE lvIATRICI 61 l -
;

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)

Se la matrice (reale) ha a.utova.lorl complessi coniugati le matrici di autovettori e autovalori


presentano elementi complessi. È possibile a.Iterare la decompoelzlone spetLrale in modo che le
matrici presentino solo elementi reaJi; in particolare le coppie di elementi complessi coniugate
nella matrice degli autovalori vengono trasformate in matrici 2 x ~ con elementi reali. L'istruzione
che in MATLAB esegue questa operazione è
[V,OJ•cdf2rdf(U,l.ambda)
(si legga : Complex Dia.gon&I Form to Real Dia.gonal Form").
11 Come esempio si consideri la
matrice
2

A=U -5
4.

che ha come decomposizione spettrale

r
62· CAPITOLO 4. OPERAZIONI MATRICIALI

[U , Lambda)
lJ
-.. elg(X)

1.0000 o.4002-0.019li 0.4002+0.01911


o 0.6479 0.5479
! o 0-t-0.54781 0-0.84791
Lambda •
(; 1.0000
o
o
4.0000-+6.00001 o
o

n I La.conversione in forma reale fornisce:


o o '1.0000-6.00001

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

che dS fornisce anche gli e.utovalorle a.utovettorl se11era.ll1zatl


lnftne c'à da. 11egna.lare 1 ovvero
Ile A a 8 eoho due matrici quadrate

[U,Laabda] ■ 1ig(A,8)

forniace due matrici tali che A • U = B • U • A

4.5.6 Decomposizione ai valori singolari


Data una matrice rule A m x n, eaa pub eaaere sempre riscritte. come

A= utvT
dove U è llll& ma\rice mx m orLonormale,V una.ma.trlce n xn ortonormale e E = dtag{111 1 ••• 1 cr,.)

con a 1 ~ O per ogni i.


J n merl rTi sono detti u(llori 8ingolari di A sono in genere ordinati in sen o decrescente:
a1 ~ u1 ~ · · · ~ '1n ~ O. Se A ha rango r allon. ur > O, ar+L = O e quindi una ma.trice di rango
r ha solo r valori slngole.ri non nulli.
Valgono inoltre le propriet~:
1 • crf(A)= A,(AT A)
'
I • D't(A)= lfAIJ2

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)

4.5.8 Matrici in forma "echelon" ridotta per righe


Una matrice ai dice "matrice ecbelon" se il numero di zeri che precede il primo elemento non I

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= ( ~ )

che in MATLAB si produce con l'istruzione

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

(P. H) •heu (A)

produce una. matrice unitaria P e una matrice di Heuenberg H t.a.11


che

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.

4.5.11 Decomposizione di Schur


L'Idea.au cui si basa la decompoalzlone di Schur è quella di applica.re una sequenze.di trufor,
ma.Ioni unitarie o ortogonali ad una matrice A per renderla triangolare alta. Per ottenere queeto
risultato si pub lnnanil tutto portare la matrice A In forma di Heasenberge poi usare l'algoritmo
QR per annullare gli elementi della sottodiagonale. Alla fine si ottiene una matrice unit&.ria.U e
una matrice di Schur T triangola.re alta tali che

La. corrispondente istruzioae MATLAB è


•• I
(U, T] •scbur ( A)

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.

compan forma compagna.


tril parte triangola.re bassa
triu parte triangolare alta
rand matrice con elementi casuali (distribuzione uniforme)
randn matrice con elementi casuali {distribuzione norma.le}
ha.nlcel matrice di Hankel
hilb matrice di Hìlbert
invhilb matrice di HIibert lnveru
hadaurd matrice di Had1U11ard
magie ,.quadrato magico"
toeplitz matrice di Toeplilz
vander matrice di Vandermonde
vilkinaon matrice di Wilkinson
pascal matrice di Pascal

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:

2. diag(A), diag(A 1 1);

9. exp(A), e:xpm(A), sqrt(A), sqrtm(A), sqrtm(A)-2


I
l •

66 CAPITOLO 4. OPERAZIONI MATRICIALI

,I. exp(log(A)), expm(logm(A)) 1 funm(A, 'exp 1 )

5. conj(B), real(B) 1 imag(B), 8-real(B)-eqrt(-l)•imag(B)


6. rand(B), max(A), norm(A), sign(A)

Esercizio 4.2 Date due matrici A e B, oltre al classicoprodotto "righe-per-co-


lonne", ai defini.,cono altri prodotti, fra cui:
• Prodotto di Schur, definito come

• Prodotto di Lie, definito come


n
[A,B)tJ = L(a 1cb1c;
- buaA:;)
i=l

Comesi calcolanoin MATLAB questi prodotti?


4.3 R•aolvereil .siltemaUneared4equa,fon,
EHrcl111Jo
2:z:1- + 7x3 +4x1 -
4:t2 5
9:tJ.+ 3:z:1+ 2x3 - 7x4 - -1
5:z:l + 2:tz -:t, - -3
3:Z:3 +

+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

,I. u = (5, 3, -2, -4, -1), u = (2, -1, o, -7, 2)

• 3i calcoliil prodottoscalare < u, v >


• 3i calcolila di3tanza d(u, v)
• si verifichi la disuguaglianza di Cauchy-Schwartz

I < u,u > I ~ llull· llvll


• .,, virifichi la disuguaglianza di Minkovskij
.l llu+ vii~ llull+ llvll
4.7. ESERCIZI 67

Esercizio 4.5 Si definisca la matrice 'I •

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

-I.li.____._ _ _.____,_ ___ __.. _ _..____...,__...... __ __, i '


D I 3 I I r I 10

Figura 4.1: Sistema trifase.

Esercizio 4,8 Calcolareuna base e la dimensione dello 8patio generato dai vet-
tori:
1.
68 CAPITOLO 4. OPERAZIONI !YIATRICIALI

Esercizio 4,9 Si costruisca una matnce 4 x 4 di numeri casuali con diatribuzione


normale, media 10 e varianza 0.5.
Esercizio 4.10 Con nferimento alla matrice A definita nell'Esercizio 4-5, .ti cal-
colino
J, test~(A<•l) & (A>•-2), all(test), all(all(test))
f . i•find(A•~max(max(A)))

Esercizio 4.11 1rovare l'insieme di tutte le soluzioni del sistema

x1 - 3x2 + 4xa - 2x4 - 5


2x2 + 5x3 + X4 - 2
X2 - 3:.ta = 4
• riducendo il sistema in forma echelon
• calcolando una oluzione particolare e l'insieme delle soluzioni del sistema
omogeneo.

E ercizio 4.12 Determinare la condizione cui devono soddi.tfaregli scalari a, be


e affinché il sistema

I I x + 2y -3z = a
3x - y + 2z = b
x - 5y + Bz - e

ammetta soiuzfone.

Esercizio 4,13 Dal punto dt vista computazìonale, gli algoritmi di decomposizione


spettrale sono fra s più JragiU dell'analisi numerica . Si calcolino autovalori e
autovettori delle matrici

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

Soluzione. Ecco l'intera sestina


Mia benigna. fortuna, e 'I viver lieto,
I chiari giorni, e le tranquille notti,
e I soavi eospiri, e 'I 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.
Crudele, acerba, ineeorabll Morte,
cagion mi da.i di mai non esser lieto,
ma di menar tutta mia vita in pianto,
e i giorni oscuri e le dogl1011enotti.
I miei gravi eospir non vanno In rime,
e 'I mio duro martlr vince ogni stile.
Ove è condutto il mio &moroso stile?
A parlar d'ira., a. ragionar di mori.e.
U' sono i versi, u' son giunte le rime,
che gentil cor udia pensoso, e lieto?
ov'è 'l favoleggiar d'amor le notti?
Or non parl'lo, n, penso altro che pianto.
Già mi fo col deslr s\ dolce il pianto,
che condia cli dolce-aia ogni agro stile,
e vegghlar mi racea tutte le notti;
or m•~ 'l pianger amaro più cbe morte,
non sperando mal 'I guardo onesto e Ueto,
alto sogetto a. le mie basse rime.
Chiaro segno Amor pose a le mie rime
dentro a' belli occhi; et or l'ha posto in pianto,
con dolor rimembrando Il tempo lieto:
ond'lo vo col penser cangia.udo stlle,
e ripregando te, palJlda Morte,
che mi sottragghi a sl penose notti.
Fuggito è 'I sonno a le mie crude notti,
e 'I suono usato a le mie roche rime,
che non sanno trattar altro che morte:
coa\ è il mio cantar converso in pianto.
Non ha 'l regno d'Amor al vario stile,
eh'è tanto or tristo, quanto mai fu lieto.
Neeun v!BSegià mai più di me lieto,
nesun vlvle più tristo e giorni e notti;
e doppiando 'I dolor, doppia lo stile,
che trae del cor sl lacrimose rime.
Vleai di speme, or vivo pur di pianto,
né contra Morte spero altro che Morte.
Morte m'ha morto; e sola pò far Morte
ch'I' torni a riveder quel viso lieto,
che placer mi facea i sospiri e 'I pianto.
1111.uradolce e la pioggia a le mie notti;
quando I pensieri eletti teesea.In rime,
Amor alzando il mio debile etile.
Or avess'io un si pietoso stile
che Laura mia. potesse torre a Morte,
come Euridice Orfeo sua senza rime,
ch'I' viverei ancor più che mai lieto!
4. 7. ESERCIZI 71

S'esser non pò, que.lcuna d'este notti


chiuda. ornai queste due fonti di pianto .
Amor, i'ho molti e molt'annl pianto
mio grave danno in doloroso etile,
né da te spero ma.i men fere nottli
e però mi son mosso a pregar Morte
che mi tolta. di qui per farme lieto,
ove è colei ch'i' can~o, e piango in rime.
Se sl alto pon gir mie stanche rime,
ch'agiungsn lei, ch'è Cuord'ira e di pianto,
e fa 'I ciel or di aue bellezze lieto,
ben riconoacerà 'I mutato stile,
che già forse le piacque, anzi che Morte
chiaro a lei giorno, a me fèsse a.tre notti.
O voi che sospirate a miglior notti,
ch'ascoltate d'Amor, o dite in rime,
pregate non mi sia più sorda Morte,
porto delle miserie e fin del pianto;
muti una volta quel suo antiquo stile,
ch'ogni uomo aurista, e me pò ra.rsi lieto.
Far ml pò lieto In una o 'n poche nottii
e 'n aspro stlle, e 'n angosciose rime,
prego che 'I pianto mio finisca Morte.

•.·.
I
'·I •
'I

l.

i
!
I

I
I
f
I
I '

. 'I

.,
'
l. '
l

t!
Capitolo 5

Grafica

La grafica è una delle caratteristiche più sviluppate di MATLAB. Questo capi-


tolo è articolato come segue. Si inizia con le istruzioni più semplici di grafica
bidimensionale per mettere rapidamente il lettore in grado di tracciare il grafico
di funzioni di una variabile reale; poi si definiscono scalature di assi e intesta-
zioni; segue una parte di approfondimento con cenni sulle primitive grafiche di
MATLAB per operazioni più avanzate; si procede in maniera analoga per la parte
tridimensionale,
Per una conoscenza più dettagliata delle potenzialità. grafiche di MATLABsi
rimanda il lettore alle Appendici A e B.
l
5.1 Gra fici bid imens ionali
MATLAB permette di tracdare più grafici su più finestre, dette "figure". Per
default MATLAB traccia grafici sulla finestra 1i volendo aprire più finestre grafiche
' .
occorre digitare il comando figure (n) dove n definisce il numero della finestra.
Da questo punto in poi MATLAB traccerà grafici sulla finestra n-esima fino a
quando non ai cambierà finestra con un nuovo comando figure. La chiusura della
L
finestra n-esima. avviene con il comando cloee (n). Supponiamo per il momento I
di limitarci a lavorare su una. sola finestra, la prima..
Il comando principe per tracciare grafici bidimensionali è plot. '\ 1.
Iniziamo con un semplice esempio: si voglia.un grafico della sequenza di punti
{O,0.481 0.84, 1, 0.91, 0.6, 0.14}
f
Sono allora sufficienti le istruzioni: I~
Y=[O .48 .84 1 .91 .6 .14) t
plot(Y) {I
che sullo schermo producono il disegno di Figura 5.1.
74 CAPITOLO 5. GRAFICA

11·

1-
..,.
-.,
.. :r- 0.5

. 04
·i'·
0.3

' . I
02
I I !'
0.1
''
"'

Figura. 6.1: Sempllce grafico.

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

Ora aggiungiamo dei titolo ed intestazione degli assi {Figura. 5.2):

title('Sequenza di punti')
xlabel( 1 ascisaa')
ylabel('ordinate')
grid
5.1. GRAFICI BIDIJvlENSIONALI 75

TIPO DI LINEA TIPO DI PUNTO COLORE


continua - punto giallo y
-- plU.'
. asterisco +"'
tratteggiata magenta m
punteggiata ciano e
a tratto-punto - . cerchio o rosso r
croce X verde g
quadrato s blu b
rombo d bianco w
triangoli v,-,>,< nero k
stelle p,h

Tabella 5.1: Opzioni di plot

ti tle, xlabel e ylabel definisconotitolo e intestazioni degli asSÌi ogni volta


che rieseguiamoquesti comandl le intestazioni precedenti sono cancellate e sosti•
tuite dalle. più recente. L'Istruzione grid invece traccia. una griglia.turai ogni volta
che viene eseguito grid commuta il suo stato, per cui se digitiamo ancora grid
la griglia.tura.scompare. Inoltre si sono usati i bot.toni nella zona dei menu (la
Toolbar) della figura per introdurre testo e frecce nel grafico.
Passiamo ora a qualcosa di meno banale: sì voglia tracciare il diagramma della
funzione y = J(t). L'istruzione plot (a, b) traccia il grafico delle coppie di punti
(a" b,), quindi una prima operazione da fare è tabellare la funzione in esame come
visto nel Paragrafo 3.3, per poi tracciarne il grafico.
Come semplice esempio consideriamo la funzionP.y = sin t (Figura 5.3)

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

oppure, volendo specifica.reil tipo di punto:

plot(t,y,'Marker 1 , 1 d' ,'MarkerSize',2,'MarkerFaceColor', ...


•r','MarkerEdgeColor','y')

Maggiori chiarhnenti su questo tipo di specificatori sono forniti nellI Appen-


dice A, in cui si dettagliano gli attributi degli oggetti grafici.
76 CAPITOLO 5. GRAFICA

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

Figura 5.2: Aggiunta di testo.

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

Il risultato è in Figura. 5.4.


Esiste anche una versione tramite mouse dello stesso comando :

gtext (•testo ' )

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

Figura 5.3: sin t.


\
l
A proposito del testo inseribile, sono accettati anche sequenze di caratteri stlle
'!EX,che iniziano con il segno di divisione rovesciato (\) 1 secondo la Tabella 5.2.
Per inciso la tabellazione non è sempre un'operazione banale, in quanto può
l
accadere che la funiione presenti 11scale temporali,. molto diverse fra loro: è per
esempio il caso della funzione /(t) = e- 101 + sin(0.05t), nella quale usando uu
intervallo di tabulazione molto piccolo poesia.mo vedere il contributo del termine
esponenziale,con uno ampio I'azione della sinusoide. Queste situazioni vanno
I
chiaramente risolte di volta in volta, magari con l'uso di due grafici. Po iamo ora
utilizzare due finestre per tabellare la funzione / (t) = e-tot + sin(0.05t) con due
scale di .tempi diverse:

tl=0:.01:1; ½prima scala temporale. da O a 1 con passo 0 .01


y1•exp(-10•t1)+sin(O.OS•t1)i
t2=0:200i ¼seconda scala temporale. da O a 200 con passo 1
y2=exp(-10•t2)+sin(0.05•t2);
_tigure(1)
plot(tl,yl)
tigure(2)
plot(t2,y2)

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

u.----,- -........- --.---.----,---.--.---,--r----.

Figura 5.4: Il comando text.

del grafico in Figure 1 e con un "copia. e incolla" inserirlo in Figure 2, scalar-


lo, posizionarlo, aggiungere una freccia e del testo, magari ruotato: ai osservi il
risultato in Figura 5.5.
Questo ultimo esempio ci porta al problema del tracciamento simulta.neo di più
grafici, che è nffrontato nel prossimo paragrafo.

5.2 Grafici multipli


Perc.onfrontare più curve il metodo migliore è ovviamente tracciarle sulla stessa
finestra..Ci sono tre modi per disegnare più grafici aovrappoati:
' . '

1: Se occorre tracciare il grafico di più funzioni sulla stessa scala di ascisse si


può usare plot con argomenti matriciali. Con plot(X,Y)

• se Y è una matrice e X nn vettore, allora i valori di X sono le ascisse e


le colonne (o le righe) di Y le ordina.te per ogni grafìcoj
• se X è una.matrice e Y un vettore 11procedimento ai ribalta. e le colonne ·
(o le righe) cli X sono tracciate rispetto al vetto re Y;

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

STRINGA EFFETTO STRINGA EFFETTO


\alpha a \beta /3
\gamma \delta &
\epsilon
\eta
'
é
11
\zeta
\theta
(
(}
....
'
:i

\vartheta 1' \iota I,

\kappa. K \lambda ,\ I,

\mu µ. \nu V

\xi ( \o o
\pi 7r \varpi 'CV

\rho p \eigma (J"

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

Si noti che la scalatura degli assi è ancora automatica ed è determinata in


base ai valori massimi e minimi della matrice Y e del vettore t per le ordinate
e le ascisse rispettivamente.

2. Se invece gli intervalli sulle Mciaae sono diversi usiamo plot con più argo-
menti:

plot(X1,Y1,X2,Y2 •... ,Xn,Yn)

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)

3. Si può infine "mantenere" il grafico precedente con la coppia di istruzioni


axis(axis), bold.
80 CAPITOLO 5. GRAFICA

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

Figura 5.5: Grafici su due scale di tempi.

plot (X1,Y1)
e.xis(axis)
hold
plot(X2,Y2)
plot(X3,Y3)
I $\vdots$
I 1
plot(Xn,Yn)

li Questa soluzione è preferibile quando un grafico va privllegiato rispetto agli


altri per cui vogliamo che aia il solo a determina.re i fattori di scala. Per

l esemplo se voglio.mo confrontare nell'intervallo t E {O,5) il comportamento


della funzione y = sin t con quello cUy =
t e y = et non conviene usare il
metodo l che, dimensiona.ndo la massima ordinata a e.5= 148.41 renderebbe

:ji indistinta la sinusoidei la soluzione~ quindi


, t=0:.1:5;
I plot(t 1 sin(t))
axie (axis)
hold
plot(t, [t;exp(t)])
Nel caso dj tra cciamento di grafici multipli tra.mite i primi due metodi, se non
esplicitamente definiti i colori e l'ordine usato sono quelli della Tabella 5.1, ovvero
5.3. SCALATURA DEGLI ASSI 81
l
!
•1
+l
)

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

Figura 5.6: Grafici multipli. l


la prima curva sarà tracciata in giallo, la seconda in magenta, la terza in ciano e
cosl via ripetendosi ciclicamente fra i primi sei colori della tabella.
{
~
hold è un comando che consente di congelarela definizione corrente degli asai. Il auo funzio-
namento è a commutaz ione, nel senso che ogni volta che si digita h.old lo stato si inverte, quando
.
un grafico è già congelato un successivo hold disattiva il mantenimento
altro hold ripristina il mantenimento.
esplicitamente
In alternativa
lo 111atodi mantenimento .
dei fattori di scala, un
hold on e hold otf consentono di definire l !

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.

• axis (axis) come visto sopra "congela." gli assi.

• axìe ( 'auto' ) ripristina la scalatura automatica degli assi.

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.

,~.----------..

Figura 5.7: Varianti del comando axis .

Per ingrandire localmente gra.flclbidimensionali, esiste anche la funzione zoom,di compren-


sione Immediate., me. di uso poco frequente, visto che si può usn.re Il bottone analogo della
Toolbar.
I :
I- :
5.4. DA.TI COMPLESSI 83
:I
I : ,l
5.4 Dati complessi I
I
.

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.

5.5 Tracciamento di più grafici nella stessa fine-


stra
Abbiamo visto che è possibile aprire più finestre grafiche, ma talvolta è necessario
vìsualizzare più grafici che, pur riferendosi a grandezze non omogenee, dipendono
dalla stessa variabile. Si pensi ad esempio al tracciamento dei diagrammi di Bode,
che t·appresentano enti del tutto diversi (il modulo e la fase di funzioni complesse
razionali fratte), ma. variano in funzione dello stesso para.metro (l'insieme dei nu-
meri lmmagina.ripuri), Piuttosto che usare due finestre e tentarne un improbabile
allinea.mento (a parte il fatto che saremmo sempre costretti selezionnndone una a
deselezionare l'altra). ai può ricorrere all'istruzione subplot, La sua sintassi è

subplot(m,n,p)

che spezza la finestra. corrente in m righe, n colonne e seleziona la. sottofinestra


p-esima (le finestre sono numerate da sinistra a destra e dall'alto in basso, quindi i,1
la finestra alla riga i e alla colonna j sarà individuata dal numero p = (i- l)n +j),
I

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

Tutti i successivi comandi grafici agiranno in questa sottofineatre.; per passare


a quella in alto a destra usiamo

subplot(2,2,2);

Esempio:

subplot(2,2,1),title( 'Primo subplot')i


eubplot(2,2,2),title('Secondo aubplot');
aubplot(2,2,3),title( 'Terzo subplot')i
eubplot(2,2,4),t1tle( 1 Quarto eubplot');
84 CAPITOLO 5. GRAFICA

Pnmo subplOt Secondosubplol

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

Figura 5.8: Il comando subplot.


I
I j
produce il risultato in Figul'a6.8 che evidenzia le. numerazione dei subplot.
1

Infine per eliminare la partizione in sottofinestre ba.sta imporre che la finestra


j, abbia una riga e una colonna:

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

semilagy come il precedente, ma con scalature invertite.

loglog come i precedenti, ma con entrambi gli assi in scala logaritmica. Ad


esempio, per tracciare il grafico deUa funzione definita al Paragrafo 3.3.3
eseguiamo
,,
' I
5.6. ALTRI GRAFICI BIDIMENSIONALI 85
l
subplot(2,2,1),semilogx(omega,x),title('eemilogx').grid;
subplot(2,2,2),semilogy(omega,x),title('eemilogy'),grid;
aubplct(2,2,3),loglog(omega,x),title('loglog'),gridi
aubplot(2,2,4).aemilogx(omega.20•log10(x))
title( 'Diagramma di Bode');
grid,xlabel('\omega (rad/s)'),ylabel( 1 Hodulo [dB] ')i

e otteniamo il risultato in Figura 5.9, che mette anche in evidenza la diversa


definizione della griglia per ogni tipo di grafico.

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

IOQIOQ Diagrammadi Boda


10' ,..,.,
__,....,
_ -,--...,..,..,..--,-,....,...-,--..,.......,.-:---,.,--o-,,
.. ,o.------ ~---- -,
o
i-,o l
.. .. ...
, • • ~ : '"1 •
. ...
l .. ; , j 1
• , ; : •

.
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

Figura 5.10: Spirale.


Il

'
' ? 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];

cui corrispondono i grafici in Figura 5.11, ottenuta con i seguenticomandi

giorni=['lun' i 'mar'; 'mer'; 'gio'; 'ven'];


subplot(2,2,1), bar(R)
eet(gca,'xticklabel',giorni)
title('bar(R)')
aubplot(2,2,2), b&r(R, 1 stack 1 )
aet(gca, 'xticklabel 1 ,giorni)
title('bar(R,''stack'')')
subplot(2,2,3), barh(R, 1 stack')
set(gca,'yticklabel>,giorni)
5.6. ALTRI GRAFICI BIDThlENSION.ALI 87

bar(A) bar(R,'stack ')


4~-- - - - - - ---, 10,-- - - - ---------,

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

Figura 5.11: Diagrammi a barre.

title('barb(R, 11 etack 11 )')

subplot(2,2 1 4) 1 bar3(R,'group')
eet(gca,'yticklabel',giorni)
title('bar3(R,''group 11 ) 1 )

Il comando area si usa in modo molto semplice: definiamo di nuovo una


matrice e otteniamo il grafico. "Siconsiderino i seguenti comandi:
!.
I I
x=(0:10)';G=[x x.A2/10 (x.A4+x)/1000]; I
!
area(G)

Il cui risultato è riportato (dopo alcune manipolazioni) in Figura 5.12


Infine, è possibile disegnare un grafico a torta con il comando pie, che si
usa. nella. forma. pie (x) per disegnare il grafico corrispondente ai valori nel
vettore x. Inoltre, è possibile usare un secondo argomento di ingresso, che
è un vettore in cui ogni elemento esprime unn. oseib\le separazione di una
"fetta.11 dal resto della torta.: queste.operazione è uee.ta di frequenta per met~
tere in rilievo il dato più significativo. Torniamo ali 'esempio J.el rendimenio
azionario dei tre titoli visti in precedenza , e poniamoci l'obbiettivo di evi-
denziare il titolo che abbia conservato il va.lor medio più elevato (in realtà.
88 CAPITOLO 5. GRAFICA

Xl

IO

,1

10

I 9 10 11

Figura 5.12: Il comando area.

avrebbe più senso chiedersi quale titolo abbia avuto il tasso di crescita più
elevato, ma manteniamo Pesempiosemplice),
S1digitino i seguenti comandi

r=mean(R); 'l. calcola la media settimanale


[m,ind]=max(r); %calcala il valore
¼e l'indice dal titolo massimo
sapara•z ■roa(size(r))i ¼ definisce
¼la aeparazione tra. le "1ette 0
. l
separa(ind)=1; ¾ decide do separare la fetta maggiore
pie(r,separa); %disegna la torta e separa la fetta

Il risultato di questi comandi è riportato in Figura 5.13


stair e stem tracciano diagrammi a scalini e ad impulsi, rispettivamente e si
usa.no come il comando plot. Un loro impiego classico è nel tracciamento
di grafici per sistemi a tempo discreto, come si vede dal seguente esempio.
Tracciamo il grafico della funzione sin te-t/ 3 per t da O a 10 e supponiamo
di volerlo campionare con passo 0.5. Con lo stesso passo inoltre vogliamo
rappresentare un grafico in cui ogni campione è mantenuto costante nell'in-
tervallo cli campionamento, ad esempio per analizzare il comportamento di
un usample & hold Eseguendo le seguenti operazioni
11 •

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

Figura 5.13: Il comando pie.


l
eubplot(2,1,2),plot(t,y,':'),hold
atairs(td,yd),title('staira'),grid
on
l
otteniamo il grafico in Figura 5.14
hist calcola e traccia istogrammi. In particolare hiat (x) calcola e traccia I'isto-
gramma relativ o ai dati nel vetto re x in cui in ascissa compaiono i valori nel
vettore e in ordinata le frequenze di occorrenza relative. Ovviamente l'is-
togramma è calcolato e tracciato su intervalli piuttosto che su va.lori puntuali
nella variabile; un secondo parametro opzionale permette di definire il nu-
mero di barre da tracciare nel ca.so in cui sia un numero intero e gli intervalli
nel caso in cui sia un vettore. Come esempio, si consideri il problema di ana~
lizzare la bontà del generatore di numeri casuali con distribuzione uniforme
rand . Per definizione 1 un vettore dì campioni di una variabile aleatoria con
distribuzione uniforme deve produrre un istogramma piatto, quindi possiamo
usare le seguenti istruzioni per tracciare t>istogramma con 20 barre

n==lOOi
y=rand(n,1);
hist(y,20)

aumentando il numero n vediamo che l'istogramma si appiattisce (Figu-


ra 5.15).
90 CAPITOLO 5. GRAFICA

siem

o.e
I

-.
0.8
I I

Il
0.4

0.2 ,-r ìll Li . ·· «i


.e, ..Q -_· 11. . ..-, · •. 9 ..
' (j) o
I I

' -0 .2 .... t.J .J...k


--0.4
o 2 3 4 s 6 7 8 9 10

slBlrs

0.8
0.8
0.4

0.2
o
--OJl
-0 ,4
o 2 3 4 5 6 7 8 9 IO

Figura 5.14: I comandi stem e stairs

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

La versione in coordinate polari di questo comando è tose.

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

Con la prima istruzione la funzione funzione è diagrammata sull'intervallo


[Xinin, XrnuJ. La seconda forma invece non traccia il grafico ma restituisce
i vettori di ascisse e ordinate (o la matrice di ordinate, se la funzione è .,
vettorio.le) che possono poi essere diagrammati con plot (x, y).
5.7. GRAFICI TRIDIMENSIONALI 91

1oo campioni
10

e
8

0.1 0.2 0.3 0.4 0.5 o.e 0.7 0.8 0.9

10000camp I
800

500

400

300

200
100

0. 1 0.2 0,3 0.4 O.B 0,6 I 0,7 o.s 0.9

Figura 5.15: Istogramma..

5.7 Grafici tridimensionali


La grafica tridimensionale è decisamente più complessa. di quella. bidimensionale,
basta pensare al fatto che un oggetto tridimensionale può apparire in maniera
completamente diversa semplicemente cambiando )'angolazione dalla quale lo si
osserva. Possiamo classifica.rele curve tridimensionali io tre grosse categorie:

• Superfici generate da funzioni matematiche di due variabili z = f(x 1 y).


• Curve o superfici di cui è nota. una descrizione parametrica x = x(t), 1J =
y(t), z = z(t).
• Superfici generate dalla rotazione di una curva intorno a un Mse lisso.

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

, viaw((x,y,&)) permette di specificareIl punto di vlst&P(a:,y,z) In coordinate cartealanei


poichè, come detto in precedenza, non è possibile definire la distanza da cui si osserva.,il
modulo di P è ignorato.
Par conalctera.reRncheil modulo1 a quindiottenere la pasalbllltà di 1ooma.raaul eraflci,si fa.
rlcor1>0
111111,
propria,a.Q11111r1degli A111 1 comeur dBBcrluonell1AppendlceA,

Figura 5.16: Sistema di riferimento

5. 7 .1 Funzioni di due variabili


Data una funzione reale di due variabili reali z = f (x, y) ìl comando che si usa
per tracciarne il grafico è !]lesh o equivalentemente surf. La differenza fra i due
comandi è che il primo traccia il grafico di.segnando segmenti che congiungono i
valori z, il secondo colora anche le ione, dette 11facce", delimitate da questi seg•
menti; per il resto i comandi sono identici, quindi ci limiteremo alla descrizione del
comando mesh. In alternativa è possibile ottenerne una rappresentazione grafica
bidimensionale tramite curve di livello mediante l'istruzione contour.
La prima operazione da eseguire è creare con Pistruzione meahgrid due matrici
X e Y in cui sia memorizzato I'insieme di definizione della funzione in questione,
in modo che la prima matrice consista di una copia di valori di ascissa memorizzati
5.7. GRAFICI TRIDilvlENSIONALI 93 L
per righe e la. seconde. di ordinate per colonne. In altri termini, aaBegnatiquindi
due vettori x e y che contengono gli intervalli di definizione di ascissa e ordinata,

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

A questo punto abbiamo gli intervalli di definizione e i valori della funzione,


quindi non resta che tracciare il grafico. Si digitino i seguenti comandi

surf(X,Y,Z);
xlabel('Assa x 1 );
ylabel( 1 Asse y•); \
zlabel('Assa z');

e si otterrà il risultato in Figura 5.17.


Inoltre 1 l1istruzione mesh(X, Y, Z) traccia una rappresentazione della superficie
tramite una griglia., mentre con l 1istruzione con tour (x ,y, Z) si ottiene una. serie
di curve di livello; si noti che, essendo il grafico bidimensionale, gli insiemi di
definizione sono i vettori definiti in precedenza, non le matrici X e Y come nel caso
di surf o mesh.
È possibile tracciare sia la superficie che le sue curve di live11o nel piano x-y
con il comando meshc (o surf e). Infine meshz traccia una 11base 11 che congiunge i
punti a quota zero con il piano x~y (per inciso si noti che non esiste un surt:z:). In
Figura 5.18 sono riportate alcune possibilità di tracciamento, riferite alla funzione
l
z = sin x cosy.

5.7.2 Curve parametriche l


È noto che la descrizione parametrica permette più agevolmente la rappresenM
~azione di curve e punti in uno spazio tridimensionale di quanto non faccia la
descrizione tramite funzioni di due variabili indipendenti: una retta ad esempio
può essere descritta implicitamente come interse2ione di due piani o esplicitamente
come il luogo dei punti che dipendono linearmente da un unico parametro. D'altra.
parte sappiamo che è sempre possibile ottenere (almeno localmente) la rappresen-
tazione parametrica di una Cllrva, mentre nel caso in cui si vogliano definire curve
(:
94 CAPITOLO 5. GRAFICA

Ii
:
.,.
I

o.a
0.6

o.•
... 0.2
J o
wQ,2

-0 .~
..0 .6

-0 .8
I

d
lfi
'
A11sey -2 O
Aa&IJC

Figura 5.17: I1 comando surf .

per punti diventa addirittura indispensabile disporre di un comando che permetta


di traccia.re singoli punti in uno spazio tridimensionale. Questo comnndo è
plot3(x,y,z)
, Il suo funzionamento è identico a quello di plot, incluse le opzioni su tipo e colore
di linea e la possibilità di linee multiple. Per esempio un'elica. a spirale logaritmica
(Figttra 5.19) può essere tracciata con

t=0:.1:10•pi;
r=exp(t/10);
x=r.•cos(t);
y=r.•sin(t);
z=ti
plot3(x.y,z);

5. 7.3 Solidi di rotazione


La funzione cyl inder (r) disegna la superficie di rotazione che ha per generatrice ·
la curva descritta dal vettore r. Per esempio il disegno del cono generato dalla
rotazione della retta y ::::x, x E [O,2) si ottiene con

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

Figura 5.18: Grafici tridimens ionali.

Dopo Bver completBto Il pre111en


te capJtolo, el provi a dlglLnrE!I seguenti comandi:

cylinder(si n(O: .1:2•pi)+2) ;


abading interp
light('pos ition',(4 -4 4J);
lighting phong
axis(Joff' )

che producono il risultato In Figura 5.20.


Può essere però comodo avere esplicitamente memorizzato l1insieme dei punti I l

che descrivono il solido; a questo scopo si usa

[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

Figura 5.19: Elica a spirale logaritmica,

5.8 Il colore in MATLAB


Il comando meab e le sue varianti viste al paragrafo precedente ammettono anche una quarta
matrice C come parametro opzionale: essa serve a definire i colori con cui sono tracciati gli
elementi che definiscono la. superficie.
A questo punto è utile una breve digressione sull'uso del colore per rappresenta.re un vettore
di•valori. Ricordiamo che misurare degli oggetti significa definire una legge di corrispondenza fra
gli oggetti stessi e un Insieme ordinato. In particola.re se come insieme ordinato usiamo Il ca.mpo
dei numeri rea.li abbiamo la misura intesa nel senso classico del termine, ma usando ad esempio
le lettere dell'alfabeto potremmo parlare di segmenti lunghi 'a', di segmenti lunghi 'b', ecc.
Ovviamente non è detto che i segmenti lunghi 'b' siano di lunghezza. doppia rispetto a quelli lunghi
'a ' : usando come insieme ordinato la scala. (temperata) diatonica, la nota 're' non corrisponde
ad una frequena di vibrazione doppia. della nota 'do'. In particolare se ordiniamo un ineie~~
di colori poashuno definire una misura tramite colori. Cosi se definiamo l'ordinamento "verde-
bianco-rosao" potremo pe.rlare di elementi verdi di un vettore Intendendo quelli la. cui dimensione
Il minima, bianchi per gli elementi Intermedi e rossi per gli elementi maaslml. L'ordinamento ~
arbitrarlo, mo.deve essere lntelllglblle , quindi è sconsigliabile definire ordinamenti a caso, per
non rendere impo881bile l'Interpretazione dei colori. Possiamo ricorrere a ordinamenti noti a
livello tattile: le sensazioni di caldo e freddo ci hanno abituato ad associare al colore rosso un
livello di temperatura elevato, al bianco un livello ancora maggiore (il "ca.lor bianco"}, al blu una
temperatura inferiore. MATLAB dispone di un insieme predefinito di mappe di colore, ovvero
tabelle che definiscono l'ordinamento fra vari colori, fra cui ricordiamo la mappa hot, defìni.ta sui
colori "caldì 11 , ovvero nero-rosso-giallo-bianco, con tutte le tonaHtà. intermedie, la mappa coolr
che definisce le tonalità fredde (I toni di blu) e la mappa gray, con i toni di grigio. Queste mappe
1
vengono attiva.te con l'istruzione colomap(111appo) : per esempio i colori caldi sono attivati e~~
colormap (hot); dopo questa istruzione I comandi grafici che Cacciano uso del colore attribuiranno
agli elementi più piccoli da. rappresentare i colore nero e ai più grandi il bianco . In ogni caso, il
comando colorbu aggiunge al grafico corrente una barra graduata di colori per sempllfìcare la · ·
5.8. IL COLORE IN MATLAB 97 t
I . ·I
.,'J
i

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

i dati maggiori di 5 non vengono rappresentati (colorati); eseguendo invece 'G


\;
caxie((O 1000))

il grafico è rappresentato con I soli colori "baasi" della. mappa corrente.


Torniamo ora al comando mub . Se il para.metro e è omesso MATLAB assume C = Z e quindi
I (•'~
..
i colori, definiti dalla mappa di colore corrente, sono proporzionali a.Ile quote della superficie •·;

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)

xaO: .1:Si(X,Y)'"Jlle ■ hgrid(x);


I .· ~ :;
',,,
Z•l+Y;
W=exp(-(l-~.6).·~-(Y-2.6).·2) ;
aurf(l,Y,Z,W);colormap(hot);cuia([-.11
shading interp;colorbar;
1]):
!I.
·'

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

Figura 5.21: Uso dei colori.


I
l
~
' Si noti che mnhgrid con un solo argomento restituisce un intervallo simmetrico. L'Istruzione

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;

l coerentemente, le loro rappresentazioni sono (0,0, 0} e (L, 1, 1) rispettivamente . Una. mappa di


colore ~ defluite. da una matrice a tre colonne, In cui ogni riga deflnlsce un colore. Le mappe
predefinite dal MA'l'LABcontengono 64 colori, Clb con uno schermo a 256 o pii.Icolori Fasorgere
il problema. di come gestire gli altri colori o, detto in a.Itri termini, come sfumare i 64 colori
1
I definiti dalle ma.ppe. Ricordiamo che i comandi mesh e surf tracciano grafici tridimensionali, ma

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

.I • 11hading faceted (che è il valore di default per questo comando) evidenzia.ulteriormente


le facce con un reticolato nero,
• 11he.dinginterp sfo.ma.i colori definendo per ogni faccia. una colorazione ottenuta inter-

!
5.8. IL COLORE IN l\llA.TLAB 99

polaodo i colori definiti sui bordi della fa.cci stessa..


Per visualizzare un11mappa di colori si pub usare l'istruzione poolor, che nella forma
pcolor(mappa); colormap(map)
disegna una scacchiera con I colori delinlti nella mappa di colori mappa. È p088ibile anche usare
la forma pcolor (X, Y,C), con la qua.le I colori sono trncclati sulla griglia. definita da X e Y. 1n
realtà infatti pcolor definisce un 1Urf con un punto di vista udall'alto", ovvero elevazione pari
a 90°. -
Questo comando non è limitato alle sole mappe di colori, per Il quale tra l'altro basterebbe
l'letruzione colo rba.r. SI consid rl ad eeemplo Il problema. del tracciamento dell'Insieme di Man•
delbrot, che è probabilmente l'oggetto matematico che ba più contribuito alla diffusione della
geometria. frattale. Esso è definito nel seguente modo.
Si consideri I.a.successione di numeri complessi {zi} definita dalla relazione Zk+ 1 = ~f+ e,
. ·'
eI
~o ::: O,dove e l! un preflsaato numero complesso. Al variare di e otteniamo quindi una famiglia di
successioni, e si dimostra che per ogni membro della fa.miglia se il modulo di uno degli elementi
raggiunge il valore 2 la successione diverge. Al variare di e sul piano complesso (in reo.lt i punti
significativi sono solo quelli appartenenti al rettangolo -2 < Re(c) < 0.5 x -1.25 < lm(c) < 1.25)
i corrispondenti membri della f miglia p0880no divergere con differenti veloclLào non divergere.
L'Insieme di Mandelbrot fl l'lneleme del numeri compleaal e te.li che lo.corrispondente successione
non diverge, ed à normalmente disegnato con Il seguente algoritmo: ··
l. si scelga un valore di c si pon a zo =O;
2. si calcoli z1,:+1 = zi
+ e fino a.quando si raggiunge un prefiasato numero di iteraiioni o uu
I ~ '2i
indice h tale che lz11,

3. se il modulo dell'ultimo elemento calcolato della successione è inferiore a 2 si colori in nero


il punto e nel plano complesao. Si torni al passo 1.
t poeeiblle Inoltre uae.re dlfferen~Icolori per indlc&n1la veloclU.con cui ogni 11ucce lon diverge:
1 questo scopo • 11ufficlentau11&reun colore proporalonale all'Indice h deflnUo 1l pas o i , CIO
corna visto In precedonH Eiqulv11le 111MATLABa definire una matrice W che ad ogni punto del
plano comple88oaesoela pl'oprlo Il vnlore Il. L'&lgbrltmo In MATLABè quindi Il ee uente In cui
si è fatto uso dell'operatore di Iterazione tor che sarà illustrato nel Paragrafo 7.1

(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

Figura 5.22: Insieme di Mandelbrot.

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

z =sinp , p = J%2 +y2


p
Il comando aurtl funziona come nr1'i ma In più accetta un ulteriore parametro che Indica
la posizione della sorgente luminosa, nella forma dl un vettore con le \re coordinate del punto o
I due angoli di elevazione e azimuth, come abbiamo già visto per Il comando vhw. Si digitino I
seguenti comandi e se ne osservi l'effetto (Figura 5.23).

(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

[I risultato è riportato in Figura 5.24.


1
102 CAPITOLO 5. GRAFICA

0,4

0.2 ......--

-0.2

I
r\ -e •8

Figura 5.24: I comandi cli ombreggiatura.


I
I 5.10 Trasparenza
Abbiamo vl o come eia poaaiblle usare colori per rappresentare lnforma-ziont. Tuttavia, nel-
l'eaemplo presentalo In Figura 5.21 il lettore attento avrà riecontre.to un problema.: la figura
eottoat nte, le.In.etra,è una superficie. Come Invece si può rappresenta.reun'Informazione defini-
ta eu un solido, ovvero un volume? n problema ovviamente ei pone perché se disegniamo il solido,
non pOBBia.mo vedere cosa accad all 'intemo del solido ste88 , Pensiamo ad esempio ad una.sfera.
con un nocciolo caldo {come la Terra, ad esempio); tracciaLa la sfera possiamo solo visualizzare
informaaloni (colore,ad esempio} sulla 11uaaupertlcle, non al euo lntemo, a meno cb la sfera non
diventi parzialmente tmaparente. È questa l'Idea che sta e.Ilabase dei comandi di tr8BparenzaIn
MATLAB.
Il comando fondamentale per definire la trasparenzn è alpha.. Partiamo da. un e mplicl!
esempio: tracciamo un&superficie e rendi mola.trasparente.

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

\ 1urf(fliplr(flipud(L) ),' fac•1lpb ',1), ahading interp


5.10. TR.4.SPARENZA 103

.' ..
~

.....!........
...:'..
..:.. ..
.-~.
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

Figura 5.25: Il comando alpha.

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

(x,y,z] • meahgrid(-2: .l:2, -2:,25:2, -2:,16:2);


104 CAPITOLO 5. GRAFICA

va x.•eip(-x , ·2 - y.·2 - ;.•2)i


h••lic•(x,y,z,v,[-.8 0.8J ,(O 2] ,(-2 O))j

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:

set(h,'1dgecolori , 1 n0ne•, 1 tac1color','int1rpi,,tacealpha', 'interp>);


a.lpba('eolor>)
alphainap('rampup')
alphamap('increa11 1 ,.l)
colormap(bot)

Il risultato è riportato in Figura 5.26.

2
1.5
·•._: -~
·-
~ .. ..~ :

1: 0.5
'•
'••;. ....~-i
11
o
-o.a
•1
•1.5
l
·2
-~ I •
2
2

I'

Figura. 5.26: Tracciamento di un grafico tridimensionale.

5.11 Stampa dei grafici


La stampa dei gra:fici in MATLAB avviene sostanzialmente in due diversi modi:
utilizzando le potenzialità dell,ambiente Windows o affidando a MATLABstesso
la gestione della stampa..
Nel primo caso è sufficiente usare l3opzione Print nel menu a tendine File della
finestra grafi.ca per stampare la figura corrente sulla periferica di stampa definita
I i
da Windows. In alternativa, oltre a.d usare i soliti comandi di "taglia e incolla", si
può usare il comando Esporta, ancora nel File, il che è comodo soprattutto per
5.11: STAlvlPA DEI GRAFICI 106

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:

print -dperi/erie<.&-opzioni nomeFile


Il comando genera un file definito dal parametro nome~le nel fonnato definito dalla starn•
pante selezionata con il primo parametro. Se il nome di file è omesso la stampa è diretta verso
la stampante,
MATLAB gestisce direttamente vari tipi di formato PostScript:

-dps PostScript ìn bianco e nero


-dpsc PostScript a colori
-dps2 Posr.Script Livello 2 in bianca e nero
-dpsc:'2 PostScript Livello 2 a colori
-deps Encapsulated PoaLScript in bi&nco e nero
-dep ■ c Encapsulated PostScript a colori
-depa2 Encapsulated PostScript Livello 2 b/n
-depsc:2 Encapsulated PostScript Livello 2 a colori

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

-dlaurjet Stampanti HP Laser Je~

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

converye alla funzione "dente di sega" riportata in Figum s.e1.


Eserclzio 6.4 Si 11erifichiil teorema dl Gerahorin:gli autovaloridi una matrice
reale o complessa n x n giacciono nell'unione dei cerchi definiti da

' dove
r,: L" laìJI
J=lj~i

e anche nell'unione dei dischi

dove n
Pi=
i=l~j
L laiJI
5.12. ESERCIZI 107
I I
•~----- ---- --- .--- ----- ~ ----

.,.
I
!;
1
.,.

Figura. 5..27: Dente di sega.

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

Si analizzino le sfere di raggiounitario in R 'l definite dalle norme


1. 11:z:lli
=lxii+ lx:il
2. = ✓ :r~+ X~
112:ll2
:J. llxlloo
= max(x11X2)
generandoa caso 10000 coppie(x1, x'l) uniformemente distribuite nell'interoallo
(-1, 1) x [-1, l] e tracciando sul piano :t 1 - 31~ i aoli punti appartenenti a ogni
sfera,.
Suggerimento. L'uso del comando norm è scoT13igliato.
Esercizio 5 .6 La traiettoriadeacntta da un punto :m una circonferenza che rotoli
. senza strisciaresu una retta è una curva detta cicloide. Scelto come parametro
l'angolo di rotazionedella circonferenza<{,,le equazioni parametriche della cicloide
sono

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

Suggerimento, Si traccila auperficiedel vincolos la ai colon in baie


allafun,fone obbsettiuo. \ 'j..

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

1 polinomi si rappresentano in MATLAB come vettor i riga contenenti i coefficienti


in ordine di potenze decrescente; per esempio il polinomio p(s) = 8 3 + 4s2 + 2s + 5
ai rappresenta con il vettore p= [1 4 2 5). Ovviamente vanno inclusi anche i
coefficienti nulli: 83 + 1 si rappresenta con pa [1 O O 1].
Gli insiemi invece si rappresentano preferibilmente come celle. Iniziamo a
trattare i polinomi.

6.1 Operazioni fondamentali


Come abbiamo già visto, il polinomio caratteristicodella.matrice A ai calcola con ! '
l'istruzione p=poly (A); la funzione poly serve anche a costruire il polinomio mo- I,
I
nico che abbia un insieme di radici a.taegnate:per esempio il polinomio monico I
; I
I

con radici -3 ± j2, -5, ovvero il polinomio p(s) = (s + 3 + j2)(8 + 3 - j2)(s + 5)


si costruisce con
l
r•[-3-2•j,-3+2•j,-5);
p•poly(r);

Il prodotto di polinomi si esegue con la funzione conv:


a=[l 2 3]; b=[4 5 6] ;
c=conv(a,b)j
,I
dà c=[4 13 28 27 18] (infatti (s 2 + 2s + 3)(482 + 5s + 6) = 4s4 + 13s 3 + 2882 + !
27a + 18). I'
L'operazione duale è la. divisione di polinomi, ottenuta con deconv. La.sintassi
è I
I
1

'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

a(s) = q(s)b(s} + r (s)

Ovviamente, se b(s) è un divisore di a(s) il resto r(s ) è nullo. i


Le radici di polinomi si calcolano con roots (che costruisce la matrice in formà
compagna associata al polinomio e ne calcola gli autovalori). Con riferimento
all'esempio precedente, roots (p) fornisce

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

e la matrice quadrata A, p(A) è definito come


n
p(A) = Ì:p,Ai
i;::0

Per esempio se p(s) = s2 + s + 1 e A= ( ~ ; ) , allora polyval(p,A) dà

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.

In particolare quindi polyvalm(poly(A) ,A) fornìsce la matrice nulla, in accor-


do con il teorema di Cayley-Hamilton.
Una operazione piuttosto frequente è la derivata.. MATLAB usa la funzione
polyder per calcolare la derivata di un polinomio; in particolare:

• q=polyder(p) restituisce la, derivata del polinomio:q(s) = d~~s).

• q=polyder(a,b) restituisce la derivata del prodotto a(s)b(s).


• (q, d]:=polyder (b, a) restituisce la. derivata. del rapporto sotto forma di
funzione razionale fratta:
q(s) d b(a)
d(s) = ds a(a)
Altra operazione frequentemente associata al trattamento dei polinomi è l'e-
spansione in fratti semplici: assegnata una funzione razionale fratta b(s)/a(s) con
sviluppo in fratti semplici si intende il seguente sviluppo

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

per ottenere l'espansione in forma reale è necessarlo formare il termine trinomio


relativo alla. coppia di poli p = -3 ± j con il comando

[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

(' In conclusione l'espansione risulta


i 0.62 0.4 0.52s + 2.2
\
\

-----
8 +1 (s + 1)2 s2 + 6s + 10

In sintesi, gli operatori polinomiali sono riassunti µella seguente lista:

poly polinomio con radici date


roots radicidi un polinomio ·
polyval valore di un polinomio in un punto
polyvalm valore di un polinomio matriciale
conv prodotto
deconv- divisione
reeidue espansione in fratti semplici
polyder derivatedi polinomi
polyfit interpolazione polinomiale

Resta da illustrare il funzionamento di polyf it; a esso, e più in generale al


problema dell'interpolazione in MATLAB dedichia.moil prossimo paragrafo.
6.2. INTERPOLAZIONE 115

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.

• polyfit Interpolazione polinomiale. Descritta sopra.


• spline Interpolazione tramite spline cubiche. Dati due vettori :z:e 11come
nel caso dell'interpolazione polinomialee un vettore x, cliascisse, l'istruzione

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

e il risultato è un vettore y, di lunghezza n. 11metodo usato è trasforma.rela.


sequenze.originale tra.mite FFT e antitrBBformarecon un numero maggiore ..
di punti. i· I

''
• interp1 Algoritmo generale di interpolazione iu tabella. L'interpolazione è
lineare usando la chiamata

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

permette di definire i seguenti metodi:


l. 1 linear I Interpolazione lineare.
2. >spline' Ioterpolazione via spline cubiche.
116 CAPITOLO 6. POLINOMI, INTERPOLAZIONE E INSIEMI

3. , cubie' o 'pchip' lnterpolazion~ continua a tratti con cubiche di


Hermite.
4. 'nearest I Assume il valore del punto più vicino.

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

• interp2 Interpolazione bidimensionale. L'istruzione

funziona come interp1, ma su tabelle bidimensionali. I possibili metodi


sono ora solo 'linear', 'cubie' e 'nearest'. Ancora una volta 'linear'
è il metodo di default.

Fra i metodi di interpolazione 1 possiamo annoverare anche quelli che permet-


tono di tracciare i grafici di curve o superfici a partire da dati non equispaziati.
Ad esempio, sappiamo che per usare il comando surf i dati sul dominio (x e y)
devono essere equispaziati. Supponiamo tuttavia di avere a disposizione solo N
triple (x,,y,,zi), i = 1, ... 1 N, in cui i punti del dominio non sono equispaziati. Per
tracciare la superficie, dobbiamo prima generare un dominio con punti equispa-
zìati (e già sappiamo che per questo basta. l'istruzione méshgrid) 1 quindi ottenere
i corrispondenti valori di z ricavandoli da.i dati non equispaziati. A questo scopo
possiamo usare il comando gr lddata 1 come nel seguente esempio. Per simulare
dei dati non equispaziatl 1 possiamo generarli a caso:

x~rand(100,1)•7-3.5; ¼valori a caso nell'intervallo (-3.5,3,5]


y=rand(100,1)•7-3.6;
z=sin(x).+cos(y)i

Se poì proviamo a tracciarli con il comando plot3 (x, y. z, 1 o') il risultato è


difficilmente leggibile, per cui ricorriamo alle istruzioni

[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····
··· ••'
·····•\::··
.,
...

"

Figura 6.1: Uso del comando griddata.

Il risultato è riportato in Figura 6.1 1 in cui la superficie "trasparente" è la.


vera funzione, quella che ha generato i dati; si noti come l'interpolazione aia molto
buona nella zona centrale del dominio, pur con dati casuali,
Concludiamo questo paragrafo con un argomento che è a metà strada fra l'in-
terpolazione e il trattamento di insiemi, che vedremo nel prossimo paragrafo: la
ricerca di un inviluppo convesso per un insieme di dati, ovvero, come, dato un in-
sieme di dati arbitrari, racchiuderli nel più piccolo insieme convesso che li contenga.
Si noti che matematicamente l'argomento è tutt'altro che banale. Il comando che
si usa.in questo ca.soè convhull, che restituisce gli indici dei vertici dell'inviluppo
convesso. Ecco un esempio autoesplicativo
r•rand(lOD,1); teta=rand(100,1);
x=r.•cos(teta);y=r.•sin(teta);
k=convhull(x,y);
plot(x(k) ,y(k), '-' Jx Jy,'. ', 'markersize' ,8)
axia((-.6 1.5 -,5 1.5})
il risultato è in Figura 6.2
I
6.3 Insiemi e operazioni sugli insiemi
A rigore in MATLAB sono.implementate operazioni sugli insiemi considerati come
vettori tradizionali, ma è possibile definire gli insiemi come vettori di celle di
"
l
I
118 CAPITOLO 6. POLINOMI, INTERPOLAZIONE E INSIEMI .

I.Sr-- ---..---- --,,-- ----,.--- ------,

0.5

"°:l'-,----0!----~ ll~
I ---~----,01.8

Figura 6.2: Effetto del comando convhull.

caratteri, ed è in b88e a quest'ultima interpretazione che verranno presentate le


operazioni sugli insiemi. Il punto importante è infatti presentar-e le operazioni
stesse, comprese le quali il lettore non avrà alcuna difficoltà nel considerare anche
il caso dei vettori tradizionali consultando l'help in linea.
tj Inizia.mo quindi a. definire tre insiemi che utilizzeremo nel seguito:

! l A=nwn2cell('abcdef');
i B=num2cell('detgh');

~I x~num2cell( 1 abcdefghijklmnopqrstuvwxyz 1 )i

L'intersezione di due insiemi si ottiene con il comando intereect:


I C=intersect(A,B)
fornisce

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

si noti che nelPunione le ripetizioni sono elimina.te e gli elementi ordinati.


1 La differenza tra due insiemi si ottiene sottraendo ad un insieme l'intersezione
dei due insiemi ed è prodotta dal comando eetdift :
6.3. INSIElvII E OPERAZIONI SUGLI INSIE.MI 119

E=setdiff(A,B)

produce

E=
, a, I b' ICI

Con questo operatore è anche possibile ottenere il complemento di un ms1eme,


sottraendo l'insieme stesso all'insieme universo: il complemento dell'insieme A
nell'alfabeto X è nA=aetdiff (X, A).
Per verificarel'appartenenza di un oggetto ad un insieme dato si fa uso dell'istru• I

zione iamember(A, S); contrariamente e. quanto ai potrebbe immaginare, questo h·


istruzione non restituisce un solo valore 1/0 per vero/falso,- ma. un vettore con
le dimensioni dell'insieme A i cui elementi sono pari a uno solo nei posti i cui
corrispondenti elementi di A sono nell'insieme SI e zero altrimenti:

ismember (A. 1 e')

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

Esercizio 6.3 Si determinino le radici dei seguenti polinomi


J. s 3 + 5s 2 + 1s + 2
2. (s + 1) 3 (s2 + 12s + 9)

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. 6 Confrontare i grafici, nell'intervallo x E [-1, 1], dei polinomi di


Chebyshev di grado n = O,11 2 1 31 4 definiti dalla formula ..,
·1•
.
Tn(x) :::::;
cos(n arccos(x))

Usandopoi il comando polyf it, trovare i coefficienti di questi polinomi.

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,

Esercizio 6.8 La ricerca di regfoni cui appartengono gli zeri di un polìnomfo a


partire dalla sola conoscenzadei coefficienti (reali o complessi)dello stesso ~ un
problema affrontato da generazioni intere di matematici. I risultati principaii han-
no portato alla definizione di regioni circolari centrate nell'origine cui apparten-
gono tutti gli zeri o nessuno zero del polinomio. Ecco alcuni esempi: assegnato un I
'I
polinomio I

si ha:
r
1. gli zeri appartengono al cerchio
.J

lsl < 1 + max-0,1;il, k =O, . . . ,n


On
- 1 \.
I
&. per ogni coppia p > 1, q > 1 tale che 1/p + 1/ q = 1, gli zeri appartengono al
cerchio

9. gli zeri appartengono al cerchio


122 CAPITOLO 6. POLINO'lvII, INTERPOLAZIONE E INSIE~ll

f gli zeri appartengonoal cerchio

!si< L
n 11/lc
a,__A:
- k= l Cln

5. gli zeri giacciono all'e.'Jternodel cerchio


tf .-...
:,
'I

'\
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
'•

Esercizio 6. 1O Calcolarel 'espanBione in fratti semplici della funzione

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

Esercizio 8.12 Si calcolinoi coefficienti dei polinomi cULegen<lredi gmdo n =


11 2, 3 definiti dalla Jonnula

Ln(X) = -- 1 d" (X 2 -1 )n
2"nldx"
Capitolo 7

Programma zione stru ttur ata


in MATLAB

Il MATLAB è programmabile sia in maniera strutturata che ad oggetti. Iniziamo


a descrivere in questo capitolo la programmazione strutturata, lasciando nd un
capitolo successivo la programmazione ad oggetti. Fino a questo punto abbiamo
usato MATLABlavorando in modalità interattiva, ovvero digitando ed eseguendo
le istruzioni da tastiera· una per volta. Questo modo di procedere è certamente
estrema.mente agile, ed è consigliabile quando si voglia usare Ucomputer come una
calcolatrice esteso. per ottenere rapidamente dei risulta.ti, ma si pongono due pro-
blemi: nel caso ln.cul el abbia bisogno di ripetere più volte lo stesso comando o lo
stesso gruppo di comandi, come evita.re di riscrivere più volte le tesse istruzioni?
E inoltre, nel ca.goln cui si abbia la necessità di ripetere più volte stesse oper-
azioni, ma con parametri che cambiano in funzione dei risulta.ti ottenuti al passo
precedente, è possibile limitarsi a cambiare i parametri evitando di riscrivere le
istruzioni?
La. risposta ad entrambi i quesiti è sì, in particolare per il primo ci occupe-
remo delle strutture di controllo, per il secondo della creazione cli veri e propri
pro.grammi MATLAB, o di funzioni che potranno aggiungerai alle funzioni di base
MATLAB. Nel paragrafo seguente sono presenta.te le strutture che permettono di
controllare il flusso logico delle istruzioni, mentre nei due successivi ci occuperemo
della creazione di programmi e funzioni. L'ultimo paragrafo infine si occupa degli
strumenti MATLAB per la correzione e la messa a punto dei programmi.

7.1 St ruttu re fond amentali 1-1

Come è noto dalla teoria della programmazione strutturata, qualsiasi programma


può essere sviluppato in un linguaggio di programmazione che disponga delle tre

il
124 CAPITOLO 7. PROGRAMJ.!IAZIONE
STRUTTURATA IN l\lIATLAB

strutture fondamentali di 1) Sequenza, 2) Selezione, 3) Iterazione. Esaminiamo


ora in MATLAB come questi operatori sono realizzati.

• La sequenzain MATLAB è ovviamente ottenuta dalla sequenza lessicografica


delle istruzioni;
• la selezione si ottiene con i classici costrutti
if condizione,
istruzioni
elaeif condizione,
istruzioni
elsa
istruzioni
end
oppure
s'lli tch variabile
case valore 1
istruzioni
case valore 2
istruzioni
othervise
istruzioni
end
• l'iterazione si ottiene con i costrutti
:for i=1 ;n,
istruzioni
end
e con
while condizione
istruzioni
end

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

Tutti questi comandi possono essere usati in modo interattivo, ma il loro


ambiente naturale è quello batch, all'interno di programmi MATLAB.

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

Gli script files operano diretta.mente sulle variabili attualmente in memoria e


non consentono l'uso di variabili locali. Sono anche detti M-filea perché vanno
memorizzati in files con estensione .M. In pratica è come scrivere un insieme di
istruzioni MATLAB al di fuori di MATLAB e poi farle eseguire in blocco. Per
~empio scriviamo con l'editor di MATLAB la sequenza di istru1,ioni:
Y. Un M-file per calcolare i numeri di Fibonacci
f=(l 1]; i=1;
while f(i)+t(i+1)<1000
f(i+2)~1(i)+f(i+1);
i~i+i i
end
plot(f)
e memoriz.1,ia.molenel file FIBNO.M; allora l'istruzione f ibno chiamata da
MATLAB esegue le istruzioni, calcola e dìsegna i primi 16 numeri di Fibonacci.
Per inciso, il carattere 'I.indie& che la linea è da. considerarsi un commento. Dopo
l'esecuzione del file le variabili f e i restano nello spazio di lavoro.
Spesso la creazione di uno script file non è prevista, ma ai giunge ad un punto
in una.sessione MATLAB in cui si scopre che sarebbe valso.la p na di memoriizare
i comandi in un file, invece che continuare oJimmetterli da taaiiera. Poiché questa
situazione è più frequente di quanto ci si posaa aspettare, Matbworks ha. introdotto
la History Window, una di quelle finestre che abbiamo chiuso a1Plniziodi questo
libro, e che ora faremo bene a. riaprire (comando View del menu a tendine). SuJla
Hhtory Winciowa.bbio.motutti 1 coma.ndi fino a questo punto dlgitati, e quindi
posale.mofacilmente •Selezionarlie copiarli in uno script file.

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.

'l. Copyright 1984-2001 The MathWorks, Inc.


'l. $Revision: 6.7 $ Date: 2001/04/15 12:01:34 $

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

TRACE Sum of diagonal elements.


TRACE(A)ìs the swn of the diagonal elements of A,
which is also the sum of the eigenvalues of A.

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

Per invocare questa funzione da MATLAB,dovremo dichiarare anche nella


Conuna.nd Window le variabili FREQe FASEcome globali, come si vede nel seguente 1
I
esempio: j
q
L È possibile anche dotare un 'intera. directory di un proprio help, insel'endo nella directory
il file contenti ,111che deve essere costl~uito di soli commenti. li contenuto di questo file sarà.
visualizzato quando è eseguito il comando help NomeDircctory.
128 CAPITOLO 7. PROGRAMMAZIONE STRUTTURATA IN MATLAB

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;

• munlock ha l'effetto opposto del comando precedente, sblocca la variabile;

• mislocked è vera.se la variabile è protetta.,


Abbiamo visto (si pensi a.I comando residue, per esempio) che è possibile
anche avere più variabili di ingresso e uscita . MATLAB memorizza il numero
di para.metri in ingresso nella variabile nargin, e quello in uscita in nargout.
Consideriamo per esempio la funzione rank che, come detto in precedenza 1 calcola
il rango della matrice in ingresso. Teoricamente il rango può essere calcolato come
il numero di va.lori singolari di versi da.zero 1 in pratica ovviamente si contano i valori
singolari maggiori di una quantità molto piccola. La funzione rank può accettare
questa quantità dall'esterno o calcolarla internamente a seconda del numero di
parametri in ingresso:
function r = rank(A,tol)
¼RANK Hatrix rank,
¼ RANK(A)provides an estimate ot the number of linearly
¼ independent rowe or columns ot a matrix A.
1/. RANK(A,tol) ie the number ot singular values of A
1/. that are larger than tal.
'l. RANK(A)uses the default tal= max(size(A)) + norm(A) * eps.

¼ Copyright 1984-2001 The MathWorks, !ne,


X $Revision: 6.10 $ $Date: 2001/04/15 12:01:33 $

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

Inoltre, è possibile passare ad una function un numero di argomenti non speci-


ficato a priori, usando la variabile varargin (e la corrispondente variabile di uscita
varargout ): se l 1intestazione della funzione ha la forma

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

che chiamato ad esempio con tre argomenti, fornisce:


ruotad('Guida','operativa','HATLAB')

ans =

'aGuid' 'aoperativ' 'BMATLA'


Si noti che, anche se la variabile di uscita. nella funzione è un array di celle,
ben diverso è questo caso dall'uso di varargout (che pure è un array di celle):

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

ruotas( 1 Guida 1 , 'operativai , 1 MATLAB')

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

come si vede, varargout a.giscesolo sulle variabilj di uscita.


Inoltre, varargin e varargout permettono di definire funzioni con argomenti
"opzionali"; supponiamo di voler tracciare il grafico cli uri numero imprecisato di
funzioni sullo stesso intervallo. Premettiamo che per tracciare il grafico possia-
mo usare la (unzione feval, nella forma (ad esempio) feval( 1 sin' ,x), oppure
f ev al ( Clsin, x). Questo modo di passa.re funzioni a funzioni sarà dettagliato in
seguito. Per ora ci basti osservare che la seguente funzione

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)

permette di tracciare grafici di più funzioni con il semplice comando


x:(q:.1:5)';
grafici(x,Gsin,Gcoa)
Abbiamo nell'esempio precedente accennato al comando feval; un comando
simile, ma di uso più generale è eval, che permette di valuto.re una. stringe. come
un'istruzione MATLAB.Per esempio

t=pi/2;
c='y=sin(t)>;
eval(c);

assegna a y il valore 1. Un esempio meno banale è il seguente: supponiamo di voler


definire vettori associati ad una data, ad esempio contenenti i de.ti di un esperi-
mento eseguito une. volta al giorno. Ovvia.mente poasie.mo definire ogni giorno
un vettore con un nome come d16_12, per ricordarci che si tratta dei dati del 15
dicembre, ma possiamo anche lasciare che sia MATLAB a creare l'associazione in
modo automatico, per cui sfruttiamo la funzione date, che fornisce la data cor-
rente, nella forme.gg-mmm-aaa.a, ad esempio 01-Jan-2000. L'idea è semplicemente
quella di memorizi.a.rei dati presenti in un vettore x {che, giorno per giorno, cam•
bia. il suo contenuto pur senza cambiare nome) in un vettore che abbia il nome
giusto. Tuttavia, la semplice soluzione eval ( [ 'd 1 ,date, 1 =x']) non è praticabile,
perché fornirebbe la valutazione dell'espressione dO1-01-2ooo=x 1 che è ovvia.mente
incomprensibile per il MATLAB.Ricorriamo allora ad una soluzione che sfrutti
anche il comando datevec, che, usato nella forma
[Y,H,D,H,MI,S] = datevec(tempo)
7.4. LA CORREZIONE DEI PROGRA1\1Il\1I 131

"spacchetta" la variabile tempo nelle sue componenti: Y (anno), M (mese), D


{giorno), H {ore), MI (minuti), S (secondi). Ecco quindi la soluzione:
(
[y,m,g]=datevec(date); 'J • .

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

fa appariresullo schermo la.fra.sefra.apici e memorizza nella va.ria.bilen Il numero immesso do.


taatiera..

7.4 La correzione dei programn1i


È noto che nella scrittura di un programma (così come nella scrittura di un libro),
possibilità e certezza di errore sono sinonimi: ogni linea di programma probabil-
mente errata lo è sicuramente, non occorre scomodare la teoria delle probabilità.
Vediamo quindi come individua.re e correggere le fonti di errore. Parleremo prima
di errori nel modo interattivo, poi negli script files e infine nelle function, in parti-
colare errori logici, i cosiddetti nm-time errors, in quanto gli errori sintattici sono
ovviamente estremamente più semplici da individuare e correggere.
Lavorando in modo interattivo il modo più semplice per scoprire gli errori è
visualizzare i risultati di ogni operazione (basta non usare il punto e virgola alla
fine dell'istruzione). Ciò ovviamente va fatto con la dovuta cautela, per evitare
un flusso continuo di numeri sullo schermo, soprattutto se si lavora con matrici
e vettori di dimensioni considerevoli; in questi casi spesso un uso appropriato di
f ind, all e any si rivela estremamente fruttuoso. Si ricordi inoltre che in caso /I
di errore MATLABsegnala l'istruzione in cui si è verificato il malfunzionamento, ,,
1:
quindi la primo. cosa da fare è consultare l'help in linea della funzione stessa (si ·,
,,
I.
capisce quindi che scrivendo una. function, molto importante è dotarla di un help j: I

che ne descriva o.lmeno funzionamento e parametri di scambio).


I 1
Abbiamo detto che uno script file non è altro che una sessione batch, quindi
l'approccio alle correzioni è quello visto per le sessioni interattive, tranne che in i,
!1
i i

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

Nella stragrande maggioranza dei casi il risultato finale dell'attività di pro-


grammazione in MATLAB è un function file, che possi~mo pensare come un nuo-
vo comando aggiunto alla libreria . di base MATLAB. E per questo che maggiore
attenzione è dedicata alla progettazione e messa a punto di function files1 al punto
che per essi e per gli script files è disponibile un debugger integrato nell'editor di
MATLAB.
Vediamo ora in dettaglio come si usa il debugger. Supponiamo di avere il file
diseig. m che calcola e disegna sul piano complesso gli autovalori di una matrice
A. Sappiamo che se almeno uno degli autovalori è complesso basta il comando
plot (1), in cui il vettore l contiene gli autovalori. Se però tutti gli autovalori sono
reali una possibile soluzione è aggiungere una parte immaginaria molto piccola,
cosa cui provvede la. function aggirnm.m. Ecco il contenuto del file dise .ig, m:

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

y=x+j •eps i e schiacciando il pulsante set/ clear breakpoint. Così l'esecuzione


del programma si arresterà in questi due punti. . :,

l.
I )
tl
,1;

I:

ilejl iito ,I
n ,I
mmC1!1 eh
· i ti1 l o!! . •~l._, pu . ~~1f1 -: j,

Lit ,>\' 1 LI l! C>h❖ 10 l . )


, •. ', ' ma,1c:11r1tz:1 ',40); 11Ci!l('ti'i1 ht') ;
•t
fune 1~n r~g 9i rrrn1x1;
un v ecr t, 31·.,- 1c, no11t-r 1c e 1 x, \J c h1a mbt<i
·• ,:iuqu,-r.1, , 1
eakl)Oinis·1C

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

Poi eseguiamo dalla Command Window diseig(A} (dove la matrice A è stata


definita in pt'ecedenza, ad esempio A=rand(6)}; MATLAB passerà il controllo al•
l 1editor e mostrerà. il cursore fermo proprio sul primo punto di arresto. Ora schiac-
ciamo il tasto Step per passare all'istruzione successiva, e avremo l'esecuzione
dell'istruzione l=eig(A); come si vede sia dal fatto che il valore della variabile l è
disponibile in MATLAB, nel workspace (basta usare )a finestra Workspace 0 1 più
aemplicemente1 digitare 1 senza punto e virgola finale nella Command Window,
come per una. normale varia.bile MATLAB), sia osservando che se nell'editor po-
sizioniamo U cursore sulla variabile l ci appare un riquadro con il suo contenuto.
In questa maniera possiamo esplorare il contenuto di tutte le variabili locali, e
anche modificarlo dalla Command Window, per vedere "cosa succederebbe se la
variabile x valesse ...?n. Per andare avanti poi possiamo continuare ad avanzare
di una istruzione per volta, ancora con il tast o step 1 oppure andare direttamente
al successivo punto dì interruzione (eventualmente a Ane programma, se non sono
presenti altri breakpoint) con il tasto Run. Per uscire dal debugger usiamo il tcU1to
Exi t Debug Mode.
Proviamo ora le istruzioni:
A=diag([1 2 3 4]) ;
diseig(A)i
134 CAPITOLO 7. PROGRAMJ'vIAZIONE STRUTTURATA IN i\lIATLAB

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

:tk+i = F(x.t) , k = O, 1 2, ...


1
7.5. ESERCIZI 135

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

Figura 7.2: Diagramma delle orbite di Qc(x).

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

Il parometro di ingresso ~ la lunghezza della sequenza do tracciare.


Poi, piutcoato che codificare la posfaione de.Ile le note con i numeri da O a 111 conuiene
associare a1 diesis una parte /roiionaria, in modo che la sala pa1'te intera di questa codifica
determini la corretta posizione della nota sul pentagramma:

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

Esercizio 7, O Restando in ambito m"Usicale,consideriamo il problema più com-


pl~sJo di generare automaticamente canoni a due voci. R canone è una struttura
musicale basata sul principio dell'imitazione fra le paf'ti, procedimento che è al-
la base del contrappunto e trova applicazioni in ambiti estremamente 11asti 1 che

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

Definite le consonanze, proponiamoci ora di generare canoni a due voci com-


posti da un prefissato numero num di note, con un ritardo temporale di rit note e
un intervallo fra le voci di int semitoni.
La maniera più semplice per ottenere questo risultato è provare tutte le pos-
sibili combinazioni di num note all'interno di una ottava, accettando quelle che
produconoun canone che produca solo consonanze e scartando le altre. Per fare
dò si consiglia di codificare ogni linea mefodica come un numero di num cifre in
base 12.
Soluzione. In linea di princìpio il seguente algori,mo risoCveil problema:
J. si leggano i 11aloridi num, rit ed int;
2. si ponga il vettore note, di lunghezza num a iero;
3. .ti ponga la variabile ausiliaria. continua al uolore vero;
4. fino a quando non si trova una 1equenza consonante
~- ,i incrementi il vettore note
6. se la nuoua sequen,1a è coruonante
1. la sequenza ~ ,tampata
8. al al1iede oli 'utente ,e desidero alttt 1equente, nel qual coso la t1arfobile cotitinua
a.,sume il 11atore11ero
il punto 5. µud essere implementato con la -'eguente function

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;

che, chiamllta con •


x•iticir12(x ,n)

! 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

e il precedente avrebbe nuociuto all'uso comune che u a. il MATLAB in maniera


prevalentemente interattiva. Il problema è che MATLAB, nato come un program-
ma per semplificare il t.rnttarnento di strutture algebriche, si è sviluppato sempre
di più nella direzione di un vero linguaggio di programmazione con primitive alge-
briche. Ciò comporta. che un libro sul MATLAB deve necessariamente prestarsi ad
una duplice lettura, la prima orientata all'acquisire familiarità con il programma,
la seconda a padroneggiarne le strutture.
In questo capitolo la presentazione degl"oggetti sarà condo ta in maniera.didas-
calica, tramlte semplici esempi, la.sciandoai testi specializzati gli approfondimenti.
Il primo esempio è tratto dal manuale del MATLABe riguarda la crea.zione di
una classe di oggetti di tipo polinomio. Il nostro intervento consisterà nel fondare
la classe su matrici di polinomi1 piuttosto che su oggetti scalari.
Nel secondo empio introdurremo i concetti di ereditarietd e vedremo come
risulta semplice la coniugazione dei verbi francesi, pur in presenza dell'immenso
numero di irregolarità che presenta la grammatica di questa lingua.

8.1 Cost ruzio ne di una classe


La costruzione di una claa e inizia con la. creazione di una directory (visibile dal
path c-0rrente) che ha. lo stesso nome della. classe, m è preceduta da.I simbolo O.
Ad esempio, per creare la classe polynom a cui apparterranno gli oggetti di tipo
"polinomion iniziamo a. creare la. directory Opolynom.
Dopo questa operazione preliminare, la prima cosa da fare è scrivere una fun-
zione che consenta di creare e definire (istanziare) un oggetto appartenente a.Ila
classe: tecnicamente si parl a di "metodo costruttore di classe" (ricordiamo che

.,
"
'I
142 CAPITOLO 8. OGGETTI IN NIATLAB

nella programmazione a oggetti si può grossolanamente affermare che i "metodi" :;1


corrispondono alle 1'funzioni" della programmazione strutturata). )
Per fare ciò 5criviamo il seguente M-file:

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

e memorizziamo questo file come polynom. mnella directory «lpolynom.


Come si vede un oggetto polinomio contiene al suo interno il solo campo •71
che è il vettore dei coefficientidel polinomio stesso. Eseguendo l'istruzione
p•polynom([1 2 3))
MATLAB risponde con
p =
polynom object: 1-by-1
Cosl l'oggetto è stato creato, anche se al momento è inutilizzabile; infatti il cani:
po p. e non è accessibile dallo spazio di lavoro. Notiamo che il file costruttore
contempla tre casi:
.!
• è possibile costruire un polinomio vuotoi
• se l'argomento del metodo è già un polinomio, il metodo restituisce il poli-
nomio di ingresso;
• è infine ovviamente possibile creare un polinomio a.partire da dati in ingresso.
In particolare, il primo caso è richiesto quando MATLAB carica oggetti nello
spazio cli lavoro con il comando load o quando crea vettori di oggetti.
Il comando class è un altro dei comandi polimorfi di MATLAB: usato con
due argomenti all'interno del file costruttore cli classe crea un istanza della classe
1

specificata. Se però è usato con w1 solo argomento di ingresso restituisce la classe


dell'argomento stesso:
8.1. COSTRUZIONE DI UNA CLASSE 143

class('io')

restituisce
ans =
char

Dopo aver definito la classe dei polinomi, I1operazionesuccessiva è renderla ac~


cesaibile, per cosl dire 11leggibile" dalle classi predefinite MATLAB, in particolare
le classi numeriche e di caratteri. A questo scopo è necessario definire delle proce•
dure di conversione come metodi interni alla classe. Iniziamo quindi a definire una
conversione fra polinomi e numeri (in doppia. precisione) che sia in un certo senso
duale rispetto alla creazione di polinomi: come il comando polynom trasforma un
vettore in un polinomio, il comando double convertirà il polinomio in un oggetto
in doppia precisione, ovvero il vettore dei coefficienti del polinomio stesso. Ecco
quindi il file alpolynom\\double. m
function c=double(p)
¼ Converte un oggetto di tipo polinomio
i. nel suo vettore dei coefficienti
c=p.c;

Mentre la conversione di un oggetto di tipo polinomio in numero è bano.le, la


conversione in caratteri (o stringhe) è più articolatu, e dipende da una scelta clj
progetto: uu a.pprocciopossibile è usare la. ra.ppreaentazlone0 scl'itta." del poli•
nomio, del tipo x3 - 2x + 5. Ci sono due cose eia considerare: in presenza di
coefficienti nulli la potenza corrispondente non è presente, e in presenza di coeffi-
cienti negativi il segno prima del coefficiente sarà un - . A tal fine scriviamo il file ..f
Qpolynom\char.m:
function s=char(p)
i. char(p) \'e la rappresentazione in stringa
Y. del polinomio p
if all(p.c==O)
e='O';
else
d=length(p.c)-1;
e=[] i
f or a::p. c' ;
if a-=o;
if ~isempty(s)
if a>O
s= [s ' + '];
else
e=(s ' - '] i
a=-a;
' ,
<
.
'
••.

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

e si otterrà il risultato voluto.


Dal punto di vista grafico però c'è ancora una diff renza fra il nostro oggetto
e un normale oggetto MATLAB: quando scriviamo

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

Per inciso, la prima istruzione serve a cancellare dalla memoria la definizione di


classe, obbligando MATLAB a ricompilare i metodi .

J'
146 CAPITOLO B. OGGETII IN MATLAB

8.2 Ridefinizion di operatori e funzioni


Fino a questo punto ci siamo limitati sostanzialmente a crea.reuna struttura adat-
ta per gli oggetti di tipo polinomio. In questo paragrafo iniziamo a definire le
operazioni. Una delle caratteristiche che hanno reso celebre MATLABè la sua
semplicità nel lavorare con matrici e scalari: ad esempio per sommare due matrici
basta usare il +, come faremmo naturalmente con gli scalari. È possibile ottenere
questa stesea semplicità sui polinomi? La risposta è sl, basta ridefinire gli opera,. '
tori aritmetici (in Inglese ai parla di overloadingdegli operatori). Ad esempio, il +
si ridefiniscecon la.function plus. m:
tunction r=plus(p,q)
%implementa p+q per i polinomi
p=polynom(p);
q"'polynom(q);
k~length(q.c)-length(p.c);
r•polynom([zeroa(k,1); p.c]+[zeroe(-k,1); q,c])i
I

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

Oltre agli operatori , è possibile ridefinire funzioni: ecco la ridefinizione di roots,


di polyval e di plot
8.2. RIDEFINIZIONE DI OPERATORI E FUNZIONI 147

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

-1.5 -1 -0.S o 0.5 1.5 2

Figura 8.1: Ridefinizione di plot.

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

8.3 Oggetti matriciali


: ,,!

Completata la definizione e descrizione della classe "polinomi" vediamo ora come


estenderla per definire una classe di matrici di polinomi. In particolare, definire-:
mo una matrice di polinomi come un oggetto che contiene polinomi acalarijanche
se probabilmente una soluzione migliore si avrebbe riprogettando la classe dei
polinomi, noi ci limiteremo a usare la classe già definita come elemento base, sia
per chiarezza didattica, sia perché uno dei punti di forza della programmazione
a oggetti consiste nella possibilità di riutilizzare classi sviluppate in precedenza.
In analogia a come lavora MATLAB su scalari e matrici numeriche, vorremmo
inoltre prevedere una classe che lavori indifferentemente su matrici di polinomi
o polinomi scalari. A questo scopo rinominiamo la classe precedente "polyscal"
(ovvero polinomi scalari) per lasciare libera la definizione di "polynom,, per ma-
8.3. OGGETTI MATRICIALI 149
l
trici polinomiali. Per fare ciò è sufficiente rinominare la directory ~polynom come
Opolyscal. Quindi occorre cambiare poche cose nei metodi: ad esempio il file
l
costruttore si chiamerà ora polysca.l.m e sarà

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

inoltre cambieranno le prime due a l'ultima istruzioni eseguibili di plus .m

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

Sono possibili con questo costruttore i seguenti funzionamenti:

1. p=polynomcrea una. matrice polinomiale vuota;

2. p=polynom(a), funziona in tre diversi modi:

• se a è già una matrice polinomiale restituisce la matrice stessa;


• se invece è una matrice di celle di polinomi scalari crea una matrice di
polinomi in cui il campo . pol contenga. la. matrice di polinomi ste88i; ·
• se infine a è un polinomio scalare, lo memorizza nel campo . pol (in
questo modo si ha la compatibilità con la classe polysca-l-). .;

3. se sono presenti più argomenti di ingresso, i primi due vengono interpr~


tati come dimensioni di riga e colonna, gli altri come polinomi scalari da
memorizzare (per righe); ad esempio l'istruzione A=polynom(2, 2 ,p ,q,r, a)
memorizzi la matrice
A(x) = ( p(x) q(x) )
r(x) s(x)

Il passo successivo è creare la funzione display: ottenere una rappresentazione


come quella presentata da MATLAB sulle matrici numeriche è piuttosto complesso,
e può in alcuni casi essere un problema mal posto in un ambito in cui un polinomio
può estendersi per un'intera riga, per cui adottiamo la soluzione più semplice:
8.3. OGGETTI lvIATRICIALI 151
I.
function display(p)
diep(' ')
disp([inputname(1),' = '])
disp(' ')
[row,col)=size(p.pol);
if (row>1)l(col>1)
for r=l:row
for c=1:col
disp([inputname(1),'(',num2str(r), ...
',',num2etr(c),') a ',char(p.pol{r,c})])
end
end
else
diep((inputnarne(1),' = ',char(p.pol{1})])
end
diap (' ');
a questo punto l'istruzione
p-polynom(2, 2, (1 1) , (1 3] , (1 2 3] , [1 4))
fornisce sullo scherno
p •

p(i,1) =X+ 1
p(1,2) =X+ 3
p(2,1) = xA2 + 2•x + 3
p(2,2) =X+ 4

ora aggiungiamogli operatori algebrici; per controllare però la congruenza dimen•


siona.ledobbiamo conoscerele dimensioni della matrice. 11semplice comando aize
applicato alla.matrice polinomialenon bSBterebbe,perché ogni matrice polinomiale
è un singolo oggetto, quindi ridefiniamo il comando Bize con:
function [m,n]=eize(p)
¼ Dimensioni di una matrice polinomiale
(m,n]=size(p.pol);
e ora gli operatori algebrici
functions=plus(p,q)
p=polynom(p);
q=polynom(q);
[mp,np]=size(p);
[mq,nq]=size(q);
if (mp-•mq) I (np-•nq)
~~i•

152 CAPITOLO B. OGGETTI IN MATLAB1 :'

error('Matrix dimenaion must agree 1


)

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

Per inciso, è ora evidente la differenza fra le funzioni times e mtirnes.


Anche l'operatore subsref va ridefinito in modo che sia possibile accedere con
p (h, k) al polinomio di posto (h, k), come nel normale funzionamentomatriciale:
function b=subsref(a,s)
switch s.type
case I O'
row=s. aubs{ 1};
col=s.subs{2};
bQa.pol{row,col};
otherwise
error('Indicì errati');
end
Introduciamo ora la funzione aubsasgn, che serve a realizzare la funzione duale
della precedente, ovvero l'assegnazione di un elemento di una matrice polinomiale:
function a=subsasgn(a,s,b)
switch s.type
case 'O'
row=s. subs{l};
col=s.subs{2};
ìf isa(b,'polyscal')
a.pol{row,col}=b;
elseif isa(b,'polynom')
a.pol{row,col}=b.pol{l,1};
else
error('Si possono assegnare solo polinomi');
end
[rw I cl] =size (a);
for r=1:rw,
for c=l:cl,
154 CAPITOLO 8. OGGETTI IN 1\tIATLA~.

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) ~ :,

Completiamo questo argomento presentando altre due utili funzioni, hotzcat


e vertcat, che permettono rispettivamente le giustapposizioni in orizzontale e
verticale delle matrici, analogamente ai comandi standard C=[A, B] e C=[A; B].
Una possibilità da contemplare semp,·eesplicitamente (e cui, purtroppo i ma-
nuali non [apno cenno) è il caso in cui non ci sia nulla da giustapporre, come
nel caso C=[À]. In questo caso la funzione deve restituire semplicemente il auQ;
argomento. Ecco quindi le due funzioni:

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

I ' expression must bave the same number of colwnns. 1 ])


end
App•[p.pol; q.pol];
end
s=polynom(App);

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

ils pari -aient

Analogamente, per "io finivo" avremo "je finissais", ecc.


Per i tempi composti con un ausiliare (avoir o etre a seconda dei caBi) la

I struttura è sempre la stessa: ausiliare al presente (per il passato prossimo) b


all'imperfetto (trapassato prossimo) o al passato remoto (trapassato remoto) o al
futuro (futuro anteriore) + participio passato del verbo. Per tutti questi tempi
quindi le uniche informazioni necessarie sono il participio passato e quale dei due
ausiliari è necessario. Ecco perché memorizzeremo anche il participio passato. Per
la costruzione degli ausiliari basterà poi definire due nuove classi, ma di questo
non ci occuperemo, lasciandolo come esercizio per il lettore. ·. :
Siamo ora pronti a iniziare l'analisi della struttura dati. Il fatto che ci siano
forti specificità nel presente ci spinge ad adottare due diverse classi, una per ogni
coniugazione. D'altra pa.rte, la presenza di tempi che si costruiscono nella stessi3,
8.4. EREDITARIETÀ 157

maniera renderebbe ridondante il trattarli separatamente in ogni classe, sarebbe


preferibile avere una "superclasse 11 di impiego generale in questi casi.
Possiamo pensare allora alla creazione di una superclaase "verbo" e due sotto. ~I
•'.
I
I
'l
I
classi figlie "prima" e "seconda 11 , una per ogni coniugazione.
1
I
Ecco allora come implementiamo il costruttore di classe nella directory ©verbo:

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

Si noti che un oggetto della singola coniugazione memorizza solo il significato


(che dal punto di vieta computazionale è inessenziale)i e tutti i dati significativi
sono passati alla sua classe genitore verbo. Inoltre abbiamo due particolarità: un
oggetto della classe verbo non sarà mai istaniziato dall'esterno, ma. solo da oggetti
delle sottoclassi; inoltre l'ultima istruzione del file prima. m ci presenta un nuovo
uso dell'istruzione class, con tre argomenti, di cui l'ultimo serve a definire la
classe genitore.
Si noti inoltre che secondo quanto detto dalle regole grammaticali la radice del
futuro è il l'infinito del verbo (in questo caso sembrerebbe inutile fornirlo come
argomento di ingresso, ma si ricordi che se Pinfinito termina con "e" questa vocale
va eliminata nella formazione del futuro, e inoltre così abbiamo maggiore generalità
per potere estendere l'esempio a diver se coniugazioni).
il58
CAPITOLO 8. OGGETTI IN MATLAB

In generale i costruttori delle altre coniugazioni, in altrettante classi (nelle .'.


directory Clseconda, Oterza e Clquarta rispettivamente) sarebbero simili; comé }
già detto, limitiamoci solo alla seconda ~~

function v=seconda(verb,significato)
v.aignificato=significato;
radice•verb(1:(length(verb)-2));
a=verbo(verb,radice,[radice 'i']);
~•clase(v,'seconda' ,a);

Passiamo ora al metodo display. Una. prima soluzione potrebbe essere la


costruzione di quattro metodi, uno per ogni classe.
Una diversa. e più efficace possibilità è la seguente: non ai usi alcun metodo
display nelle sottoclassi e solo nella directory Gverbo si scriva la seguente funzione +
display:
function display(v)
disp(' ');
disp([inputname(1),' = verbo di ',clasa(v), ...
' coniugazione']);
diap(' ');
v=etruct(v);
sv=struct(v.verbo);
disp([upper(sv.infinito),' significato: ',v.eignificato]):
disp(' ');
disp(['Radicale 2 •,ev.radic]);
disp(['Participio Passato= 1 ,ev.part_paae]);

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') .
,·•

sullo sch'ormo appare


•1

par• verbo di prima coniugazione .i


8.4. EREDITARIETÀ 159

PARLER significato: parlare


Radicale= parl Participio Passato= parlé

A questo punto l'esempio potrebbe arrestarsi, ma per convincerci dell'impor-


tanza. dell'ereditarietà, vediamo altre possibilità. In particola.re iniziamo a co- ! I
·'
niugare i verbi. Stante la variabilità del presente dell'indicativo, ogni sottoclasse I
conterrà un suo metodo per il presente, mentre gli altri tempi saranno coniugati I
;

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.

function viscon(coniug,tempo) ' ' lì


disp(' '); .:J j
disp(tempo)i :.:;1
-., I
disp(' ')i
disp(['je ',coniug.e{l}]);
disp(['tu ',coniug.s{2}])j
1 , coniug. s{3}])
disp(( 1 il / elle i
disp ( ['nous ',coniug.p{l}]);
disp( ['vous 1 ,coniug.p{2}]);
disp ( (' ils / elles 1 ,coniug.p{3}]);
disp(' J); I
. ''4
··'i \ ♦I
Va detto che la scelta di definire coniuga come una function è dettata solo da;,i
esigenzedidattiche in quanto serve a mostra.re l'uso di funzioni generiche su oggetti :~
definiti dall'utente . • '.J
f ,41 .,. ,.,

Il risultato di

presente(par)

sarà
.....
_,,
;)Clf,
Indicativo presente : :·,10
i i, lr t
je parle • • r.>l

tu parles \

il/elle parle ,. '!-


nous parlons .h· l! 1
... : •
vous parlez :
.
.• .....
... .,
ils/elles parlent
...
r,
a.ne=
... t
..
s: {3x1 cell} '?~
·•.-;:-.
-
p: {3x1 cell} :·,'"i$ . ,/,."lo


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

Funzioni matemati che

In MATLABc'è una classe di operatori in grado di risolvere numericamente pro-


blemi di analisi matematica. Essi lavorano su funzioni piuttosto che su matrici, e
possono essere divisi in tre classi:
• derivazioni e integrazioni numeriche;
• ottimizzazione e tratta.mento di equazioni non lineari;
• soluzione di equazioni differenziali.
Per prima cosa quindi dobbiamo vedere come si definiscono le funzioni matemati-
che in MATLAB.La maniera più ovvia è quella di creare una function: riferiamoci
alla funzione predefinita
1 1
humps(x) = (x - 0.3)2 + 0.01 + (x - 0.9)2 + 0.04 - 6

il cui function file è


function y = hwnps(x)
y=l./((x-.3), 2+.O1)+1./((x-.9),
4 4
2+.04)-6;

ed il cui grafico, riportato in Figura 9.1, si ottiene con:


fplot(~hwnps,[-1 2))
Si noti che in MATLAB dalla versione 6 in poi si usa un puntatore (handle)
alla funzione, nella forma ©nomeFunzioneper pa.'lsarefunzioni a funzioni.
In generale, il function file che definiscela funzioneda passare come argomento
a questi operatori deve essere in grado di restituire vettori, ed è per questo che
nella scrittura del file HUMPS.M ai è fa.tto largo uso degli opera.tori con il punto,
che agiscono elemento per elemento (vedi Paragrafo 3.1). Una seconda.maniera.è
definire nella Command Window una funzione inline:

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

Figura 9.1: Grafico di una funzione con fplot.

t•inline( 1 1./((x-.3),~2+.01)+1./((x-.9).~2+.04)-6 1
);

permette di valutare sia :t(3) che fplot (f, [ -1 2]).

9.1 Derivazione e integrazione


Per ottenere la. derivo.te. MATLAB dispone dell'operatore differenza prime. diff,
che esegue la differenza fra gli elementi adiacenti di un vettore: diff(x) = [x(2) -·
x(l), x(3) - x(2), ... , x(n) - x(n - 1)1, quindi un'approssimazione al primo ordine
della derivata di y=f(x) si ottiene con
dy=diff(y)./diff(x);
Si noti che il vettore dy è lungo n - 1.
Se l'argomento di di:f f è una matrice, le differenze sono calcolate colonna per
colonna. Nella forma diff (x. n) esegue la differenza n-esima (si ricordi che l'op-
eratore differenza n-esima è definito ricorsivamente come LÌn(x) = Li1(An-l (x )) ):
Per funzioni di due variabili è possibile usare l'operatore gradient, nella forma
[dZx,dZy]=gradient(Z,dX,dY);
Z è una matrice che contiene i valori della funzione da derivare, mentre dX e
dY possono essere scalari, nel qual caso definiscono la spaziatura (uniforme) fra i

.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

E possibilevariareIl massimoerrorerelativocon un quarto para.metrotol e infinevisualizzare.


l l

'
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

fornisce: xzl = -0.1316, xz2 = 1.2995.


È possibile definire un valore di tolleranza tramite un vettore di opzioni come
terzo parametro e informazioni sull'evoluzione della soluzione con un quarto para- -
metro. Il vettore si definisce tramite il comando opt imset che crea una struttura
i cui campi definiscono i parametri di ottimizzazionei alcuni di questi campi sonoi

• Display se è settato a I iter I mostra tutte le iterazioni , se a I f inal ' solo


l'iterazione finale, se a 'oU I non mostra nulla;

• TolX definisce la tolleranza per x;


li • TolFun definisce la tolleranza in base al valore della funzione;

• Max! ter definisce il massimo numero di iterazioni;

• MaxFunEvals definisce il massimo numero di valutazioni delle funzioni.

Il comando optimset si usa nella forma


1 1
opzioni=optimset('Diaplay 1 iter');

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

dove i parametri Pi sono passati alla funzione nomeFunzione come argomenti; se


per esempio nomeFunzione è f un, fmin in ogni chiamata che esegue per valutare
fun usa la sintassi fun (x, pl, p2, ... ) .
Esempio:

fmin(«lcos,3,4)

fornisce un valore approssimato di 1r.


Per funzioni di più variabili si usa il comando f minsearch, con la sintassi

x=fminsearch(«lnomeFunzione,xO);

dove xo è il punto in prossimità del quale si cerca il minimo locale. Ad esempio,


se
9.3. EQUAZIONI DIFFERENZIALI ORDINARIE 167

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

Anche in questo caso è possibile usare un vettore di opzioni.

9.3 Equazioni differenziali ordinarie


,I
9.3.1 Problemi con condizioni iniziali assegnate
MATLAB ha sette metodi per risolvere equazioni differenziali ordinarie:

1. ode23 usa il metodo di Runge-Kutta del 2°-3° ordine:

2. ode46 usa. il metodo di Runge-Kutta del 4°-5° ordine:


..
3. ode113 usa il metodo di Aclams; 'r

4. ode15s usa derivazioni numeriche e derivazioni all'indietro (metodo di Gear);

5. ode23s usa il metodo di Rosenbrock;

6. ode23t usa regole trapeizoidali;

7. ode23tb usa il metodo TR-BDF2

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

di un comportamento debolmente stiff, e se l'accuratezza non è cruciale, ode23 può


essere più appropriato. Infine , se invece i requisiti di tolleranza sono più stringenti,
può essere preferibile usar e ode113.
I'· '
Gli altri risolu tori sono orientati a problemi stiff; ode15s è sicuramente il primo
da prova.re se si sospetta che il problema potrebbe essere stiff (magari perché ode45
• I non è riuscito a. integrare); ode23s e ode23tb possono funzionare meglio nel caso !
i:
)
I
I.
.t
168 CAPITOLO 9. FUNZIONIAIIATElvIATICHE

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

±2 = x2(l - xi) - .:r1


Creiamo il f1.mctìon-filevdpol. m:

tunction xpunto=vdpol(t,x) '.I


xpunto=[x(2)iX(2).•(1-x(1).~2)-x(l)Ji

ed ora simuliamo l'equazione differenziale nell 1intervallo O 5 t =:;20, con condizione


iniziale x(O) = (O,2):

[t,x]=ode46(Cvdpol,[O 20] ,[0;2]);


plot(t,x(:, 1), '-' ,t,y(: ,2), '--')
legend( 1 x_1 1 , 1 x_2 1 );
xlabel('Tempo [s] 1 );
ylabel( 1 Soluzione, x_l, x_2');
title('Equazione di van der Pol');
I.
9.3. EQUAZIONI DIFFERENZIALI ORDINARIE 169

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.

Il risultato è riportato in Figura 9.2.


Poiché la fun2ione da integrare ammette solo come parametri t e x, altri
I '1
I
parametri da fornirle (ingressi , coefficienti parametrizzati, ecc.) possono essere
scambiati come variabili globali (si veda il Paragrafo 7.3). \
Come esempio consideriamo una forma più generale dell'equazione <livan der
~
l
Pol
x + a(x 2 - b):i:+ x = O ) '
dove a e b sono due para.metri. Il function file corrispondente è I.
tunction xpunto•vdpol1(t.x)
global ab
xpuntoa(x(2);a•x(2).•(b-x(1).-2)-x(1)];
e la corrispondente chiamata è

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

(t,x]=ode16s(Cmotore,[O 60] ,[0;0]);


figure (1), plot ( t, x (: , 1) , ' - ' , t, x (: , 2), ' -- 1 )
legend('velocit \omega' ,'corrente i'),xlabel('Tempo [s]')
9.3. EQUAZIONI DIFFERENZIALI ORDINARIE 171

,0,------.----,-- ----,.---=
=~=====::!:=:======i
9

- velocità01
a - - correnlaI

s 1•

3 .· I
I I
I 1
2 '·

1 ---------------------- - --- -- --------


'
o.____ __..,
___ _.____ .,____ _, ___ __._
___ __,
o 10 20 30 40 so
.
I 1· I

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)

per calcolare quanto tempo richiede l'esecuzione, e si ripeta la stessa operazione


con ode45. Sul computer di chi scrive i risultati sono 0.06s per ode15s contrn i
ben 34.33s di ode45 (oltre 500 volte più lenta!).

9.3.2 Problemi alla frontiera


Questo paragrafo è necessariamente più breve e meno esaustivo del pl'ecedente, dal
momento che il problema trattato è piuttosto specialistico, quindi lo si affronterà
in maniera solo esemplificativa., essendo impossibile scendere in dettaglio.
Il risolutore per problemi ordinari con condizioni al contorno è bvp4c, che ; I
richiede in ingresso tre da.ti: il file che descrive la funzione da. integrare, quello che I···'··. '. .
l
r, iI •
I•

'I'' l.
l ':
172 CAPITOLO 9. FUNZIONIMATEMATICHE

descrive le condizioni al contorno e una struttura che descrive i valori di tentativo


iniziale.
Vediamo come si risolve il problema
d2y
dx 2 - y = -x, O< x < 1, y(O) = O,y(l) = -1

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

e creiamo la struttura solinit;


solinit•bvpinit(linDpace(0,1,10),~exinit);
Il primo argomento è l'intervallo della variabile indipendente x E [01 1]1 il se-
condo la funzione che definisce l'inizializzazione. Infine risolviamo il problema
con
sol=bvp4c(~exode,Oexbc,solinit);
La soluzione così trovata è ancora una struttura, che va "spacchettatali con il
comando bvpval:
xint=linspace(0,1);
Sxint=bvpval(sol,xint);
plot(xint,Sxint(l,:))
9.4. ESERCIZI 173

-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

Figura 9.4: Soluzionedell'equazione differenzialecon condizioni al contorno.

come si vede, si è definito il vettore su cui valutare la funzione e poi si è usato il


comando bvpval. L'ultimo comando produce il grafico in Figura 9.4.
Si noti che se anche il lavorio iniziale è consistente, a questo punto possia-
mo cambiare facilmente i parametri: ad esempio, per definire una condizione al
contorno generica y(O) = a, y(l) = b basta modificareexbc come segue
tunction res=exbc(ya,yb)
global a b
res=(ya(1) - a;yb(1)-b];
e modificare dalla Command Window i parametri. Una possibile esecuzioneporta
ai risultati in Figura 9.5

9.4 Esercizi
Esercizio 9.1 Calcolarele radici dell'equazione
2
:z: - 3sinx +O.I= O

Esercizio 9.2 Nel modello economico semplificato di mercato perfettamente con-


correnzialegrande rilievo assumono le curve di domanda e offerta, che in ascissa
hanno la quantità di bene prodotto o richiesto in un prefissato periodo di tempo
,,,
It·.
. I
\.

1' '
174 CAPITOLO 9. FUNZIONI MATEMATICHE

0.2r-:-:--.---,-----,--- -r----,----,----. - --r;==::c:==~


- 1-0,b-O
- - a-0.1, b,,()
· · · · a-0.2, b,,()

0.1 ------~---------~-- ............


' ......
' ...
' ' ' .·..
' ' ·.·.
' ·..
' '·.·.
,·..
,·.,..
~

0.8 0.7 0.8 o,g

Figura 9.5: Differenti soluzioni delPequazione differenziale.

e in ordinata il prezzo unitario del bene. L 'inter3ezione delle curve detennina il


prezzo di equilibrio della merce. Assumendo i seguenti dati per la produzione e
richiesta del grano ,n un ipotetico mercato
Prezzo Domanda Offerta
{$/staio} (migliaia di stai/giorno) {migliaia di stai/ giorno)
1.25 350 190
1.40 330 220
1.50 320 250
1.60 310 270
1.75 295 300
1.90 280 320
2.00 245 350
si calcoli il prezzo di equilibrio e si traccino le le curve di domanda e di offerta
utilizzando almeno 30 punti.
Suggerimento. Si costruisca una ftmction che esprime la differenza
fra domanda e offerta e 3e ne cerchi lo zero, facendo le opportune
con3iderazionisul problema dell'estrapolazione.
Esercizio 9.3 Calcolareil minimo della funzione
f (x) = sin x 2 tanh x cosh 3x
9.4. ESERCIZI 175

nell'interoallo x E [3,3.35).

Esercizio 9.4 Calcolare·il minimo della funzione

f(x, 11)= e:-11 + x2 + y2 ..


.,

e tracciarne il diagramma intorno al valore calcolato.

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 .

Esercizio 9.6 Si calcoli il minimo della funzione ..


• I
.f 1
!
. r.
I
Esercizio 9. 7 Le equazioni di Volterra-Lotka desc1-ivonoun modello semplificato
dell'evoluzione di due specie in competizione fra loro ( è detto sovente "modello
preda-predatore"):

x = (a - by)x
il - (cx-d)y

Si studi la soluzione di queste equazioni a partire doi parametri nominali a = 2.7,


b = 0.1, e= 1 ed= 3.

Esercizio 9.8 Il modello semplificato di un 8atellite fa orbita circolare intorno a


un pianeta è

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

Si calcolino i punti fissi delle funzioni

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

Simulink è l'acronimo delle parole Simulation e Link (simulazione - collegamento).


Il termine richiama immediatamente l'idea di simulare,cioè di riprodurre In modo
11
e.rtificiale" quello che sta accadendo o che potrebbe accadere nel mondo reo.le.
Utilizza.re Simulink è estremam ente semplice anche per chi ha poca dimest ichezza
con MATLAB (anche se già per un uso non da neofiti, la conoscenza di MATLAB
è fondamentale: Simulink è, in realtà, un toolbox MATLAB e non un pacchett o
toutcourt).
Volendo studiare con Simulink un sistema, è sufficiente disegnarne il relativo
schema collega.ndo1 opportunamen te i vari blocchiche realizzano le diverse funzioni
elementari e quindi lancia.re la simulazione.
Prima di addentra.ci nello studio dell'ambiente è opportuno, però, soffermarsi • ; i

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

10.1 Costruzione di uno schema Simulink


Il modo più semplice ed immediato per iniziare a. padroneggiare uno strumen-
to come Slmulink è quello di usarlo. Iniziamo, quindi, lo studio dell'ambiente
affrontando un primo semplice problema .
Consideriamo il sistema massa-molla rappresentato in Figura 10.1 il cui mod-
ello è descritto dalla seguente equazione differenziale del secondo ordine

y
I .
: .

u
m=l

. ''

.. Figura 10.1: Sistema massa-molla .


'i·':
'.

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

Una rappresentazione di tale equazion e tramite uno schema a blocchi 2 è raffig-


urata in Figura 10.2.

accelernzìone velocità posizione

Ingressoesterno
(forzaupplicuto)
-
Figura 10.2: Schema a blocchi del sistema massa-molla..

In tale schema i blocchi rappresentano operazioni che vengono compiute sui


segna.liln ingresso(le frecce entranti) per produrre i 11egnalldi uscita (le frecco
uscenti).
La rappresentazione del sistema in Simulink è quella di Figura 10.3. Dal con-
fronto dei due diagrammi, si nota che le differenze sono minime. Simulink, infatti,
utilizza una rappresentazione dei sistemi che ricalca molto la tecnica dei diagrammi
a blocchi.

1 1
s s
Integrato, lntegrator1

Figura 10.3: Schema Simulink del sistema massa-molla.

Vediamo come realizzare lo schema di Figura 10.3.


Dal prompt di MATLAB digitare Simulink comparirà in alto a sinistra una
finestra denominata Simulink Library Browser simile a quella mostrata nella Figu-
ra 10.4 (lo stesso risultato si ottiene premendo il penultimo bottone della toolbar
di MATLAB ). Ognun a delle voci presenti in questa finestra rappresenta una par-
ticolare libreria di blocchi funzionali. La presenza di un + indica che l'oggetto
può essere espanso nei nei suoi costituenti di livello inferiore che compaiono nella
colonna di destra. Espandendo completamente le varie librerie, nella colonna di
destra compariranno i blocchi funzionali. Nella parte alta della figura è riporta
una breve descrizione dell'oggetto evidenziato.
2 La rappresentazione a blocchi è una tecnica. molto usata nell'ambito della Teoria dei Sistemi .
182 CAPITOLO 10. ELE!VIENTI FONDAMENTALI

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'"..,·-::---·
·. _.....,.

Figura. 10.4: Librerie di Simulink.

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

Un clic sul bottone OK rende efficaci le modifiche ai parametri e chiude la finestra.


La linea verticale I serve a specificare la posizione relativa delle porte di ingresso
del blocco.

10.2 Analisi dello schema .;


Un metodo per lo studio di un sistema è quello di sollecitarlo opportunamente
ed analizzarne il comportamento. Quindi bisogna dotare il nostro schema di un:
opportuno segnale di ingresso. La libreria Sources contiene una vasta gamma ~i
generatori di segnali; fra essi selezioniamo il blocco Signal Generator(Generatore
di Segnale) e collochiamolo come ingresso collegandolo alla linea sospesa entrant~
nel blocco sommatore, Facendo un doppio clic sul Signa/ Generator,si accede all~
relativa finestra dei parametri. Si ponga il valore del campo Frequencya 2 e iÌ
campo Units sul valore rad/sec. .i
Una volta definito l'ingresso occorre individuare i punti di "lettura", ovvem
le grandezze il cui andamento nel tempo è sìgnificativo. Nella libreria Sinks sonÒ •
contenuti aicuni blocchi di "uscita,, ( "sink" è la traduzione inglese di pozzo). Cql;
leghiamo il blocco Scope all'uscita del secondo integratore. Lo schema dovrebbe
apparire come quello di Figura 10.5. Da un punto di vista fisico la grandezza scelt~
rappresenta lo spostamento della massa rispetto alla posizione di equilibrio, eia~
· ~
la y(t). .\

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

A.us propt rtits dello Se


(1ramllebottonedesl/o del I ' I

Figura 10.6: Scope.

risultato è ottenibile usando la combinazione di tasti CTRL-T). Sul quadrante del


nostro oscilloscopio vedremo disegnarsi l'andamento della y(t) 1 mentre la scritta
nell'angolo in basso a sinistra. nella finestra con lo schema passerà da "Ready" a
"Running" e comparirà l'indicazione del valore del tempo che avanza. Un segnale
acustico indica la fine della simulazione.
Se si è interessati all'andamento di un'altra grandezza, ad esempio la velocità
della massa, che è l'uscita del primo integratore, si può collocare anche lì uno
Scope.
Per interrompere anticipatamente la simulazione bisogna premere il tasto di
stop della toolbar. Si noti che durante la simulazione il tasto di play si è trasfor- ·
mato nel tasto di pause Il che consente di sospendere per poi riprendere la simula-
zione.
La durata della simulazione è definita, come verrà evidenziato a pag. 223, tramite i campi
Start Time e Stop Time presenti nel sottomenu Parameters del menu Simulation.
In alcune situazioni può risultare utile trasportare i risultati delle simulazioni
in MATLAB per poterli memorizzare e studiare attraverso le appropriate funzioni
di MATLAB. Nella finestra delle Properties dello Scope (a cui si accede tramite
il penultimo bottone della toolbar) vi è la pagina Data history che consente, atti-
vando l'opportuno flag1 di trasportare in MATLAB al termine della simulazione i
valori assunti dalla grandezza visualizzata dallo Scope,specificando anche il nome
della variabile utilizzata per la memorizzazione. Una soluzione alternativa è quella
di utilizzare il blocco To Workspacedel gruppo Sinks (vedi pag. 199).
\
186 CAPITOLO 10. ELE:MENTI FONDA.NIENTALI

10.3 Navigare in Simulink


La finestra Simulink Librnry Browser consente cli navigare all'interno delle librerie
di blocchi funzionali di Simulink. Il bottone sinistro del mouse consente di espan-
dere i vari livelli fino ad arrivare ai blocchi funzionali. Nella parte in alto della
finestra è riportata una breve descrizione dell'oggetto selezionato.
Nel caso si conosca il nome (o parte del nome) di un blocco lo si può rintracciare
tramite la funzione Find. Il browser si posiziona. sul primo blocco il cui nome
contiene la stringa ricercata, per cercare il successivo è sufficiente premere il tasto
ENTER.
Se, all'interno del browser, si fa un clic con il bottone destro del mouse su
un blocco funzionale, viene richiamato un pop-up menu che consente di: invocare
l' HELPdel blocco, aprire la. finestra. dei parametri ed inserire il blocco all'interno di
uno schema Simulink. Operando su una libreria si ha la possibilità di espanderla.
Ali'interno del foglio di lavoro è sufficiente far permanere il cursore per pochi
secondi su un qualunque oggetto per far apparire una succinta descrizione dell'og-
getto e/o dei suoi parametri (per far apparire queste informazioni è necessario
avere dato un nome e salvato lo schema).

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.2 Modificareil modello descritto dall'equazione{10.1) e, conseguen-


temente, lo schema di Figura 10.3 considerandoanche la pn~senzadi attrito viscoso
con coefficiente di smorzamento unitario.
Suggerimento. La forza di attrito viscoso è proporzionale alla ve-
locità. In presenza di un coefficiente di attrito unitaf'io, questa forza
coincide con l'uscita del primo integratore (la velocitd appunto), che
a11dràconnessa quale terzo ingresso al bloccosommator·e (con segno
-).

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.

Suggerimento. Utilizzare il bloccoStep contenuto fra i blocchiSources.

Esercizio 10.4 Analizzare il sistema descritto nell'Esercizio 10.2 quando è sol-


lecitato con un'onda quadra di ampiezza unitaria e frequenza pari a 5 rad/s.

i
I
. '

'
10.4. ESERCIZI 187

Suggerimento. Utilizzare il bloccoSigna! Generator.

Esercizio 10.5 Se un sistema oscillante è soggettoad una /01·za addizionale anche


essa oscillatoria ma con una differente frequenza l 'u.jcita del sistema p1·esenteràil
fenomeno dei battimenti.
Considerareil seguente modello

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.

Esercizio 10. 6 Analizzare l'evoluzione del sistema descritto dall'equazione dif-


ferenziale
x = -x + sin(lOx) + sin(t)

Suggerimento. Il termine non lineare può essere costruito mediante


il bloccoFcn, presente nella libreriaF\mction & Tables, facendo doppio
clic sul bloccoe digitando nel campopammetri a in ( 1O•u).

Esercizio 1 O.7 Analizzare l'evoluzione del siatema deJcritto dall'equazione di/•


ferenziale x = -x + x 2 a partire dalla condizionex(O}= 0.2.
Suggerimento. Per inserire la condizione iniziale fare un doppio
clic sul bloccoIntegrator e digitare la condizione voluta. Il termine
quadraticopuò essere ottenuto utilizzando il bloccoProduct dei Math
collegandoentrambi gli ingressi del bloccocon lo.linea uscente dal blocco
integratore (che è la x). • i

' '

..
..
I j
, I

Ir
'.I
j.
♦:, !
I
! i
\ I'
i"
I''I t
Capitolo 11

Gli scherni Siniulink

Nel capitolo precedente abbiamo visto come realizzare nn semplice schema Simulink,
vediamo ora come supplire ad alcune delle più comuni imperfezioni:

• Blocchi non allineati: colloca.re il cursore sul blocco da spostare, se-


lezionarlo tramite il bottone sinistro del mouse (nei vertici del blocco ap-
paiono dei quadra.ti neri pieni) e tenendo premuto il bottone, spostarlo fino
a. farlo allineare ( alterna.ti va.mente si possono usare i tasti cursore).

• Cancellazione di un oggetto: selezionare l'oggetto e premere il tasto


DEL.

• Spostamento di una linea: selezionare la. linea da spostare e 1 senza ri-


lasciare il bottone sinistro, (il cursore assumerà la forma. di una croce con
frecce) spostare la linea nella posizione desiderata (notare che la linèa orig-
inale permane sullo schermo fino a quando non verrà rilasciato il bottone,
•!. ·',
mentre la linea in movimento è tratteggiata).

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

• Spostamento di un vertice di una linea: i vertici di una linea sono


evidenziati dai quadrati neri pieni che appaiono non appena si seleziona la
linea. Posizionando il cursore in prossimità di un vertice esso assumerà la
forma di un piccolo cerchio e, usando il bottone sinistro del mouse, è possibile
spostare il vertice.
l.
.l '
190 CAPITOLO 11. GLI SCHE!vII SIJvIULINI<
\
I • Creazione di un nuovo vertice all'interno di una linea: selezionare
I
( il punto ove si vuole inserire un nuovo vertice e premere il tasto SHIFT ed
il bottone sinistro del mouse. Se si spostano i vertici iniziale o finale della
spezzata si generano automaticamente nuovi vertici.

• Cancellazione di un vertice all'interno di una linea.: per cance llare un


vertice è sufficiente spootarlo fino a farlo coincidere con uno dei due vertici
contigui nella spezzata (non è possibile eliminare il vertice iniziale e finale
( della. linea).
I;
• Linee oblique: per disegnare una linea obliqua è necessario mantenere
premuto il tasto SHIFT durante il disegno della linea.

• Inserire un blocco in una linea: se si trascina un blocco e si rilascia


bottone del mouse quando il blocco interseca una linea, la linea verrà auto-
maticamente spezzata in due ed il blocco inserito in mezzo. Questo è molto
comodo tutte quelle volte che si devono inserire nuovi blocchi all'interno di
schemi già realizzati.

\ • Sconnessione di un blocco: per "staccare,, un blocco da uno schema,


\
lasciando inalterati i collegamenti, è sufficiente selezionare il blocco con il
t bottone sinistro del mouse e, tenendo premuto il tasto SHIFT, spostarlo.

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

11.2. USO DEL !vIOUSE 191

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.

11.2 Uso del mouse


Una delle prime cose che si notano lavorando con Simulink è che tutte le operazioni
fatte con il mouse sono 11sensibili al contesto", cioè premere un bottone del mouse
quando è evidenziato un blocco comporta, in genere, un'azione diversa dal caso in
cui l'oggetto evidenziato sia una linea. Anche se questo sulle prime può apparire
complesso, consente cli creare, correggere e modificare gli schemi con maggiore • ì
velocità e naturalezza. Le azioni che possono essere eseguite con il mouse in
modo indipendente dal tipo di "contesto11 sono quelle relative alla selezione, alla
cancellazione e allo spostamento di un oggetto.
Per selezionare un qualunque oggetto presente sullo schermo (linea, blocco,
ecc.) è sufficiente farvi un clic sopra con il bottone siniijtro del mouse; la corret,ta
esecuzione dell'operazione sarà evidenziata dall'apparire, nei vertici dell'oggetto
stesso, di piccoli quadratini neri (selezionando un oggeUo "testo 11 apparirà un
riquadro attorno al testo) .
Una volta selezionato un oggetto per cancellarlo è buffi.dente premere il tasto ..
DEL.
Per spostare un oggetto è necessario selezionarlo e, senza rilasciare il bottone
sinistro, trascinarlo nella posizione voluta (operazione di "clic and drop").
Tranne l'operazione di selezione, tutte le altre operazioni effettuate con il mouse
non sono effettive finché non viene rilasciato il bottone del mouse, anche se sullo
schermo lo schema sì adatta dinamicamente.
Un clic con il bottone destro del mouse richiama il pop-up menu relativo all'ele-
mento puntato dal mouse, mentre l'operazione di 11clic and drop" con tale tasto

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

• Lavorando sugli elementi di testo


11.2. USO DEL lvlOUSE 193

Bottone Sinistro: per selezionare e modificare il testo (il testo selezion-


ato è racchiuso in un rettangolo).
- Clic and drop con il Bottone Sinistro: per spostare il testo.
- Bottone Destro: richiama un pop-up menu che consente di effettuare le
operazioni di Cut & Paste e di modificare l'aspetto grafico del testo.
Clic and drop con il Bottone Destro: consente di duplica.re Pelemento
(si noti che accanto al cursore compare un segno+).
Doppio clic: permette di selezionare Pintero testo.
I .,
• Lavorando sullo schermo .,
- Bottone Sinistro: per indicare dove inserire il prossimo oggetto copiato
dal buffer e per de-selezionare qualunque oggetto. \ l.
• f !
j:
- Clic and drop con il Bottone Sinistro:
. I
• collocandosinei pressi di una porta di uscita non collegatapermette / I

di creare una linea uscente dal blocco. l:


* collocando8inei pressi di una porta di ingresso non collegataper-
mette di creare una linea entrante nel blocco.
• collocandosiin un punto vuoto dello schermo permette di attivare
la selezione multipla tramite finestra (sì veda più oltre).
Bottone Destro: richiama il pop-up menu che consente di eseguire op-
erazioni di Cut & Paste, di navigare all'interno dello schema Simulìnk)
modificare alcune delle caratteristiche di visualizzazione dello schema e
di lanciare/interrompere la simulazione.
- Clic and drop con il Bottone Destro: analogo al ca.so del bottone sini-
stro. Viene, però, richiamato automaticamente il pop-up menu.
- Doppio clic: consente di inserire un testo.
I pop-up menu che appaiono sono anche essi usensibili al contesto" riportando
solo quelle voci che sono applicabili all'oggetto evidenziante (in chiaro sono le voci
che nel particolare contesto non possono essere richiamate).

I Tutte le operazioni fino ad ora esaminate consentono di lavorare su singole


entità, infatti la selezione di un differente oggetto implica la de-selezione del primo.
A volte può essere utile selezionare un insieme di oggetti e operare sull'insieme
t
r
come se si operasse su un)unica entità: spostare tutti gli oggetti in modo che la
posizione relativa non vari, cancellarli tutti contemporaneamente, ecc. Per fare ciò
abbiamo due metodi che possono essere usati anche congiuntamente.
La prima modalità consiste nel selezionare i vari blocchi tenendo premuto il
tasto SHIFT (si può notare che tutti gli oggetti selezionati permarranno eviden-
ziati).
Ualtra consiste nel selezionare tutti gli oggetti presenti all'interno di una fines-
tra rettangolare. Se si effettua un clic and drop su un punto dello schermo ove
194 CAPITOLO 11. GLI SCHEMI SllvIULINI<
\

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.

11.3 Attributi dei blocchi


Ogni blocco ha. tre insiemi di attributi: i suoi Parametri, il suo Aspetto Grafico e
i le sue Proprietà.
La maggior parte dei comandi per modificare l'Aspetto Grafico di un bloc-
l co sono raggruppati nel menu Format (richiamabile anche dal pop-up menu del

I blocco).
•In particolare è possibile operare con le seguenti opzioni:

• Font per modificare il tipo di carattere, il corpo e le altre proprietà ti-


pografiche del testo che costituisce il nome del blocco.

• 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

\ Il nome di un blocco può essere modificato come un normale testo. Non è


I possibile attribuire a due blocchi lo stesso nome. Dare nomi appropriati ai
i singoli blocchi aumenta la legibilità e la chiarezza degli schemi. l\1-i
Negli schemi molto complessi la presenza dei nomi di tutti i blocchi potrebbe diminuir~ .
la leggibilità.dello schema. In questi ca.si è opportuno ricorrere alle opiìoni Flip Name e '·
H ,.de N ame. \ ·•;;; •:.:1
i ~~
Un 'ulteriore possibilità. per "titolare" i blocchi è quella di utilizza.re il campo Attribule.
J ·,

. " ...
':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

196 CAPITOLO 11. GLI SCHElvII SIMULINK

Block Paramelers : Sum E3


Descrizione
funzionale
del blocco

Parametri

Teseoperlo
HELP

Figura 11.1: Finestra Block Parameters del blocco sommatore.

\ • Tag: è un ulteriore campo commenti che viene salvato insieme al blocco.


l
I' • Open function: è una funzione MATLAB che viene richiamata ogni qual
volta si effettua un doppio clic sul blocco. È possibile inserire una qualunque
espressione MATLAB e fare riferimento a variabili presenti nel workspac~\
Inserendo una espressione in questo campo si inibisce l'accesso alla fìnest~~
Parametri. ·
• Attributes jormat string: consente di definire e formattare un eventuale testd
che apparirà al di sotto del nome del blocco. È possibile inserire sia una
stringa che riferimenti ai valori dei parametri del blocco (i cui nomi vaiiJ
no racchiusi fra %< e >). Ad esempio considerando un blocco lntegratof
l 1espresaione

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

Figura 11.2: Esempio di uso del campo Attribute format string.

11.4 Un esempio non lineare: modello di una nave


Simulink è intrinsecamente rivolto alla modellistica ed alla simulazione di sistemi
non lineari, vediamo come.
In Figura 11.3 è rappresentata la sezione trasversale di una nave, di cui si
vuole analizzare il movimento di rollio in presenza di un moto ondoso la cui azione
è modellabile con un momento sbandante.

\ u
l
l

Figura 11.3: Sezione trasversale della nave - Iùentificazione dei parametri.

L'angolo di rollio, cioè l'inclinazione della nave nel piano trasversale, è gover-
nato dalla seguente equazione differenziale non lineare del secondo ordine

Jjj = 11, - By+ P ( a - r ( 1 + ~tari2 y))


sin y (11.1)

dove u è il momento sbandante a cui è soggetta la nave. I parametri caratteristici


per una nave porta-container di medio cabotaggio sono: ..,
\i
I
I I
198 CAPITOLO 11. GLI SCHEMI SIMULINK .
\
I J 0.62 · lOlj kg m s:t/rad momento d 'inerzia della nave
ì p 10' kg dislocamento della nave
B 0.49 · 10' kg m s/rad smorzamento idrodinamico
r 4.95 m raggio metacentrico trasv ersal e
a 4 m quot a del baricentro
\
li modello Simulink è rappresentato in Figura 11.4. Per realizzarlo oltre ai
blocchi già esaminati nei paragrafi precedenti, si è usato il blocco Fc11della libreria
.Punction& Tables che implementa una generica funzione non lineare (si veda il
Paragrafo 11.7 a pa.g. 205).

simin
slmoul
From
Worlc5pace
lntegrator lntegrator1 To Workspace

sln(u( 1))"(r"(1-0.5'tan(u{1 ))"2)-a )' P/J

Fcn

Fignra 11.4: Modello Simulink della nave.

Si è inserita l'etichetta rollio alla variabile uscent e dal secondo integratore , si


è usato quale ingresso al sistema il blocco From Workspace e per l'uscita il blocco
1'oWorkspace.Il blocco From Workspaceconsente di considerare quale ingresso al
sistema un segnale la cui forma è definita in una matrice MATLAB, mentre il
blocco To Workspaceconsente di memorizzare i valori delle grandezze di interesse
\
in variabili MATLAB.
Una prima cosa da notare è che la costruzione dello schema Simulink di que-
\
I sto modello non lineare e di quello massa-molla presentato precedentemente non
differiscono di molto. Questo è uno di pregi di Simulink: a prescindere dalle . ..
peculiaritità dei vari sistemi, l'impostazione di fondo dello schema è sempre la
stessa. .
l,
Un'ultima osservazione: uno schema a blocchi, come quello di Figura 11.4,
permette di avere una visione più diretta del fenomeno fisico che non la sola
....,
t '

equazione (11.1). Infatti guardando lo schema si evidenzia che il moto di rollio di


una nave è sost anzialmente quello di un corpo soggetto ad attrito viscoso dovuto ~ ....
,·1.\i~,,
,
alla presenza dell'acqua (la reazione lineare) a cui va ad aggiungersi un'ulteriore -~~ft
.r
. :i .,
·,.l'.""i
'
forza funzione dell'angolo di rollio (reazione non lineare) dovuta essenzialmente ·~j.'i f.
i'· ..,~'
,;.(;1.,
;.
all'interazione fra la forza di gravità e la spinta. idrostatica . ·
Come accennato precedentemente nello schema di Figura 11.4 sono presenti ,:--~,~
;.
•$•I

dei blocchi di ingresso ed uscita che consentono di trasferire dati da MATLAB a


,,;;\
•i},:,"
;,~f~~~
.,' ,
i~·-}:

.I
11.5. SINKS - BLOCCHI DI USCITA 199

Simulink e viceversa. Questa possibilità rende Simulink estremamente flessibile,

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'

pari a u(t) = 3 sin(t) + ½sin(0.3 t) si può definire la seguente variabile in MATLAB


I
I
(una matrice di due colonne, di cui la prima rappresenta il tempo e la seconda i
corrispondenti valori assunti dal segnale di ingresso)
!!
1, t=0:0.1:10;
simin=(t' ,3•ein(t')+0.5•ein(0.3•t')];
I'
Dopo aver effettuato la simulazione, nel workspace di MATLAB sarà. presente
anche la variabile simout (l'angolo di rollio della nave) con la seguente struttura
simout. time=(]
eimout.blockName='nave/To Workspace'
simout.eignals.valuee• (61x1 double]
simin.eignale.dimensions=1
eimout.signals.label= 1
rollio 1

dove la variabile sìmout. aìgnala. values è un vettore di 51 elementi che contiene


i valori assunti dall'angolo di rollio negli istanti di tempo selezionati dall'algoritmo
di integrazione.
Per diagrammare l'andamento dell'angolo di rollio è sufficiente il comando
simplot(simout)
o l'usuale comando plot con una sintassi tipo:
. .'
plot(simout.aignals.values )

11.5 Sinks - Blocchi di uscita


I blocchi funzionali che consentono la visualizzazione o più in generale l'esporta-
zione dei risultati di una simulazione sono contenuti nella libreria Sinks.
Nel paragrafo precedente abbiamo utilizzato il blocco To Workapace. Come
detto questo blocco consente di trasferire, al termine della simulazione (e solo
allora), i risultati in MATLAB. Nella finestra parametri, riportata in Figura 11.5,
sono presenti i seguenti campi:
• Variable name, serve per definire il nome della variabile in cui andranno
memorizzati i dati.
• Limit data points to last, specifica il massimo numero di elementi da mem-
orizzare. Il valore di default Inf specifica l'assenza di limiti, in presen~a.di
un valore numerico N verranno memorizzati a.Ipiù N campioni: se la simu-
lazione si estende su un arco temporale che necessita di un numero maggiore
di campioni, verranno memorizzati solo gli ultimi N.
200 C.4PITOLO 11. GLI SCHE!vll SI!vIULINK

Olock 1',11,1mclms· rO Wmk SJMr.r. D

''

• 1
I ,...,, ..,.

l . '.Sempiet\lne:
•1

Figura 11.5: Finestra Biock Parameters del blocco ToWorkspace.

• Una soluzione alternativa per contenere l'occupazione di memoria e per non


perdere parti significative degli andamenti delle variabili è quella di inserire
un valore n maggiore di 1 nel campo Decimation. In tal ca.so non verranno
memorizzati i valori in tutti gli istanti di integrazione, ma solo uno ogni
n-passi.

• Se si analizza l'andamento del fluire del tempo durante una simulazione si


noterà che non risulta equispaziato, cioè il passo di integrazione non è uniJ
forme. L'ipotesi di passo di integrazione uniforme è indispensabile per poter
applicare molti dei risultati dell'analisi dei segnali. L'andamento del tempo
è imposto dal metodo adottato per la soluzione delle equazioni differenziali".
Come vedremo nel Paragrafo 12.3 alcuni metodi, detti a passo variabile~-
modiAcano dinamicamente l'ampiezza dell'intervallo utilizzando un passo di·
integrazione Atto in presenza di discontinuità della soluzione, ed un 1ampie2za
del passo più ampia quando la soluzione è regolare. Per imporre un passo
di integrazione costante è sufficiente specificarne il valore nel campo Sample
Time (il valore di default -1 indica l'assenza di un tale vincolo). È op-
portuno precisare che tale parametro incide esclusivamente sul processo di
memorizzazione, mentre l'algoritmo di integrazione continuerà ad utilizzare
il proprio passo di passo di integrazione, salvo fornire il valore delle variabili
di uscita anche negli istanti di "memorizzazione".
11.5. SINI<S - BLOCCID DI USCITA. 201 . i
I

• Save Format: definisce la struttura deWoggetto MATLAB utilizzato per la


memorizzazione, le scelte possibili sono: \.
Structure: (valore di default) viene usata una variabile di tipo struttura
ma non viene trasferito in MATLAB il vettore del tempo;
- Strncture with time: viene usata una variabile di tipo struttura e viene
trasferito anche il vettore del tempo;
Matrix: utilizza una rappresentazione tramite matrice o vettore.
Per trasferire i risultati di una simulazione in MATLAB è possibile utilizzare,
pertanto, sia variabili strutturate che matrici. Nel primo caso, come mostrato
precedentemente, la variabile è costituta dai campi: time, signals (che a sua
volta contiene i campi values e label) e blockName. Nel caso in cui si utilizza
la struttura a matrice, la variabile di uscita è un vettore colonna. Questo vettore,
che coincide con quello presente nel campo signals. values della rappresentazione
strutturata, è costituito dai valori della variabile analizzata nei diversi istanti di
campionamento.
Più in generale, essendo il To Workspace multi-varia.bile, è possibile trasferire in MATLAB f
•·
contemporanea.mente n -variabili. Utilizzando la rappresentazione ma.tricia.le, .la va.ria.bile di uscita.
è una. matrice, dove ogni colonna rappresenta un.a variabile, ed ogni riga il valore di tutte le
va.ria.bili in un particolare istante di campionamento (in presenza di segnali 2-D si avrà un matrice
tridimensionale). Con la rappresentazione strutturata la ve.ria.bile avrà più campi signob ognuno
dei quali associato ad una particole.re variabile .
L'utilizzo delle variabili strutturate è da preferirsi stante i vantaggi in termini
di chiarezza ed organizzazione del workspace che si ottengono (la rappresentazione
in termini di matrice è un retaggio delle precedenti versioni di MATLAB).
Lo Scope, già introdotto precedentemente, lavora come un oscilloscopio, ed è
in grado di rappresentare contemporaneamente più segnali sia sul medesimo asse
che su più assi (in funzione del valore indicato nel relativo campo dei parametri).
Per accedere alla finestra dei parametri è necessario effettuare un doppio clic sul
blocco ed una volta appaiso l'oscilloscopio utilizzare il penultimo pulsante della
toolbar (si veda Figura 10.6 a pag . 185). La finestra dei parametri è costituita da
due pagine. Nella prima Generai è possibile definire, fra le altre cose, il numero
degli assi presenti e il Time Range che definisce l'ampiezza deWasse orizzontale
dei tempi. Il parametro di default auto adatta tale lunghezza alla durata della
simulazione. In presenza di un valore numerico se la simulazione si estende au un
arco temporale maggiore, rispettando l'analogia con un oscilloscopio, non appena
il tracciato raggiunge il limite destro del quadrante dello Scope, lo stesso viene
azzerato ed il tracciamento riprende dall'estremo sinistro.
È possibile specificare dei valori di decimazione e di campionamento con il medesimo signi-
ficato visto per il blocco To Workspace .
Nella pagina Data History vengono gestiti i parametri per l'eventuale esporta•
zione in MATLAB dei dati al termine della simulazione. Se attivata l'opzione Save -lì.
datato workspacelo Scope si comporta in modo analogo ad un blocco To Workspace.

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

I linea a cui è connesso.


È anche possibile avere un versione fluttuante dello Scope, cioè non connesso
direttamente ad alcuna linea ma in grado di mostrare di volta in volta l'evoluzione
del o dei segnali selezionati. Per attivare questa funzionalità è sufficiente premere
sul terzultimo pulsante della toolbar.
In presenza di un Floating Scope, sono attivi anche gli ultimi due bottoni della. toolbar che
consentono di specificare rispettivamente se mantenere bloccata l'ampiezza dei degli assi e sé
utilizza.re la finestra del Bus Selector per individuare i segnali da visualizzare. .q

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

o quando si vuole utilizzare l'opzione WorkspaceI/O - Output dei Simulation


Parameters.
Ogni porta è individuata da un numero progressivo che Simulink provvede a gestire.
Un'altra funzione importante del blocco Outport è quella di definire le porte di uscite di un
sottosistema.

..
I

11.6 Sources - Blocchi di ingresso


Nella libreria Sourcessono contenuti i blocchi che permettono di generare i segnali
di ingresso per gli schemi Simulink.
Si noti che alcuni blocchi di questa libreria contengono il campo Sample time
e ) 'opzione Interpret vector parameter as 1-D il cui significato verrà illustrato nei
Paragrafi 15.1 e 13.2.
In questa libreria si trovano i blocchi quali: Const .ant la cui uscita è un valore
costante, Ramp che produce una rampa lineare con pendenza specificabile dall'u-
tente, Sine Wave generatore di funzioni sinusoidali, Step in grado cli generare
un segnale a gradino di ampiezza e tempo di commutazione specificati e Signal
Generator in grado di produrre differenti segnali.
Inoltre vi è anche il blocco From Workspace che rappresenta il duale del bloc-
co ToWorkspace,esso consente di utilizzare quale ingresso un segnale costruito in
MATLAB. Il segna.le dovrà essere organizzato, in modo analogo alle variabili del
blocco ToWorkspace,in modo da avere una base dei tempi ed i valori assunti dal-
l'ingresso in corrispondenza degli istanti specificati. La bo.sedei tempi deve essere
costituita da una sequenza di numeri strettamente crescenti. Il nome della vari-
abile va inserito nel campo Data mentre gli altri parametri definisco il modo in
cui viene ricostruito il segnale. Durante una simulazione Simulink individua nel
vettore della base dei tempi un valore pari o immediatamente superiore all'istante
di tempo corrente e considera quale ingresso una inte rpolazione lineo.re o il valore
assunto nell'istant e precedente a seconda che sia attiva o meno l'opzione Inter-
polate data1 • Se la simulazione si estende su un intervallo temporale più ampio
rispetto a quello indicato nel vettore base dei tempi, i valori del!'ingresso all 'ester-
no dell'intervallo saranno calcolati nella modalità specificata dal parametro Form
output after final data value:pari al valore definito per l'ingresso in corrispondenza
dell'estremo temporale più prossimo (opzione HoldingFinalValue)j calcolati per
estrapolazione lineare degli ultimi due valori (Extrapolation); posto pari a zero
(SettingToZero).
L'opzione CyclicRepetition che consente di generare una sequenza. ripetitiva può essere
invocata solo se si è utilizzata una variabile strutturata. priva. del tempo e definendo un valore
per il campo Sample Time.
Nel Paragrafo 11.4 abbiamo utilizzato per la variabile di ingresso al blocco
FromWorkspacela forma matriciale costruendo una matrice la cui prima colonna
1 Tole opzione determina. anche le modalità di ricostruzione del segnale per tempi inferiori a
quelli specificati nel vettore base dei tempi.
204 CAPITOLO 11. GLI SCHElvII SllvlULINK

rappresentava la ba.'3edei tempi e la seconda l'andamento del momento sbandante.


Nel casosi volesse utilizzare, invece, la forma strutturata, avremmo dovuto definire
la seguente variabile:

t•0:0.1:10;
eimin. time=t';
simin.signals.values=[3•sin(t')+0.7+sin(0.3•t')];
simin.signals.dimensions=1;

Il From Workapce è intrinsecamente multivariabile ed in grado di operare sia con segnali di


tipo 1-D che 2-0.
In alcune circostanze ca.pita di dover utilizzare quale ingresso il risultato ottenu-
to da una precedente simulazione . Nel caso in cui si sia.no memorizzate le variabili
con l'opzione Structu.re with time esse possono essere richiamata immediatamente
con il blocco FromWorkspace. Negli altri casi è necessario introdurre (o come pri-
ma colonna della matrice o nell'opportuno campo della variabile strutturata) il
vettore base dei tempi.
Il blocco homFile è Il corrispettivo del blocco ToFile:consente di utilizzare quale ingreuoI
dati memorizzati in un file. I dati devono e38ere organizzati come una matrice dove, analogamente
a quanto visto per il ToPile, la prima r iga. è costituita dal vettore dei tempi e le altre righe
rappresentano i valori assunti nel tempo dagli ingressi.
Il Inport, come è facile intuire, è il corrispettivo dello Outport e consente di
individuare gli ingressi di un sistema. Analogamente a quanto visto nel paragrafo
precedente, Simulink individua come variabili di ingresso, per tutte le operazioni
di analisi sullo schema, esclusivamente quei segnali collegati ad una porta Inport.
Gli Inport servono anche per definire le porte di ingresso di un sottosistema. Consentono, in-
oltre, a differenza dei blocchi Outport di specificare le caratteristiche che devono essere possedute
dai relativi segnali di ingresso al fine di prevenire errori di utilizzo del sottosistema .
Fra i Sinks vi è il blocco Clock; questo blocco consente di accedere dall'interno
di uno schema Simulink al valore corrente del tempo di simulazione . Tale blocco è
utile in presenza di sistemi dipendenti esplicitamente dal tempo e può essere profi-
cuamente utilizzato, in unione con il blocco Fcn, per generare segnali di ingresso
anche molto complessi.
Nelle versioni precedenti di Simulink era necessario ricorrere a questo blocco per esportare il
vettore dei tempi in MATLAB, tale funzione è ora resa superflua dalla. maggiore flessibilità. dei
blocchi di uscita.
Come detto, il blocco Prom Workspace, consente di costruire i segnali di ingresso in MAT-
LAB. Questa. soluzione pub risultare poco precisa in presenza di ingressi il cui andamento sia
fortemente non lineare e qualora i sistemi necessitino di passi di integrazione molto piccoli. In-
fatti Simulink calcola. il valore delPingresso tramite un'interpolazione lineare e se l'ampiezza del
passo utilizzata per tabellare l'ingresso è maggiore del passo utilizzato durante la simulazione
(che è quello imposto dall'algo ritmo di soluzione delle equazioni differenziali) il segnale di in-
gresso risulterà interpolato linearmente. Questo può essere evitato infittendo le tabelle, ma ciò
comporta un aumento della quantità di memoria occupata. e, quindi, dell'onere computa.ziona.le
11.7. ALCUNI BLOCCHI FUNZIONALI 205

complessivo, oppure generando il segnale dìrettamente in Simulink sfruttando la sel'ie di un Ciocie


con un blocco Pcn opportuna.mente programmato.
Il Digitol Clocl.:è la. versione tempo-discreta del Ciocie.

11.7 Alcuni blocchi funzionali


In questo paragrafo verranno presentati alcuni dei blocchi di uso più frequente
nella costru2ione degli schemi Simulink. Un elenco completo dei blocchi e delle
loro fun2ionalità presenti nelle varie librerie è riportato nel Capitolo 17.
Questa analisi non può che partire da.I blocco Inteorator della libreria Con•
tinous. L 1integratore integra nel tempo il segnale di ingresso a. partire dalla con-
dizione iniziale specifi_cata finché non viene attivato l'eventuale segnale di reset
(che fa ripartire l'integratore dalla condizione iniziale). La finestra dei parametri
del blocco si presenta molto ricca, è possibile definire infatti i seguenti parametri:

• E:cternalReset: Serve a specificare se esiste o meno un segnale di reset e, nel


caso positivo, se il reset deve avvenire in corrispondenza del fronte di salita
e/o di discesa del segnale di reset. Nel caso si attivi il reset 1 compare una
seconda porta al di sotto della porta di ingresso che evidenzia nell'icona del
blocco quale è il fronte del segnale dì ingresso che ~ttiva il reset.

• Initial condition source: Specifica se la condiJione iniziale è indicata fra i


parametri (in tal caso è presente il campo Initial condition) o è un ingresso
esterno (in tal caso compare la relativa porta. di ingresso):

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

• Abaolute tolemnce: permette di specificare la tolleranza assoluta. da utilizzare per la va-


lutazione della bontà della soluzione (vedi Paragrafo 12.3). Questa opzione è utile in
presenza di schemi che presentano grandezze caratterizzate da ampiezze estremamente
differenti rendendo non significativa la definizione di un valore globale per la tolleranza
assoluta. ..
206 CAPITOLO 11. GLI SCHEMI SI/ltIULINK

t Stato

Ingresso
out ut

Condìtioni lnitiuli di Saturazione


SegnaJc
lntcgrotor

Figura. 11.6: Blocco Integratorcon evidenziate le diverse porte.

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 l'ingresso per il fattore specificato.


ln presenza. di segnali multi-variabili, specificando un guadagno di tipo mMriciale è possibile
specificare anche il tipo di moltiplicazione da. eseguire: elemento per elemento, pre- o post-
moltiplicazione matriciale. L'opzione SaturoCeon integer ouerflow serve gestire corretLamente I
segnali di tipo intero, ai veda Il Paragrafo11.9.
Nella stessa. libreria vi ~ o.nche il blocco Product da non confondere il bloc-
~), ,i,,
:\ ..!':,.,
.••,•!,•
co Dot Prod.uct(presente sempre nella libreria Math). li primo realizza l'usuale ii!.'.•J·
••l ~
·j;, .
prodotto, mentre il secondo il prodotto scalare (in inglese <lot product) fra i due •'rl ..,,
-r -,.:.
vettori. ·},~,r.,
.
Nel campo parametri è possibile introdurre sia uno scalare che rappresenta
il numero di ingressi al blocco, sia una stringa. composta dai caratteri * e / che
specificano se il corrispettivo ingresso è un moltiplicatore o un divisore del risultato. .~; • J

È possibile specifica.re, inoltre, se il prodotto deve essere eseguito elemento per


elemento o come prodotto matriciale.
In presenza di segnali 2-D, utilizzando il metodo matriciale, l'operatore di divisione equivale
all'operatore di inversione.
· Nella libreria Functions & Tables vi è uno dei blocchi più versatile offerto
da Simulink: il Fcn. Esso permette di implementare un legame ingresso-uscita
descrivibile da una generica espressione matematico.. L'ingresso del blocco va
indicato sempre con la lettera u, ed è possibile utilizzare le seguenti funzioni
sin(u) asin(u) sinh(u) exp(u)
cos(u) acos(u) cosh(u) ln(u)
tan(u) atan(u) tanh(u) log10(u)
abs(u) atan2(u,v) floor(u) sqrt(u)
rem(u,v) hypot(u,v) pover(u,v) ceil(u)
tabe (u) log(u,v) pow(u,v) egn(u)
dove si è espressa.mente evidenziato se la funzione è dì uno o due argomenti. Il
...,.:-
,..,,
significato di tutte le funzioni è descritto nella parte MATLAB del volume ed è
. j. 1)l,#(
-:..~·
/~
}-'J;i_;
~

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

È inoltre possibile utilizzare all'interno della Fcn varia.biliscalari MATLAB o ele-


l
menti scalari estratti da matrici o vettori MATLAB (con una sintassi tipo A(l,2)),
non è possibile, però, eseguire operazioni matriciali né richiamare vettori o ma-
trici MATLABe neanche val·iabilistrutturate. A titolo di esempio si consideri la
seguente funzione
5 cos(u) se u > 3
y= sin(u * r) se 2 < u ~ 3
{ u2 se u ~ 2
dover è uno scalare definito in :tvlATLAB.Una sua implementazione tramite un
blocco Fcn è la seguente:
5•cos(u)•(u>3)+sin(r•u)•(u>2 l&: u<=3)+u·2•(u<=2)
...
'

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

11.8 Look up table


Con il termine "Look up table" si indica il metodo più usato per la costruzione delle
funzioni matematiche non dinamiche a partire da dati sperimentali. Questi sono
rnccolti in laboratorio sollecitando il sistema con particolari valori degli ingressi .I
(detti "breakpoints") e misurando i corrispondenti valori delle uscite. Le funzioni
look up suppliscono alla impossibilità di effettuare delle misure sperimentali per
I

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

Figura 11.7: Blocchi "Look up table''.


I t
i
Il blocco più semplice è il Look.up Table che implementa la funzione y = F(x)
a partire dai valori a.ssun ti dall'uscita in corrispondenza dei breakpoints dell 'in"
gresso tramite un'interpolazione lineare dei due elementi più prossimi e tramite
estrapolazione lineare per i valori al di fuori del range degli ingressi. Il legame
I ' ingresso uscita sotteso dalla Look 1,p Table è rappresentato nell'icona del blocco
(modificando il legame automaticamente cambia l'icona).
11blocco Look-up Table (2D) consente di implementare una funzione èil
due variabili del tipo y = F(x 11 x2). I valori dell'uscita sono definiti tramite una
matrice. In fun2ione del valore assunto dal primo ingresso {row) in relazione al rel;.
ativo campo parametri si identificano le righe della matrice di uscita da utilizzare~.
Analogamente il secondo ingresso (column) determina quale delle colon ne della
matrice di uscita vanno utilizzate. Il valore di uscita è calcolato per interpola2ione -
dei valori della matrice selezionati.
-f Un blocco più versatile è il Look-up Table (n-D) che permette di reali~~
zare funzioni del tipo y = F(x 1 , x'2,... , :Z:n), Il blocco consente dì specificare se

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

• Evenly Spaced Points: da utilizzare solo quando i breakpoints sono equispa-


ziatii

• Linear Search: da utilizzare, insieme con l'opzione Begin index searchesusing


previous index results, in presenza di segnali di ingresso che variano poco da
un istante di integrazione al successivo;

• Binary Search: da utilizzare quando il valore dell'ingresso presenta rapide


variazioni.

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

• Description: è un campo di testo ove è possibile immettere un commento.


• Document link: In questo campo è possibile immettere un 1istruzione MAT-
LAB che viene attivata con un clic sul nome del campo (che, per questo, ha
l'aspetto di un collega.mento ipertestuale). Tale campo è utilizzato, ge~eral-
mente, per associare un testo di help al segnale. Ad esempio, la seguente
istruzione

web( ['file:/// l which ( I into..signal. htm' )] )


210 CAPITOLO 11. GLI SCHEMI SIMULINK

-J 5,qnal Pmpetlles · lll~Ei

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:

I Tipo I Descrizione Range I n. Byte I


uint8 intero senza segno 8-bit O+ 255 1
uint16 intero senza segno 16-bit O+ 65535 2
uint32 intero senza segno 32-bit O+ 2J~ - 1 4
int8 intero con segno 8-bit. - 128 + 127 l
int16 intero con segno 16-bit -32 768 + 32767 2
int32 intero con segno 32-bit -2" 1 + (2" 1 - 1) 4
aingle singola precisione Dipende dalla mac china. 4
double doppia precisione Dipende dalla macchina 8
boolean booleano (memorizzato come un uint8) O=fe.lse l=true l

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.

Esercizio 11.3 Realizzare in modo parametrico (ovvero definendo delle variabili


k!ATLAB) lo schema Simulink 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.

Esercizio 11.5 Analizzare il comportamento del sistema x+x = O al variare delle


condizioni iniziali sul piano delle fasi.
Suggerimento. Si ricorda che il piano delle fasi è quello in cui si
riporta :i: sull'asse delle ordinate e x su quello delle ascisse. Esportare
i dati in MATLAB o utilizzare il bloccoXY Graph.
2 All'intern o di una stessa espressione tutti gli elementi vengono ricondott i al tipo più
elementare che sarà. an che il tipo associato con il risultato dell'espressione .
11.10. ESERCIZI 213

Esercizio 11.6 Analizzare il comportamento del sistema

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

Esercizio 11.9 fl classico modello preda-predatoreche descrive l'evoluzione di j


due specie interagenti è quello di Lotka-Volterra f;

N1 - aN1 - bN1N2
N'l - -cN'J + dN1N'J
dove N1 rappresenta le prede ed N 2 i predatori, a è il tasso di crescita delle prede
in assenza di predatori, e il tasso di riduzione dei predatori in assenza di prede,
mentre i coefficienti b e d modulano l 'interarione fro le due $pecie. Analizzare
il comportamento quando: a = 3.5, b = 0.1, e = 4, d = 0.06, Nt (O) = 100,
N2{0) = 20. Rappresentare la risposta sia nel dominio del tempo che in quello
delle fasi (disegnandoil numero delle prede in funzione del numero dei predatori),
come cambiano le risposte se si modificano le condizioni iniziali?
I
Esercizio 11.10 Modificarelo schema dell'Esercizio11.3 inserendo il 11incoloche ' I

la molla oltre i 30 cm risulti non più comprimibile.


Suggerimento. Utilizzare il bloccoSaturation .
·
I,
i'

11
214 CAPITOLO 11. GLI SCHEJ\lI SilVIULINK

Esercizio 11.11 Un 3emplice modello per descf'ivere l'evoluzione di un'epidemi~


è quello di Kermac e McKendrick
,i
....
dx
dt - -{3xy ' \ i)
!I

dy
dt
- {3xy- -YY
dz :d '
-dt - "fY d1

dove :i; rappresenta la popolazione potenzialmente infettabile, 11il numero di soggetti


infetti che sono in grado di trasmettere il contagio e z il numero di individui
malati rimossi (morti, isolati o semplicemente guariti). L'epidemia si espand~
solo se il numero di individui potenzialmente iniettabili supera un determinato
valore di soglia, altrimenti anche in presenza di un 'immissione di y(O) soggetti
infetti l'epidemia non si diffonde (cioè il nume1"0di casi infetti diminuisce nel
tempo). Nelle ipotesi che /3 = 0.1, --y= 5 e che vi sia un'immissione iniziale di
y(O)= 10 soggetti infetti, determinare il numero massimo di individui sani per cui
l'epidemia non si diffonde.

Esercizio 11.12 La dinamica di un veicolo ammof'tizzato può essere schematiz-·


.tata dall'equazfone •
/vljj + BiJ + K y =u
dove y rappresenta Io spostamento della carcassa del veicolo rispetto alla posizione
di equilibdo, lvi la massa, B il coefficiente di attrito viscoso e K la costante elas-
tica dell'ammortiziatore. Il termine u rappresenta la sollecitazwne che la strada
trasmette al veicolo.
Nell'ipotesi che M = 100 kg, l( = 10 N/m, B = 5 Ns/m analizzare, in fun-
zione della velocità con la quale viaggia l'auto, l'andamento dell'abitacolo nel piano
trasversalenell'ipotesi clie la strada abbia un profilo sinusoidale con ampiezza pari
ad 0.1 m e periodo 10 m.
Suggeritnento. Il sistema andrà sollecitato con una sinu.,oide che
rappresenta la forza applicata al veicolo la cui frequenza è legata al
1
I
rapportofra velocitd del ueiculo e periodo del profilo stradale.

Esercizio 11.13 A nalìzzare l'uscita del sistema rapvresentato in Figura 11.1O.


Suggerimento. Generare il segnale di ingresso in MATLAB ed uti-
lizzare il bloccoFrom Workspace o utilizzare la serie di tm bloccoClock
ed un bloccoFcn. Per realizzare lo schema utilizzare il bloccoTransfer
Fcn della libre1·ia Continuous e il bloccoRelay della Nonlinear.
11.10. ESERCIZI 215

Figura 11.10: Diagramma. a blocchi e andamento del segnale di ingresso dell'Eser-


cizio 11.13

I
.
.,
R L

Figura 11.11: Schema di un amplificatore con un diodo tunnel.

Esercizio 11.14 Una schematizzazione del VCON (Vvltage ControlledOscillator


Neural) è la seguente:

:i: - 1.1 + cos(x) - cos+(Y)


i) - 0.01(1 + cos(y) - 20cos+(Y))

dove la funzione cos+(Y):::: max (cos( y),0). Analizzarne l'evoluzione.


Suggerimento. Utilizzare il bloccoMinMa.xper realizzarela funzione
cos+(Y),
Esercizio 11.15 Nel circuito di Figura 11.11 è prnsente un diodo tunnel la cui
camtteristica è rappresentata nella Figura 11.12. Si analizzi l'andamento della
tensione sul condensatorequando la tensione di ingresso varia come u = 3 sin(3 t),
utilizzando i seguenti parametri: R = 5 mn, L = 0.01 H e C = 0.05 F.

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

Figura 11.12: Caratteristica del diodo tunnel

Suggerimento. Utilizzare il blocco Look Up Tableper schematizzar e


il diodo tunnel.

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

Esercizio 11.17 La dinamica della diffusione della corruzionenella classe politica


di un paese può essere descritta, in modo molto semplificato, attraverso il seguente
modello {Rinaldi, Feichtinger, and Wirl, 199,I}
:i:(t )
x(t)

.·,.
~
11.10. ESERCIZI 217

IJ
Co//111or,
R ,,..
'

Vce e

114diot,o,ul,_,.ow
WWHIIU
Emt11/1ort
\.

Figura 11.13: Esercizio 11.19: circuito di polarizzazione di un fototransistore.

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.

Suggerimento. La popolarità raggiungeil suo massimo verso il 1955


e, successivamente, rimane praticamente costante, mentre fenomeni di
corruzioni sono quasi del tutto assenti fino agli inizi deglianni settanta.
fl modello prediceuna forte azione della magistratura ( ed il conseguente
crollo della popolarità)per il 1989 (si noti che l 'azione di 'Mani Pulite'
e di Di Pietro ebbeinizio nel 1990).
218 CAPITOLO 11. GLI SCHEMI SIMULI1VK ·~.

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

Figura 11.14: Caratteristica di uscita del fototransistore dell'Esercizio 11.19. Le


curve sono tarate in termini di potenza incidente [mW crn- 2 ]

l Esercizio 11.18 Al soffitto di un carrello è appeso un pendolo di massa m -


0.3 kg e di lunghezza 1 m. n carrello si muove sul piano orizzontale con accel•
erazione costante a = 5 m/s2 • Analizzare l'andamento dell'estremo inferiore del
pendolo.
Suggerimento. n pendolo è soggetto alla accelemzione di gravità g =
9.8m/s2 agente sul piano verticale, più alla forza dovuta al moto del
carrello agente .ml piano o,"izzontale,il moto è dovuto alla componente
della forza non equilibrata dalla reazione vincolare.
-i
I

Capitolo 12
I

La simulazione in Silllulink
I

In questo capitolo si analizzerà più in dettaglio il modo in cui Simulink effettua


una simulazione e come scegliere nel miglior modo i parametri relativi.

12.1 Sche1na di Lord Kelvin


Per la costruzione dello schema di Figura 11.4, come anche per quello del sistema
massa-molla, si è usato quale elemento principale il blocco integratol'e. Ad una
superficiale analisi potrebbe sembrare più comodo utilizzare quale tassello fonda-
mentale un derivatore. Ad esempio volendo simulare il sistemo. descritto da.Ila
I• I'
seguente equazione
ii+y=u (12.1)
dove u rappresenta un segnale di forzamento noto, si potrebbe pensare di costruire
lI
uno schema tipo quello di Figura 12.1. Ovvero, assunta nota la y, la si deriva una
prima volta in modo da avere la sua derivata prima, derivando quest'ultima si
ottiene la jj che, sottratta al valore istantaneo del forzamento u è proprio pari al
valore della y (dall'equazione ( 12.1) si ha che y = u - jj) e questo consente di chi ud-
ere il ciclo. Questa soluzione presenta, però due incon\'enìente che la rendono non
utilizzabile: qualunque segnale fisico è affetto da rumore caratterizzato da. un'el-
evata velocità di variazione che viene amplificato dall'operazione di derivazione
fino a rendere privi di qualunque significato i risultati della simulazione (si ve-
da l'Esercizio 12.1); inoltre l'operazione dì derivazione è matematicamente poco
stabile.
Per evitare questi problemi Lord Kelvin nel 1876 propose di utilizzare quale
elemento basilare per la costruzione degli schemi per le simulazioni l'integratore.
Uno schema per la simulazione di un sistema dinamico descritto dalla generica
equazione differenziale
1
d"y ( d"- y dy )
-dtn = f dt 11- 1 ' ... I -d,
t y, u. t
220

y y
..
y d d
dt dt

Figura 12.1: Implementazione mediante derivatori.

:{
.'•,',
•.;,,
#··•'\


~:i ~
•J

- --~
.. :, .. s
. ;
/)?
..

u
t

Figura 12.2: Schema proposto da Lord Kelvin.


,, , .. 1:~

In preseniza di un sistema di n equazioni differenziali del primo ordine Xi = . ;~


rt
fi(x, u, t), quanto detto si traduce nel ricorrere a n integratori le cui uscite (che }Pi.·
rappresentano le x} andranno opportunamente combinate fra loro e con gli even- ù~
tuali ingressi esterni a.I fine di costruire le equazioni differenziali fi(x, u, t) che,
,,
essendo le :i:11 sono gli ingressi degli integra.tori chiudendo così i cicli. Ad esempio t.
nella Figura 12.3 è riportato lo schema per la simulazione del seguente sistema di
~.
equazioni del primo ordine.
.•,,
-t,'','
= \rJ,.
·;>•I ~, -~
-;i:'j
,ti'.
r.,·
~~r~..

,.
\'...~~
S,.1 '

...
-- ~1}j
. ..~~l

-~·· }'
12.2. PRODLEMI DI SINIULAZIONE 221

1 1 ---91 □
1----w:
...
s
><1 Scope_x1

Scope_><2

l Figura 12.3: Schema per la simulazione di un sistema di equazioni differenziali.

12.2 Problemi di simulazione


Uno schema di principio di un motore a corrente continua è rappresentato in
Figura 12.4. NelPipotesi che il motore lavori ad eccitazione costante, le equazioni
che ne descrivono il comportamento sono :

Figura 12.4: Schema di un motore a corrente continua.

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
"; #:
~

relativo schema Simulink è rappresentato in Figura 12.5, dove si è imposto che


. ~e\

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.

Se si lancia la simulazione si noterà cbe il tempo scorre con notevole lentezza .


e lo Scope evide nzierà che la corrente presenta delle oscillazioni non fisicamente
accettabili. Se si ha abbastanza pazienza, dopo diverso tempo comparirà la finestra
Simulation Dìagnostic che segnale un errore di memoria. 2 Tutti evidenti indizi che
qualcosa non ha funzionato a dovere.
·-1··
•' '•(
I w'
L

Questo è dovuto al fatto che, nonostante il sistema sia lineare, il metodo di .f;~
.+ , c.1•
0

integrazione adottato per default da Simulink {ode45 Dormand-Price) non è in


grado di integrare questo particolare sistema. Il problema esaminato rientra, in-
fatti, in quella classe di sistemi di equazioni differenziali che i matematici indicano
col termine di "equazioni stìff" 1 in cui sono presenti dinamiche che evolvono con
costanti di tempo molto diverse fra loro. In particolare, è facilmente intuibile che
1 Con abuso di notazione abbiamo indicato con k sià. la costante elettromeccanica kt che quella.
legata alla f.e.m kv, che, pur avendo lo stesso valore numerico, sono dimensionalmente differenti:
kt=N m/ A, kv=V s/rad.
2 11 comparire di tiLle errore dipende da.Ila quantità di memoria a disposizione sul PC.
12.3. lvlETODI DI INTEGRAZIONE NU1WERJCA 223

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

di soluzione (e cambia il numero ed il significato dei parametri). 1:


I
Essendo, come detto, il problema descritto da equaziòni stifl' è necessario I
scegliere un metodo adatto: ode15e. Se, lasciando inalterati gli altri parametri,
si lancia la simulazione, si noterà che termina in brevissimo tempo e l'andamento
delle variabili è fisicamente plausibile.
Si noti che tutti i metodi a passo variabile non espressamente indicati per la
soluzione di problemi stiff soffrono degli stessi problemi evidenziati da ode4 •6. Se
si prova, invece, ad utilizzare un metodo a passo fisso comparirà quasi subito la
finestra dì Simulation Diagnoaticper segnalare un errore nei calcoli. 3

12.3 Metodi di integrazione numerica


I metodi numerici per la soluzione di una generica equazione differenzia.le

x= / (x, t); (12.2}

individuano all'interno dell'intervallo di integrazione un certo numero di "istanti


di integrazione" T0 = t 1 < t2 < · •· < tn = Ti e calcolano la soluzione x(t,)
esclusivamente in corrispondenza di ognuno di questi istanti. In particolare la
soluzione nell'istante ti+1 è determinata sulla base delle soluzioni calcolate nei
campioni precedenti tramite una formula del tipo

(12.3)

dove con h, si è indicata l'ampiezza dell'i•simo passo di integrazione, cioè h,. =


tH1 - ti, e Lì è una funzione opportuna.
La bontà della soluzione ottenuta dipende pertanto dalla scelta del passo di in-
tegrazione h e dalla particolare forma della funzione LÌ. Entrambi questi parametri
3 Con ode1-Euler apparirà un andamento della corrente che diverge in modo oscillante.
224
ti.-

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

A prescindere dal metodo utilizzato (cioè dalla forma della A) si PC\tr~b'é.


pensare che1 in linea di principio1 riducendo il passo di integrazione si poeJ~
ottenere risultati sempre più precisi. Questo però va a scontrarsi da un Jat.Q <J. ~
:-:,
un'esplosione dei tempi di calcolo e dall'altro con i limiti dovuti agli errori nurn~r©tt
~~a soluzi?ne efficie~te p~r supera~e ~uest~ problema è quella d~utiliz~are un .p~ ~..
d1 mtegraz1one la cm ampiezza van dmam1camente durante la s11nulaz1one in rnpq~
1:rr.-
da utilizzare un passo piccolo solo quando serve. Gli algoritmi che sfruttan,o.,.u~ .
modulazione del passo di integrazione sono indicati come metodi a passo variàQile. \.
Ad ogni passo di campionamento è eseguito un test su una stima dell'errorftr~J i
integraz.ione. Se l'errore supera un pretìssato valore di tolleranza, l'algoritmo <;>p_>e ·Pi~-~
un backtracking, cioè scarta la soluzione ottenuta e ripete l'integrazione utiliz~ani;l~}
un 'ampiezza del passo di integrazione più piccola. In caso contrario pass~. ~9.!
}
integrare il successivo intervallo utilizzando un passo più ampio. In questo Il!Qq4> ).
si ricot're ad un campionamento fitto solo dove occorre, cioè negli intorni dei pµnti :t~,
in cui la funilone lntegrandn varia rapidamente, mentre dove la funzione presl)nt.A! ' . •
un comporta.mento regola.reviene a.dettato un passo di integrazione ampio al fh1~;·,i,
di ridurre l'onere computazionale. Questo garantisce sia. una buona precisi~.P.et · .~, ,
della soluzione che tempi di calcolo contenuti. . ,. ·:.. .f
Generalmente la stima dell'errore di integrazione è ottenuta. confrontando due valori della>· ,;.,:'• W ~
soluzione caratterizza.Li da diversa precisione: ad esempio calcolati con pa.ssidi integrazione: ·
-
'!/· e
~
diversi o con metodi di ordine diverso. .,,ril -'~,
Come accennato, i diversi metodi di soluzione si contraddistinguono per come '·f
è detìnita la funzione Cl.
L1approccio più semplice è quello di utilizzare un'ampiezza costante del p~sh
d_i'.ntegrazione e approssimare la derivata della x con il rapporto incrementale
1
c1oe •
Xi+l h- Xi ~
~ f (ti,X1
. ·) ⇒ Xi+l =Xi+ hf (ti,Xi )
dove Xi rappresenta la soluzione calcolata in ti che approssima il valore della
variabile ricercata (cioè Xi::::: x(ti)). · ;,
Questa semplice formulazione, nota come metodo di Eulero, non è molto effi.:
c~n~. ·
Per la valutazione della bontà di un metodo viene utilizzata la nozione di errore locale
et = :z:(t,) - Xi

ed i singoli metodi vengono caratterizzati da un ordine di accuratezza: un algoritmo ha ordine


di accuratezza p se è O(hP+l) {si dice che g{y) è O(y) se è dello stesso ordine di infinitesimo di
y, cioè lim 11-io ~ = cost). Il metodo di Eulero ha un ordine di accuratezza pari a 1.
Risultati migliori potrebbero ottenersi sviluppando la f in serie di Taylor,
ponendo cioè
Il hm-1
_
t1(t,x,h,f)-ft,x)+- ( J t,x +···+-,-! m.
'( ) (m-1) (t,x) (12.4)
2
12.3. lvJETODI DI INTEGRi\ZJONE NUlvlERICA 225

L'applicabilità della (12.4). che nel caso di m = 1 è il metodo di Eulero, è


però fortemente limitata dalla impossibilità di calcolare il valore delle derivate
necessarie.
:. I
Un'alternativa è fornita dalla famiglia di metodi Runge-Kutta nei quali la
soluzione in ti+l è calcolata come combinazione linea.re della f valutata in un
certo numero di punti interni all'intervallo di integrazione [ti, t,+il•
Si consideri la forma integra.le della (12.2) particolarizzata ad un intervallo di
integrazione
t;+1 .,
x(t;+i} =x(t;) +
l
t; J(r,x(T)) dr (12.5) I

Se si approssima l'integrale come prodotto della lunghezza dell'intervallo di in-


tegrazione per il valore che la funzione assume al centro dell'intervallo stesso si
ha
x(t,+1) ~ x(t;) + hf (ti+ ~,x(t; + ~)) (12.6)

La {12.6) non è direttamente utilizzabile dato che la quantità x(ti + f) è ignota,


Approssimando tale quantità con la formula. di Eulero

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

Nella loro formulazione più generale i metodi Runge-Kutta sono descritti da un


insieme di equazioni del tipo

Zi+l = Xi + hl::.(t;, Xi, h, f)


m
6. (ti, Xi, h, f) = L Cqkq
·.,

dove l'indice m rappresenta l'ordine del metodo ed indica il numero di valu-


tazioni della funzione f necessari ad ogni passo, mentre i parametri c9 , a9 e b91 ne
specificano il tipo.
1 parametri vengono scelti in modo da avere una precisione desiderata, cioè imponendo che
1 = O(hP). Esiste, comunque il seguente legame fra l'ordine del metodo e il massimo
:c(ti+l )-:r,+
grado di accuratezza possib ile

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~

:Ci+l =Xi+ hf ( t, + -21 h ,Zi + -,~,


1 1.
t1,Xi}
( ) • l Of.1

ì8-:~
•~1 '
2 .~. , ;
• Mtto<lo di Heun:
modifico.Co
è una soluzione alternativa rispetto a quella del metodo di
che dà, generalmente, risultati più accurati
s~'iltJl
.
1' ; , ., ) •

:t1+1 = x, + 2h [/(t1,:cd +/(ti+ h,z, + h/(t,,xi))) !hile::


Si noti che, se la/ non dipende dalla :i:, la formula si riconduce al metodo dì integr~ori'; ~
per trapezi. ·.,.t,~t-""',
• Formulo Runge -Kutta del ,4 ordine: consente di ottenere , nel caso in cui la/ sia sufficiJJ~ ·;,
temente regolare, uo errore locale O(h 4 ). Qualora la/ non dipenda dalla :z:, la formula.si .::
riconduce al metodo di integrazione di Simpson • ,,,,,t; J

z 1+1 =Xi+
h
-(k1 + 2k1 + 2k3 + k4) •../ li'f '
,:·•·I·-:.
I

6
~,I
Jir-··. I

k1 = /(t,,xd i k:i= J (t4+ ~h,x,+ ih>-1)


i .·,~,.
, !' .

k3 = f (t,+ ~h,:t; + ~hk2) i k4 =/(ti+ ~h,Xi + ih}.3)


i
l •
I metodi Runge-Kutta a passo variabile sono spesso costituiti da un coppia di solu,iioni di divere.o
ordiue (generalmente 2-3 e 4-&) in quanto una scelta opportuna dei parametri consente di calcolare
le due soluzioni senza oneri compuLazionali aggiuntivi e la differenza fra i valori cosl ottenuti pub.
essere usaLa come stima dell'errore locale di integrazione (metodi Rung-Kutta-Fehlderg). ,
Un 'ulteriore generalizzazione di tale tecnica è costituita dai metodi Runge-
K utta impliciti nei quali i valori dei parametri kq sono definiti in maniera più ..
generale come: ,;,:
-; ii

(12.7).

per la cui determinazione è richiesta la soluzione ad ogni passo di integrazione d


un sist.ema di equazioni non lineari. .
Una diversa generalizzazioneè fornita dai metodi di Rosembrock nei quali i kq sono definit
come

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

12.3. METODI DI INTEGRAZIONE NUlvIERlCA 227

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

Xi+1 = Xì + LJ3;J(ti-j,Xi-j) (12.8)


j=O

dove /3; sono parametri da scegliere in modo da ottenere la migliore approssi~


inazione possibile. In particola.re quando /30 f. O la (12.B) presenta una formu•
la.zione implicita.
La formulazione esplicita è generaltnente detta metodo cii .4dams-Bashfort, tneotre quella.
implicita metodo di Adams-Multon.
È possibile dimostrare che i metodi impliciti, a parità di ordine, risultano più
precisi. Questo si intuisce osservando che i metodi impliciti sono ottenuti mediante
formule di quadratura che utilizzano anche il secondo eHtremo di integrazione t,+i.
Il prezzo da dover pagare consiste nel maggior onere computazionale legato a.Ha
necessità di risolvere ad ogni passo un'equazione implicita (o più in generale un
sistema di equazioni implicite). Una tecnica usualmeute impiegata per superare
questa difficoltà è il così detto metodo del Predìctor - Corrector. Esso consiste nel
cercare la soluzione mediante approssimazioni successive: si utilizza un metodo
Adama esplicito per predire il valore della funzione (Predictor), ed a partire do.
questo si applica un metodo implicito (Corrector), il tutto iterato fino a quando
la differenza fra due successive iterazioni non è inferiore ad un prefissato valore di
tolleranza ovvero iterando il procedimento un numero fisso di volte.
L'implementazione più nota è il PECE che consiste nel valuta.re, ad ogni passo, un Preclictot·
ed un Corrector intervallate dal calcolo del valore della derivata. della Xi ( cioll la. /)

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
:;. '\-'.

228 CAPITOLO 12. LA SI!vIULAZIONEIN SllvIUL~ -~



.
,:-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~

(Numerica! Differentiation Formulas) che generalizza la formula precedente .. :,:I


. ··! ·~-- ~
m . i ,:J
ll· :~-·~
L ¼'v 1
2:1+1- h/(ts+1,XH1) - lt')'m (%i+1 - :rr+1) =0 (12.~<Jl ·\: ~:•
k:.l :. i}:~
sfrut,tando esplicita.mente anche le soluzioni ottenute da.I Predictor. :--,,·i
". ..•.1i
E opportuno ricordare che non esiste un metodo ottimale per l'integrazione :'!>è ,
delle equazioni differenziali valido per qualunque tipo logia dì funzioni. Alcuni ·-· f •
metodi risultano più efficaci con determinate classi di problemi, mentre possono ·•
addirittura non convergere se la funzione integranda non soddisfa le dovute ipotest
Inoltre, la scelta del metodo di soluzione da utilizzare è sempre un compromess6
fra la precisione richiesta e l'onere computazionale che si è in grado di gestire. · ·

12.4 Soluzione delle equazioni differenziali in Si-


mulink
Simulink possiede diversi metodi per la risoluzione delle equazioni differenziali s~a.
a passo variabile che a passo fisso. Alla prima categoria appartengono:
. .~~·
• ode45 È un metodo che funziona discretamente bene per una grande varietà
di problemi ed è il metodo da usare come primo tentativo. Il metodo non è >
appropriato per sistemi stiff. : • ... .. J

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

lmplement&. l 'algorltmo Adams-Baahfort-Moulton nella formulazione PECE. È un metodo


I
multi-step cioè per il calcolo della soluzione nell'istante corrente necessita. della soluzione
in più istanti precedenti.

• odel5a È un metodo molto efficiente per i sistemi stiff ed è il primo da


provo.re quando ode46 non funziona o è estremamente lento. È poco efficiente
in presenza di sistemi ibridi.
Implementa un algoritmo basato sulle NDF (Numerica! Differentiation Formulas) ed è
multi-step. È possibile specificare l'ordine per la soluzione da l a 5. Sebbene al crescere
dell'ordine la soluzione divenga sempre piu accurata, l'algoritmo divine meno stabile
numericamente. Un buon valore di compromesso si ottiene con 2.

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

• ode23t È un metodo da usare in presenza di problemi moderatamente stiff


e se è richiesta una soluzione che non presenti numerical damping.
È basata sull'integrazione per trapezi.

• ode23tb È un metodo per sistemi stiff da utilizzare al posto di ode15s


quando non è richiesta una precisione molto accurata.
Implementa. un algoritmo implicito il cui primo sta.dio è costituito da. una integrazione per
trapezi ed il secondo sulla formula delle differenze all'indietro di ordine 2.

• 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 metodi a passo variabile sono più efficienti e sono pertanto da preferirsi. In


alcuni casi, però, è necessario utilizzare algoritmi che operino con un passo di
integrazione costante. Questo è necessario, ad esempio, ogni qual volta si voglia
simulare un sistema digitale real-time. In tali circostanze si deve ricorrere ai metodi
a passo fisso: l
• ode5 versione a passo fisso della ode45;

• ode4 formula di Runge-Kutta del 4 ordine;

• ode3 versione a passo fisso della ode23j

• ode2 metodo di Heun;

• odel metodo di Eulero; I/ '

I:
ti
I
230 CAPITOLO 12. LA SI!vIULAZIONE IN SIM[4llfJ{.•

• disc r ete da utilizzare in presenza di sistemi puramente tempo d~cr~tP, ·.:


Il metodo sceglie automaticamente come ampiezza del passo il più pic~9~ ·.
sottomultiplo comune a tutti i blocchi. ., ~
,:.~
tX
lt ~
. , ~.},~-.'
.,..
12.5 I paramet ri dell a sim ul azione ~-~.:
J:.:.:
. .,{

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.

• Min step size: definisce l'ampiezza minima del passo di integrazione. Il


metodo di integrazione, se la stima dell'errore locale non rispetta la tolleranza
indicata. riduce progressivamente l'ampiezza del passo di integrazione fino a.
questo valore.
li campo Min Step Size accetta anche vettori di due elementi, il secondo dei quali indi-
ca il numero massimo di volte che l'algoritmo può ridurre al valore minimo il puso di
'.
integrazione prima che la simulazione venga interrotta con una eegnala.zione di errore
.
I valori numerici per questi parametri sono fortemente legati alle caratter-
istiche del sistema. Di conseguenza il Min Step Size dovrà essere "piccolo"
rispetto alla più piccola costante di tempo del sistema (tipicamente dell'or-
dine di 0.01 + 0.0001 'Tmfo)i mentre il Max Step Size dovrà essere al più pari
o.Ilapiù grande costante di tempo del sistema (tipicamente 0.1 + 0.01 Tma~).

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

• Relative tolemnce e Absolute tolerancedefiniscono, rispettivamente, il massi-


mo errore relativo e assoluto . Ad ogni passo di integrazione l'algoritmo cal-
cola una stima dell'errore locale di integrazione e verifica se questa soddisfa
i criteri di tolleranza
12.5. I PARAMETRI DELLA. SI!vIULAZIONE 231

se ciò non avviene la soluzione viene scartata e, utilizzando un passo di


integrazione di ampiezza ridotta, viene calcolata una nuova soluzione. In
particolare I

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.

La verifica è effettuata singolarmente per ciascuna componente della soluzione. È possibile


specificare per ciascun elemento dinamico del sistema uno specifico valore per Ab1Tol il campo
I
Ab,olute tolerance present e fra i parametri dei blocchi della libreria Continuou, .
In presenza di algoritmi a passo~co,'Jtante i parametri da definire sono:
• Fixed step size: definisce l'ampiezza del passo di integrazione . 11 valore di
default auto è pari a.clun cinquantesimo dell'intervallo di integrazione.
• Mode: definisce le modalità di gestione di blocchi tempo discreto caratteriz~
zati da passi di campionamento (Sample time) differenti e collegati fra loro
direttamente.

- MultiTasking : verifica se siano presentì tali connessioni e genera un messaggio di


errore. Questa opzione è utile quando ei vuole simulare un sistema. real -tlme .
- SingleTasking: 11011effettuata la verifica.
- Auto: se tutti i blocchi operano con il medesim o Sample Time non effett ua la
verifica, altrimenti si comporta in maniera analoga al MultiTasking .

In applicazioni real-time non è ammissibile l'interconne ssione diretta di elementi operanti


con differenti sample rate a causa. dell'impossibilità di garantirEJ una corretta. sincronizzazione .
Per eliminare una transizione Illegaleslow-fast è sufficiente fro.pporre fra I due blocchi un Unit
Dela11con un es.mple time pari a quello del blocco lento, Invece per ellmlnare una transizione
Illegale fast-slow ai deve frapporre un blocco Zero-Order Hold con un sample time pari a quello i
'I
del blocco lento.
Nella parte inferiore della pagina è possibile definire alcune specifiche relative
agli istanti in cui valutare il sistema (non applicabili agli algoritmi a passo fisso).
Si noti che in dipendenza dell'opzione prescelta cambia il campo valori sulla destra.
• Refine output: definisce un fattore di incremento del numero di punti di
misura rispetto ai punti scaturiti dall'algoritmo <liint egrazione. Il dsultato
finale è analogo alla riduzione dell'ampiezza del passo di integrazione, ma
presenta il vantaggio di un onere computazionale minore.
I valori aggiuntivi sono calcolati tramite una formula di estrapolaz ione . Si faccia at-
tenzione che per tali punti non funziona l'algoritmo di z ero crouing detection (si veda
l'E;serci21io12.6).

I I
I
.. .:r, .
~ .~
,! ~ . .
·l-~-.
232 CAPITOLO 12. LA SllvIULAZIONE IN SIMfJLit{~ ,
.,. !1
.,~,:4

• Produce additional output: consente di specificare ulteriori istanti di temp~ ,'ti


dove valutare il sistema . A differenza delPopzione precedente, questa :mod!)t;1J_
ifica ] 'ampiezza del pa.'3so di integrazione in modo che alcuni degli -istant t ~1'1
coincidano con quelli indicati. · , ~~
.. -,,l
• Produce 3pecifiedoutput only: consente di specificare gli istanti in cui è di. \,,,
interesse il valore della soluzione . L'algoritmo modifica l'ampiezza del passo- /'/ì;
di integrazione in modo che gli istanti di valutazione coincidano con qu~ll~ ~
specificati (l'algoritmo di integrazione, nel caso ne abbia necessità, valut~ J·
il sistemà anche in altri istanti di integrazione, ma questi valori non so;~ · ,.,_
;·t,
,
memorizza ti).
La pagina Workspace1/0 consente di specificare le modalità di importazior1e ed,
esportazione dei segnali di ingresso e dei risultati delle simulazioni verso MATLAD'~t
Per definire i punti di ingressi ed uscita dello schema si deve ricorrere ai bloècl{i· .
In e Out della libreria Signa/3 & Systems. Le strutture dati da utilizzare sono'
le stesse dei blocchi FromWorkspacee ToWorkspace(che sono quasi sempre da
~
preferire stante i maggiori parametri che è possibile definire). ''
È anche possibile esportare in MATLAB lo stato del sistema. Con tale termi~e:
Simulink indica i valori assunti nel tempo dai vari blocchi dotati di dinamica (cioè'
quelli presenti nella libreria. Continuous per le componenti tempo-continuo e nella
libreria Discrete per le componenti tempo-discreto). ,
Nel caso di esportazione dello stato è da preferire Putilizzo di variabili di tipo struttura. In'
questo modo è possibile crea.re un'associazione fra le variabili numeriche ed i blocco a cui fanno
riferimento. Infatti la struttura che verrà memorizzata in MATLAB sa.rà del tipo

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

12.6. SISTE!VIICON DISCONTINUITÀ 233 . I


• Bloclc reduction: Simulink sostituisce ai sotto-sistemi dei blocchi sintetizzati più efficienti
computazionalmente;
11 I
• Boolean logie aignals: verifica se i blocchi "logici" sono alimentati con segnali di tipo
boolean. Qualora. ciò non avvenisse viene generato un err ore. Attivando questa opzione
le uscita "logiche" di tutti ì blocchi sono di tipo boolean;
• Parameter pooling: è una opzione che influenza il code generotor, normalmente è utile
lasciarla. sul valore di default on;
• Signa/ storage reuse: è una opzione da utilizzare in presenza di schemi molto complessi
consentendo una gestione più efficiente della memoria;
• Zero crossing detection : consente di disabilitare tale funzione riducendo, di conseguenza.,
l'onere computazionale. I blocchi che hanno delle condizioni intrinseche di zero-crossing
detection, come Hit Crossing, non sono influenzati da questa opzione.
Se durante l'analisi dello schema o durante una simulazione Simulink rileva dei
problemi appare la finestra Simulation Diagnostic. In questa finestra per ciascun
errore viene indicata la natura (errore, avvertimento, ecc.), il nome dei blocchi
coinvolti ed una breve spiegazione; nella parte inferiore della finestra vengono
fornite maggiori informazioni relativamente alPerrore selezionato ed i blocchi dello
schema Simulink coinvolti vengono evidenziati. ·
Qualora si verifichi, invece, una condizione di warning il relativo messaggio
viene mostrato esclusivamente nella finestra di MATLAB.

12.6 Sistemi con discontinuità


Molti sistemi fisici, soprattutto quelli che descrivono l'interazione fra più oggetti,
presentano spesso un 'andamento della soluzione che, in corrispondenza di par-
ticolari eventi, presenta delle brusche discontinuità e molto spesso è necessario
calcolare con notevole precisione l'istante in cui si è verificato l'evento.
Simulink mette a disposizione un algoritmo di zero-crossingdetection che per-
mette di rilevare con precisione l'istante in cui una variabile si annulla.
L'algoritmo di zero-crossing detection se rileva. un cambio di segno nel valore assunto da
una. variabile in due istanti di tempo consecutivi, riduce l'ampiezza del passo di integrazione ed
utilizza i meccanismi di estrapolazione della soluzione per individua.re con precisione l'istante
di passaggio per lo zero. Alcuni blocchi hanno intrinsecamente definite delle condizioni di zero-
crossing detection (ad esempio per il blocco Saturation questo avviene quando l'Ingresso raggiunge
il valore dì soglia). •
Il blocco Hit Crouing <lella libreria Signals & SvstemB permette di calcolare co)1 preci-
sione l'istante in cui l'ingreilso assume un determ inato valore (il parametro Hit crouing offset)
specificandone anche la. direzione: se per successioni crescenti o decrescenti.
L'algoritmo di zero-crossing detection opera solo su segnali dì tipo double e non vengono
presi in considerazione gli istanti di campionamento introdotti dall'opzione Refine Output (a
questo proposito di veda l'Esercizio 12.6}.
Si consideri il seguente esempio: si voglia modellare l'andamento di una biglia di
massa unitaria che venga fatta cadere da un 'altezza di 10 metri in presenza della
sola forza di gravità e nell'ipotesi che l'impatto con il suolo sia achematizzahile
come un urto non perfettamente elastico (con fattore di attenuazione pari a 0.2).
Il corrispettivo schema Simulink è rappresentato in Figura 12.6.
I~
I ~ è .•
·i:·~
I 234 CAPITOLO 12. LA SI.MULAZIONE IN SllvIULJNI(
:~
j
(;;~. J

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

L'andamento della biglia è quello di un grave soggetto ad un'accelerazione


,.
costante fin tanto che non impatta con il suolo. Nel momento in cui avviene
l'impatto la sua velocità si inverte e la biglia inizia a salire mostrando il classico
andamento parabolico.
Lo schema Simulink è costruito intono alla serie dei due integratori che con-
sentono di ricostruire la posizione della biglia a partire dalla conoscenza delle forze
applicate (legge di Newton). In particolare, il primo integratore, la cui uscita rap~ . ,,'
present& la velocità, ha un reset ogni qual volta che la biglia tocca il suolo (uscita
del secondo integratore pari a zero). In ca.so di reset le. velocità riparte da un r ~,
:!;,
valore pari a. -80% del valore che la velocità aveva nell'istante dell'impatto. ~
• {•~. : . l
t.•

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

' Se ai osserva. l'andamento <.lellapoaizione ai noterà lo. notevole precisione con


cui Simulink riesce ad individuare gli istanti di impatto con il suolo .
Con i metodi classici di analisi, in presenza di eventi che mutavano la topolo--.
gio. del sistema, si era costretti a calcolare la risposta del sistema fino all'istante.
immediatamente precedente a quello in cui avveniva il cambiamento (impatto con
il suolo, chiusura di un interruttore 1 ecc.), determinare il valore assunto da tut te
le variabili ed impostare, quindi , un nuovo pr oblema in cui il sistema nella mu-
tata configurazione evolve a partire da queste nuove condizioni iniziali. Simu link
permette di semplificare l'analisi in questi casi: utilizzando, infatti, in maniera
12. 7. SISTE!vII TE.forfPOVARL4.NTI 235

opportuna i blocchi logici (Logical Operator,Relational Operator, Fcn, Switch) è


possibile costruire uno schema la cui topologia può mutare durante l'evoluzione
della simulazione.

12.7 Sistemi tempo varianti


Simulink permette di modellare anche sistemi tempo varianti. Ad esempio si voglia
analizzare il comportamento del seguente sistema

x(t) = t sin (x(t)); x(0) = 0.2


caratterizzato da un'equazione differenziale non lineare a coefficienti non costanti.
Lo schema Simulink è rappresentato in Figura 12.7. La. prima cosa che risalta
analizzando tale schema è la similitudine con gli altri schemi fino ad ora esami-
nati: la dipendenza esplicita dal tempo è ottenuta considerando il tempo come un
ulteriore ingresso del sistema.
Si ricord i che l'approccio proposto da Lord Kelvin (al veda Figur&. 12.2) 11011 faceva alcuna
distinzione fra sistemi tempo-invarianti e tempo-varianti.

X 1
s
Produot Scope
Integrator

sin x
sin

Trigonometrie r•'
.'
Functlon '

Figura 12.7: Schema Simulink per un sistema tempo variante.

Simulink permette di simula.re anche sistemi con ritardo. Si consideri il seguente


sistema
I
'
x(t) + x(t) = x(t - 0.5)
il cui schema Simulink è rappresentato in Figura 12.8.
L'uscita del blocco Transport Delay è pari al valore assunto dall'ingresso 0.5
secondi prima.
Il Transport Delay mem orizza i va.lori dell'ingresso in un bulfer in modo da. poter ricostruire
il segnale ritardato. La dimensione del buffer e il valore costante assunto dall'uscita nei primi
istanti della simulazione poesono essere specificati dall'utente .
Il blocco Variabte lronaport Delay presenta un secondo ingresso per individuare istante , I
per istante di quanto rlt&.rdare il segnale applicato al primo Ingresso. I'
II
236 CAPITOLO 12. LA SIMULAZIONE IN SIMULINK

1 1
s s
Integrator lntegrator1 Scope

X t

~~
X 1-0.5 ffi
- Vi/ ..,.__
Transport
Delay
Time Oelay = 0.5

Figura 12.8: Sistema con ritardo.

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

12.8 Equazioni differenziali con vincoli algebrici


Il blocco Algebraic Constraint opera in un modo alquanto diverso rispetto agli
altri blocchi Simulink. Lo scopo di questo blocco è quello di generare una uscita
che sia in grado di annullare il suo ingresso. Affinchè il problema sia ben posto deve
esistere un loop algebricofra l'uscita del blocco ed il suo ingresso, ovvero un percor-
so costituito esclusivamente da blocchi la cui uscita in t, dipende esclusivamente
dai valori dei rispetti vi ingressi nello stesso istante (cioè in ti).
Questa caratteristica è indicata in Simulink come direct Jeedthrough.I blocchi che ammettono
questa. caratteristica. sono detti anche "memory-less" o "state-less" sottintendendo il fatto che
12.8. EQUAZIONI DIFFERENZIALI CON VINCOLI ALGEBRICI 237

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

Algebraic Constraint1 DispIay1


Constant

Figura 12.9: Schema Simulink per la soluzione di un sistema di equazioni ordinarie


non lineari. ·

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(

In particola.re la terza equazione rappresenta la legge di conservazione della massa.


È evidente che per la soluzione di questo sistema è necessario risolvere contempo-
raneamente due equazioni differenziali ed una algebrica. In questo caso lo schema
Simulink è quello di Figura 12.10 per la cui simulazione è opportuno utilizzare
ode15s essendo il sistema stiff.

i----......__--+---.i D
Scope y1

Scope y2

3
1+ 2+ 3-1
l(z)
Solve
f(z) = O z ~y3~-~
D
Scope y3
Constant

Figura 12.10: Schema Simulink di un sistema algebrico-differenziale.

Si noti che la costruzione dello schema è sostanzialmente analoga a quella pro-


posta dn Lord Kelvin, con l'AlgebroicConstraint che prende il posto dell'integra-
tore nell'equazione algebrica il cui ingresso è l'espressione algebrica da annullare.
Questa classe di problemi è detta DAE (Dilferential Algebraic Equat.ion) ed in particolare
quella vista è la formulazione semi-esplicita. Simulink è in grado di modellare e risolvere solo
questa forma di DAE con l'ulteriore vincolo che il aistem& sia di indice uno 4 •
Nella costruzione degli schemi Slmulink alle volte capita di dover introdurre del loop algebrici
non legati a modelli DAE. La preeen-aa di questi loop può, però, aumentare notevolmente l'onere
computazionale necessario per la simulazione. Un modo per rompere i loop algebrici senza
stravolgere la schematizzazione adottata è quello di usare il blo cco Memory dei Continuous che,
introd ucendo un ritardo pari a.I passo di integrazione corrente, rende non algebrico il loop.

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 .

Esercizio 12.2 Analizzare il comportamentodel sistema descritto dalla seguente


equazione integro-dilferenziale

iJ + 20v = -100 / vdr +u

quando l'ingresso è pari a u(t) = 2sin(4t).


Suggerimento, Ricondurre il sistema ad un problema descritto da
equazioni esclusfoamente differenziali effettuando il cambiamento di
variabilixi = f vd-r, X2 = v.

Esercizio 12.3 Un modello, molto approssimato,per descrive lo scontro fra due


eserciti (Lanchester, 1916) è il seguente:

x = f(t) - ay
?i=g(t) - {Jx

dove x e y rappresentano la potenza dei due eserciti {esprimibile in numero di


soldati), a e fJ sono dei coefficienti di letalità (rappresentano la "p,·ecisioneII dei
colpi}, mentre f e g rappresentanogli eventualirinforzi.
Se, in ipotesi di assenza di rin/orzi, si scontrano due eserciti, uno costituito
da 40.000 uomini con un fattore di letalitd pari a O.i e l'altro costituito da 10.000
uomini con un fattore di letalita pari a 0.9, chi vincei
esercitoconta 20.000 uomini il risultato clella
Se, nelle stesse ipotesi, il seco11do
battaglia quale sarà?
Analizzare l'andamento della ubattaglia"sia nel tempo che sul piano delle fasi.
Individuare il numero di soldati che dovrebbeavere il secondo esercito affinchè il
risultato della battagliasia la distruzione di entrambi i contendenti.

Suggerimento. Non ha alcun significatofisico parlare di un "numern


di soldati" negativo, utilizzare il bloccoSTOP Simulati on per aJTestare
la simulazione non appenauno dei due eserciti è annientato.
Nonostante la sua semplicità, il modelloè in grado di "riprodurre"con
incredibileprecisione tutte le fasi della battagliadi lwo Jima {194~) fra
americani e giapponesi.

I
Ij:
I
240 CAPITOLO 12. LA SIMULAZIONE IN SIMULINK

Esercizio 12.4 Il modello visto nell'esercizio precedentepuò essere leggeNTlente


modificato per rappresentare lo scontro fra un esercito regolaree dei guerriglieri:

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

dove B(t) rappresenta l'angolo di inclinazione del satellite. Analizzare il compor-


tamento al variare del valore di U I sia nel tempo che sul piano delle fasi partendo
dalla condizione iniziale 8(0) = 1r/3 {errore di assetto). Si provi ad utilizzare
l'opzione Re.fineFactor.
Suggerimento. Utilizzare il bloccoRelay. L 1algo1'itmodi zero cross-
ing detection lavora solo in corrispondenzadegli istanti"di campiona-
mento utilizzati dall1algoritmodi integrazione e non in quelli generati
a seguito del Refine Factor.
Esercizio 12 .1 Confrontare la risoluzione che si ottiene acquisendouna tensione
sinusoidale con valore dì picco pari a 1O V tramite un voltmetro digitale a 4 ed 8
bit.
Suggerimento. La risoluzione che si ottiene con uno strumento dig-
itale è pari all'ampiezza del segnaleda analizzare diviso per il numero
di livelli di quantizzazione. Nell'esempio tali livelli sono pari rispetti-
vamente a 24 e 28 . Utilizzaretale relazione per individuare l'ampiezza
dell'intervallo di quantizzazione del Quantizer della libreriaNonlinear.
12.9. ESERCIZI 241

Se non si sceglie opportunamente il valore del Max Step Size aparirà


che le due curve presentano le discontinuità nei medesimi istanti (cosa
ovviamente non corretta) perchè?. '
Esercizio 12.8 Le lancette di 1m orologiosegnanole ore 6, dopo quanto tempo le
lancette delle ore, dei minuti e dei secondi sarnnno allineateper la prima volta?
Suggerimento. Il moto delle lancette può essere schematizzato come
un moto rotatorio uniforme. Utilizzare il bloccoSTOP Simulation
opportunamente comandato.

Esercizio 12.9 Le lancette di un orologioindicano le ore 3, dopo quaflto tempo


si trovernnnoper la prima volta di nuovo ad angoloretto?
Suggerimento, Utilizzareil bloccoSTOP Simulation opportunamente
comandato.

Esercizio 12.10 Gonfronta1·ele soluzione che si ottiene per l'equazione di van


der Pol
x - e (1 - x 2 ) :i:+ x =O
a partire dalla condizione x(O) = l e i(O) = O per t E [O,10], quando e = 7,
utilizzando il metodo di integrazione a passo fisso ed a passo variabile.
Suggerimento. La soluzione dell'equazionedi van der Pol presentfl
delle improvvise variazione che la rendono di difficile integrazione, in-
fatti i metodi a passofi3so, con i parametri di default, non riescono ad
integrare il sistema.

Esercizio 12.11 Analizzare l'evoluzione del sistema descritto dalla seguente e-


quazione
.. 4. 2 O
y + ty + fly =
per t ~ 1 ed a partire dalle condizioni y(l) = 1, y(l) ==1.

Esercizio 12.12 Analizzare il sistema descritto nella Figura JB.11. Nell'istante


t = 5 l'interruttore si apre interrompendo il collegamentofra i due blocchi.

Suggerimento. Per realizzarelo schema utilizzareil bloccoSwitch in


modo che l'ingresso al secondo bloccosia l 'uscìta del primo 'Iì·ansfer
Function prima dell'istante t = 5 e pari a zero successivamente.

Esercizio 12.13 Si analizzi il seguente modello che descrive l'equazione logistica


con ritardo
y(t) = (a - y(t - 1)) y(t); y(O) = 0.1
quando il parametro a assume i valori 0.2 o 1.6.
242 CAPITOLO 12. LA SilvIULAZIONE IN Sil\tIULINI(
I.

.Jf.
:'J'
u=5 + """·~-'
;; t1};.;
·)~{•· •
...l•tf~
•• ..ì"-'•j:
~,.
~:;~.,.

Figura 12.11: Sistema con commutazione. • ..,,


:;y;~
>,'.J.,-
.l~<>
Esercizio 12.14 Si consideri il seguente modello che descrive l'interazionefra un '•Si1'
virus V(t), gli anticorpi F(t) e le plasma celluleC(t) in un oryanismo soggetto ad " 1
, .. f
una malattia virale {Marchuk) ·,.1
.~

J/ . .
'\ V = (h1 - h2F)V ·~t~ti
,..,~~~~~
. • . ;......:.,.
é = ç(m)h 3 F(t - T)V(t - r) - hs(C - 1) •s~·,.
. :1.'~J-;
p - h4(C - F) - hsFV ·::•? n..
m = haV - h1m
dove si è introdotta anche la variabile m(t) che rappresentala quantità di danno
subita dall'organismoe la funzione ç(m) che vale
1 se m < 0.1
ç(m) ={ °(1 -
1
9
m) se 0.1 <-m ~ 1
In particolarela prima equazionedescrive la reazionefra virus ed anticorpi, la sec-
onda descrivela creazionedi nuove celluleplasma a seguito dell'infezione {il ritar- 'l b
do tiene co1itodel meccanismodi riproduzionecellulare),mentre la terza equazione 7:\.i
modellizzala creazione degli anticorpi dalle plasma cellule, la loro perdita dovuta >:ii$.
~-~ I
all'età e al legame con l'antigene. Infine l'ultima equazione descrive il decorso • j:
..\:
'r,

dell'infezionein tennini di aggravamento(primo addendo} o recuperodel paziente ,"';,


;. .
{secondoaddendo}. · · ' .
. ~:,
~~,
As3umendo i seguenti valori per le costanti e le condizioni iniziali: T = 0.5,
= = =
h1 = 2, h1, 0.8, ha 104, h4 0.17, he = 0.5, h1 = 0.12, ha = 8, V(0) =
10-e, C{0) = 1, F{O} = 1, m(O) = O, si analizzi, su un intervallo di 60 giorni,
l'evoluzionedel sistema quando ha vale 10 e quando vale 300.
Suggerimento. Nel vrimo caso il sistema immunitario è in grado di
i debellarela malattia, mentre nel secondo caso vi è una recrudescenza
della malattia stessa.
Esercizio 12.15 Calcolarela balisticadi un proiettile {di massa unitaria} spara-
to 01izzo11talmenteda un'altezza di 8 m con un alzo di 30° e con una velocità
orizzontaleiniziale di 12m/ s2 nell'ipotesi elle agiscala sola forza di gravità.
12.9. ESERCIZI 243

Suggerimento. Scomporre il moto lungo le due direzioni orizzontale


e verticale, nel primo caso si tratterà di 1m moto rettilineo uniforme,
mentre il moto nel piano verticale sarà un moto uniformemente ac-
celerato. La simulazione va interrotta non appena il proiettile colpisce
il suolo. Utilizzare il XY Graph per rappresentare la traiettoria del
proiettile.
Esercizio 12.16 Si analizzi la risposta del sistema raJfigv.ratonella Figura 12.12.
Non appena viene lanciata la simulazione, Simulink genem un messa di warning,
perchè ?
Suggerimento. J due sistemi sono entrambi impropri. La loro con-
nessione a ciclo chiuso crea un loop algebrico.

I
I
~
Il
j
j
5
-2

Figura 12.12: Esercizio 12.16.

Esercizio 12.17 Oltre ai problemi legati ai metodi di integrazione, esistono alcu-


ni problemi matematici detti "mal-condizionati" per i quali piccole variazioni dei
parametri o delle condizioni iniziali producono soluzioni notevolmente differenti.
Si confronti l'evoluzione del sistema
x + 0.05:i:+ x 3 = 7.5cos(t)
a partire da x(O) = 3 e :t(O) = 41 con quella che .,i ottiene partendo da una
condizione leggermente differente: x(O) = 3.1 e x(O) = 4. :·i
; .
6

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

13.1 Sche mi Simulink multi-v ariabili


Si consider i il modello linearizzato della dinamica longitudinale di un aere o in volo
orizzontale in situazione di equilibrio:

±(t) == A x(t) + B u(t)


y(t) = C x(t) + D u (t)
dove il vettore di ingresso u(t) I! costituito da tre componenti: l'angolo di apoller
(misurato in decimi di grado), l'accelerazione in avanti ( ms-~) e l'angolo dell'el-
evatore (gradi). Le variabili di stato x sono la quota rispetto al suolo ( m), la
velocità. in avanti ( ms- 1 ), l'angolo di beccheggio (pitch, misurato in gradi), la sua
derivata (gradi s- 1) e la velocità verticale ( ms- 1). Le prima due variabili di stato
sono anche le uscite del sistema. Si considerino i seguenti valori per le matrici:

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~

I Lord Kelvin, avremmo dovuto utilizzare 5 integratori ed un groviglio di linee di


collegamento.

r---+CJ
Scope-Ingresso

~
...
~
x' = Ax+Bu ... CJ
...
y = Cx+Du
State- Space Scope- Uscita
Dinamicalongitudinaledi un aereo
.·,

Figura 13.1: Diagramma Simulink del moto longitudinale di un aereo. • .J

Guardando lo schema ci si accorge subito di una apparente incongruenza: · il


blocco continua a mostrare un solo punto di ingresso ed un solo punto di uscita,
nonostante il sistema descritto abbia 3 ingressi e 2 uscite (sistema Multi Input e
Multi Output (MIMO)).
In reità Simulink è conscio dell'esistenza di più ingreasi e più uscite, infatti
se proviamo a lancia.re una simulazione, Simulink segnalerà un errore, rilevando
I
13.1. SCHEMJ SIMULINI( MULTI- \/ARIA.BILI 247
l
un'incongruenza fra il numero degli ingressi allo State-Space attivi {uno) e quelli i
previsti (tre). I
Per evitare l'errore è sufficiente inserire nel campo Amplitude del blocco Sine
Wave il vettore

(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

Figura 13.2: Espansione scalare.

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.2 Segnali 1-D e 2-D


Nel paragrafo precedente si è visto che Simulink è in grado raggruppare insieme
più segnali scalari su un'unica linea. In realtà Simulink è in grado di lavorare anche
con segnali intrinsecamente vettoriali, dove cioè il valore della generica variabile y
all'istante ti non è un numero ma un vettore o una matrice .
In Simulink i segnali raggruppati sono indicati come segnali 1-D e chiamati
(impropriamente) con il termine vectors,mentre i segnali intrinsecamente vettoriali
vengono indicati come segnali 2-D e chiamati matrices.
In alcunì blocchi della libreria Source~ è presente l'opzione Interpreter vector parameters
as 1-D. Quando tale opzione è attiva, anche utilizzando come parametri dei vettori il segnale
di uscita. sarà di tipo 1-D (introducendo dei parametri matriciali il segna.le sarà di tipo 2-D a
prescindere dal valore dell'opzione).
Un esempio di uso di segnali 2-D è mostrato nello schema di Figura 13.3 che

,.
13.3. MANIPOLAZIONE DEI SEGNALI MULTI-VARIABILI 249

consente (in modo rozzo) di risolvere il seguente sistema di equazioni lineari

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

Figura 13.3: Esempio di utilizzo di segnali 2-D: soluzione di un sistema di equazioni


lineari.
I
13.3 Manipo lazione dei segnali m ulti-vari abi li
Spesso capita di dover connettere sistemi operanti con quantità scalari con sistemi
operanti con grandezze vettoriali; a tal fine nella libreria Signals & Systems ci sono
i blocchi per modificare la cardinalità di un segnale.
I blocchi più utilizzati a tale scopo sono il Mux e il DeMt1,x il cui funziona-
mento può essere intuito guardando le rispettive icone: jl Mux (DeMux) ha diverse
porte di ingresso ed una sola porta di uscita (ha una sola porta di ingresso e
diverse porte di uscita) e consente di multiplare i vari segnali in ingresso in un
unico canale di uscita multi-variabile ( di separare un segnale multi-variabile nei
suoi costituenti).
Un blocco Mux può raggruppare assieme sia segnali 1-D che segnali 2-D. È
opportuno precisare però che, in presenza di segnali di ingresso 2-D, l'uscita del
Mux sarà un Bus Signal. Un Bus Signa[, graficamente rappresentato da tre linee
parallele, può essere connesso solo a blocchi "virtuali" quali il DeMux o il blocco
Goto.
250 CAPITOLO 13. SISTEA-IINIULTI-1/ARIABILI

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 le uscite del DeMux sa.ranno vettoriali e di uguale cardinalità. Cioè se il numero di


uscite è 2 e il segnale di ingresso ha cardinalita 4, si avranno due uscite di cardina.lit~
2 (le prime due componenti del segnale di ingresso sal'o.nno raggruppa.te nel prinio
segnale di uscita).
- Nel caso in cui la cardinalità del segnale di ingresso non sia un multiplo intero,
Simulink segnala l'anomalia e decompone il segnale in maniera non uniforme. Ad ·
esempio se la cardinalità. del segnale di ingresso è 5 e le porte blocco DeMuz sono 3,
le ire uscite avranno, rlspetU vamenle, dimensione pari a 2, 2 e l'ultimo. 1. . !."\ ,
., .
.... .
• Parametri vettoriali
- Se il campo Number o/ outputs è un vettore di numeri positivi, allora, analogamenté
a quanto visto per il Mux, il blocco avrà un numero di porte di uscite pari alla
cardinalità del vettore ed i vari segnali di uscita avranno le dimensioni specificate.'
nel vettore parametri. Ad esempio se nel campo para.metri si introduce il vettore
(~ 4 1] il DeMui avrà tre porte di uscita le prime due vettoriali con cardinalità
rispettivamente pari a 2 e a 4 e la terza uscita scala.re (ovvia.mente la cardinalità del
segnale in ingresso al DeMux deve essere 7).

.I
13.3. MANIPOLA.ZIONE DEI SEGNA.LI MULTI-VARIA.BILI 251

- La presenza di un elemento -1 nel vettore parametri indica che la dimensione della


relativa uscita deve essere determinata dinamicamente . Ad esempio introducendo
il vettore (2 -1) , il Dr.Muz avrà due porte di usdtl\ : la prima di cardinalità 2 e la
seconda pari alla differenza fra la cardinalità del 9egnale di Ingresso e la. cardinalità
della prima uscita.
• Parnmr.tri arrnv di celle (utilizzabile solo nella moda.lit à Bus selection mode)
- Con questa notazione ogni cella rappresenta un'uscita: se all'interno della cella vi è
uno scalare, l'uscita sarà un segnale 1-D della cardinalità specificata; menLre se si
introduce un vettore di due elemenLi, l'uscita sarà un segnale 2-D delle dimensioni
specificate . Ad esempio Introducendo quale parametro { 1 , { ['2 4], 3}} l'uscita
del DeMuz sarà costituita da due segnali. li primo scalare ed il secondo (un Bus
Signa{) costituito da un segnale 2-D di dimensi,mi 2 x 4 e da un segnale 1-D di
cardinalità 3.

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

Figura 13.4: Esempio di utilizzo congiunto di Fcn e Mux.

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.

Esercizio 13.2 Il comportamento di un edificio di tre piani soggetto ad una scos~


sa sismica può essere, in prima approssimazione,valutato utilizzando il seguente
modello
Jvfx + Kx = Bf(t)
I

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

Analizzare le oscillazioni dei tre solai in presenza di un'onda sismica schematizzata


come una sinusoide di frequenza 10 rad/s. Si analizzi poi la risposta quando la
pulsazione dell'onda sismica è pari a 100rad/s.
Suggerimento. Riportare il sistema nella forma normale ed utilizzare
il bloccoState Space. Il sistema presenta una frequenza di risonanza in
f
r'
,l
·1

l
..
13.4. ESERCIZI 253

corrispondenza della pulsazione 13.3 rad/s; di conseguenzain presen-


za del secondo ingresso il sistema entra in risonanza, cioè l'ampiezza
delle oscillazioni andrà sempre più crescendo. Nella pratica è la pre-
senza di frequenza di risonanza accordatacon l'onda sismica a provoca
il crollo dell'edificioi gli edifici anti-sismici "intelligenti" variano di-
namicamente le proprie frequenze di risonanza in modo da non esse1'e
accordatecon le onde sismiche.

Esercizio 13.3 Si costruisca lo schema Simulink relativo al seguente sistema

x2 - x1 (xf + 2x~- 10) 'l


! .
- xf - 3x~(xf + 2x~- 10)
e se ne analizzi J1evoluzionea partire <lallecondizioni x1 (O)= 11 x2(O)= 2.
Suggerimento. Si usi un blocco Fcn per realizzare il termine la
parentesi.

Esercizio 13.4 Il modello linearizzato della dinamica laterale di un aeroplanoè


il seguente

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)

gli ingressi corrispondonoa

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:

-0.746 0.387 -12.9 o 0.952 6.05 o o I


0.024 -0.174 4.31 o - 1.76 -0.416 o o I
A=
0.006 -0.999 -0.0587 -0.0369 0.0092 -0.0012
,B=
o o
1 o o o o o o '•O
o o
o
o o o
o
o
- 10
o
o
-5
20
O
O
10 I 1
254 CAPITOLO 13. SISTE.MI lvIULTI- VARIABILI

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

Suggerimento. Per implementare la lege di controllo è r,ecessario


poter accedereall 'intern vettore di stato. A tal fine è necessario ampli-
are le variabili di uscita in modo da considerare quali ulteriori uscite
/ittizje anche le variabili tutto lo stato. La perturbazionesull'angolo di
defleuione del timone si traduce nella condizione iniziale da imporre
alla relativa variabile di stato.
Capitolo 14

Sottosistellli

La leggibilità e la chiarezza di uno schema ei riduce quando il numero dei blocchi


presenti diviene elevato. In realtà. è sempre possibile scomporre uno scbema com-
plesso in n-sottoschemi più semplici.
Scomporre uno schema complesso nei suoi costituenti di livello inferiore, oltre che
aumentare la chiarezza del tutto, permette un'analisi ed una messa a punto molto
più efficace potendo testare separatamente ed indipendentemente la validità e la
correttezza dei singoli componenti, e solo in un secondo momento la validità dello
schema nel suo complesso.
Non esistono regole precise per stabilire quando sia necessario che uno schema
venga decomposto, né criteri per individuare quale ne è la migliore decomposizione:
a volte è preferibile una schematizzazione su due livelli, altre volte una maggiore
gerarchizzazione dei costituenti. Il risultato da ricercare, sulla base della esperienza
r
e sensibilità dell'utente , è un compromesso fra la leggibilità dello schema ed unn 'I ,'
eccessiva gerarchizzazione che può far perdere la visione d'insieme del problema.
Vediamo come Simulink permett e di creare dei sotto sistemi.

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

Figura 14.1: Esempio di utilizzo dei sottosistemi.

blocchi elementari in un sottosistema. In entrambi i casi questi oggetti divengono


dei nuovi "blocchi'' Simulink che possono essere utilizzati per la costruzione di
nuovi schemi. 1
Un sottosistema può contenere a sua volta altri sottosistemi realizzando un'or-
ganizzazione gerarchica dello schema su un numero arbitrario di livelli.
Vediamo come costruire un sottosistema con un esempio. Utilizzeremo lo
schema della nave presentato in Figura 11.4 (pag. 198). Si selezionino tutti gli
elementi dello schema a valle del blocco degli ingressi ed a monte del blocco dl
uscita. Quindi per creare il sottosistema basta selezionare l'opzione Createsubsys:-
tem dal menu Edit (la stessa operazione può essere ottenuta utilizzando il relativo
comando del pop-up menu o la combinazione CTRL-G.)
Fatta questa operazione, al posto dello schema della nave comparirà un blocco
simile a quello riportato nella parte superiore della Figura 14.2. Simulink, au-
tomaticamente, associa al blocco così costituito il nome Subsystem; per evitare
1 Quelli esposti sono rispettiva.mente i cosidetti approcci top-down e bottom-up; in genere il
primo è da preferire in fase di analisi ed il secondo in fase di progetta:zione e sintesi.
14.l. CRE.4ZIONE DI UN SOTTOSISTEMA 257

[: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 ,

sìmln lnl 0.-1 rolflO 1imout

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

mente in presenza di sottosistemi, apecia.lmente se sono innestati, e qualora vi aia i


l' la necessità di mettere in relazione quantità definite in parti diverse dello scherna 1 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

<:&1. S2> 2,31 i


Goto From
Display
I

Figura 14.3: Collegamento senza fili.


14.3. lvlA.SK 259

Ad ogni blocco Goto è associata un'etichetta, nel caso dell'esempio è label.


Introducendo in uno o più blocchi From la medesima etichetta. si crea un "col•
legamento sotterraneo" tale per cui tutti i segnali che 1:mtrano nel Goto escono dai
From. ·
Si noti che è necessario definire anche l'ambito di Yìsibilità delle etichette, cioè
da quali parti di uno schema un From può far riferimento ad un particolare Goto.
Le scelte possibili, specificabili fra i para.metri del Goto sono:
• global: il Gotoè accessibile da qualunque punto dello schema;
• local: il Goto è accessibile solo dall'interno del sottosistema in cui è col-
locato. Il nome dell'etichetta compare nell'icona del blocco racchiusa fra
parentesi quadre [];

• Scoped: in questo caso è necessario introdurre nello schema anche il blocco


Goto Tag Vi8ibility. Il Goto è accessibile dall'interno del sottosistema in
cui è collocato, dal sottosistema dove è collocato il Goto Tag Visibility e da
tutti i sottosistemi gerarchicamente inferiori a questo. Il nome dell 'et ichetta
compare nell'icona del blocco racchiusa fra parentesi graffe { }.

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

•'

Figura 14.4: Mask Editor.


·•·

Questa finestra è composta da tre pagine, ma prima di addentrarci nella lorq


analisi è importante sottolineare che l'operazione di mask non riguarda solo gli
aspetti grafi.ci del sottosistema, ma coinvolge anche le modalità di gestione delle
variabili. Creando un mask tutte le variabìli utilizzate all'interno del sottosistema
vengono mascherate, cioè non sono più accessibili dall'esterno del sottosistema!:!
l'unico modo per assegnarne i valori è quello di utilizzare i parametri del blocco
definiti tramite il Mask Editor.
Per ogni blocco mask Simulink crea un workspace locale che è parte del workspacedel modello
e del workspace dì ciascun dei sottosistemi che contiene il blocco. Un bloc~o mask pub accedere
a tutte le variabili definite in modo univoco nella sua gerarchia di costituenti.

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

14.3.1 La pagina Icon


Questa pagina consente di specificare l'aspetto grafico del blocco. La pagine risulta
logicamente divise in due parti: la prima costituita dal campo Drawing commands
serve a descrive Picona del blocco, mentre i parametri al di sotto consentono dì
specificare il modo in cui la stessa appare.
In particola.re
• !con frame: specifica se visualizza.re o meno il rettangolo contornante il bloccoi
• /con transparency: specifica se il disegno dell'icona deve coprire o meno eventuali infor-
mazioni che Simulink inserisce automaticamente nell'icona del sottosistema quali il nome
delle portej
• /con rotation: specifica se l'orientamento del disegno dell'icona deve cambiare in presenza
di una rotazione del bloccai
• Drowing coordìnates: specifica il riferimento utilizzato per il disegno dell'icona..''Le scelte
possibili sono illustrate in Figura 14.5.

max(X), max(Y) I. I

min(X}, min(Y) O,O larghezza,aJ1ezza


o.o del blocco

Figura 14.5: Significato delle opzioni Drawing coordinatesdel Mask Editor.

Ali'interno di una icona è possibile inserire:

• Testo tramite i comandi: text che consente di specificare anche la po-


sizione relativa del testo all'interno dell'icona e port.-1.abel che permette
di specificare una etichetta da associare alle porte del blocco.

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

14.3.3 La pagina Documentation


Consente di documentare il funzionamento del blocco definendo:

• Mask type: che permette di specificare il tipo di blocco. È una informazione


utile per classificare i vari blocchi. Si noti che questo campo è presente in
tutte le pagine del Mask Editor.

• Block description: è la sintetica descrizione del blocco che compare nella


parte alta della finestra dei parametri;

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

,) M,uk f ct,111111h m-uH/5muolh ~qu.,m ""'"'" .. ['!)IJ

Ulock f' a ta mctcll Sr>rmlh Sqiw1e Wuffl El

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

14.3.4 Un esempio di mask


Si voglia realizzare un blocco la cui uscita sia un'onda quadra i cui fronti di salita
e discesa siano smussati (smooth):
• Si disegni lo schema Simulink corrispondente (vedi Figura 14.7); riempiendo
i parametri del blocco Pulse Generator con le seguenti variabili: T per il
periodo, A per l 1ampiez2a lasciando inalterati gli altri parametri. Inoltre si
pongano i parametri del blocco Trans/er function a 50 il numeratore e [T
60] il denominatore. ·
• Selezionare i blocchi ed eseguire l'operazione di Createsubsvstem. Cambia.re
il nome del sottosistema in Smooth Square Wave e settare l'opzione fuat
as atomic unit dei parametri del blocco sottosistema.
• Selezionare il sottosistema ed eseguire l'operazione di Mask subsystem riem-
piendo i campi del Mask Editor come segue :
- Pngina /con: porre nel campo Mask Type la stringa Modi:t'ied square
wave generatore nel campo Drawìng commands il comando
plot(x,y,x+l,z,x+2, y,x+3,z);
- Pagina Jnitialization: Inserire le due variabili T e A. Per fare questo
premere una prima volta il bottone Add ed inserire nel campo Prompt
la stringa Ampiezza. e nel campo Variable il nome della variabile A.
Premere un seconda volta il bottone Add inserendo nel campo Prompt
la stringa. Periodo dell'onda quadra (aec) e nel campo Variableil
nome della variabile T. Infine nel campo lnitialization commandsporre
x=0:0.1:1; y=1-exp(-10*x); z=exp(-!O•x);
- Pagina Documentation: porre nel campo Block description la stringa
Questo blocco produce un'onda quadra i cui fronti di salita
e di discesa sono smussati e nel campo Block helpla stringa. Questo
blocco è una versione modificata del generatore di onde qua-
dre.

Nella Figura 14.7 è mostrata l'icona del blocco così realizzato e la corrispondente
schermata dei parametri.

14.4 Esecuzione condizionata


Alle volte può capitare che l'esecuzione di alcune parti di uno schema sia superflua
se non addirittura errata allorquando alcune variabili assumono specificati valori.
In queste situazioni è preferibile (ed alle volte necessario) inibire la valutazione di
tali parti dello schema, e ciò anche per ridurre Ponere computazionale.
A tal fine è necessario raggruppare tali parti di schema in dei sottosistemi la cui
esecuzione sarà condizionata al verificarsi di determinate condizioni definite per
14.4. ESECUZIONE CONDIZIONATA. \ 265

N@ffit s!Q!•I

I
........
,_, t i .... ,•

-··
,_.,

Figura 14.7: Schema Sìmulink di un generatore di onda quadra smussata ed il suo


blocco mask realizzato. ·

mezzo di alcuni blocchi particolari che vannÒ inseriti all'interno del sottosistema
stesso:

• Enable: abilita l'esecuzione del sottosistema. Se il valore di ingresso alla


porta corrispondente (posta su un lato diverso rispetto agli altri ingressi del
blocco) è TRUE (valore i O) alloraSimulink valuta il sottosistema e aggiorna
i valori dello stato e delle uscite; altrimenti è come se il sottosistema non j
esistesse.
È possibile specificare se le variabili di stato devono conserva.re il valore assunto subito
prima del reset (condizione hold) o imporre che ogni volta che il sottosistema è attivato
esso venga re-inizializzato a.Ila condizione iniziale (condizipne reut) .

• Trigger. il sottosistema è valutato, una sola volta, in corrispondenza del ver~


ificarei di un cambiamento nel segnale di trigger. È possibile specilìcare quali
fra i fronti di cambiamento del segnale devono essere presi in considerazione
(tale informazione è evidenziata anche nell'icona del blocco).

i È anche possibile associare l'esecuzione del sottosistema al verificarsi di detern1inate


condizioni all'interno di una S-function (opzione functiç,n-call).

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

Ad esempio volendo costruire lo schema di Figura 14.8 in cui il sottosistema


presenta sia una abilitazione che un segnale di trigger, si può ricorrere al blocco ,JL......
-~·•:':,
Enabled and Triggered Subsystem. Il sottosistema è abilitato quando l'ingresso di .._''~
,..:l

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

[
~
....

F igura 14.8: Sottosistema con Enabled e Trigger.

La collocazione di questo blocco sullo schema è analoga a quella di un normale


blocco. Se vi si effettua un doppio clic sopra comparirà. la struttura del sottosistema
compostade. una lnPof't connesse.direttamentead une. OutPo,·te due blocchi
I j sconnessi dal resto dello schema. Lo schema vero e proprio andrà. disegnato 11al
posto" della linea che' connette la porta di ingresso con quella di uscita (ovviamente
è possibile aggiungere ulteriori porte di ingresso e/o uscita). La presenza degli altri
due elementi consente di specificare le condizioni di esecuzione del sottosistema.
f Si noti che il sottosistema. ha. il bordo spesso, cioè è atomica la sua esecuzione
e ciò deve accadere per tutti i soUosietemi ad esecuzione condizionata.
Nell'ultima versione di Simulink sono stati introdotti anche una serie di blocchi
i cui nomi ricordano le istruzioni per il controllo di flusso dei comuni linguaggi di
programmazione. L'idea di fondo è, infatti, quella di considerare un sottosistema
alla stregua di una funct ìon la cui esecuzione è legata al verificarsi di determinati
14.4. ESECUZIONE CONDIZIONATA 267 j;
I'
I
eventi e può esservi la. necessità. di richiamarla anche più volte ad ogni passo di
integrazione .
Ad esempio si supponga di dover calcolare, ad ogni passo di integrazione la
seguente espressione
tot=O;
for i=O:nwn_iter
tot::tot+2;
end

Lo schema di Figura 14.9 è in grado di farlo. Si noti che si è utilizzato il valore


external per l'opzione Source o/ number o/ iterationin modo da utilizzare quale
valore del numero di iterazioni un parametro esterno e si è posto a reset l'opzione I
States when starting. Inoltre si è attivata l'opzione lnherit aample time del blocco
Memory. I
I
I

i

II

H. tVlllori lii I ...}


R1111p
For l11fl tor
Subsysl• m

i il:..'' ' ._... , ~~.:i:.f ~~ .

Figura. 14.9: Sottosistema con blocco Fur.

I costrutti per il controllo di flusso supportati da Simulink sono:


I •

• For Iteration: il sottosistema viene ripetuto, ad ogni paaso di integrazione,


un numero fisso di volte. Il valore delle ripetizioni può essere sia un parametro
che un ulteriori ingresso.

• If consente di realizzare una struttura tipo


IF espressione
268 CAPITOLO 14. SOTTOSISTElvII

viene eseguito il sottosistema connesso con la prima porta di us-


cita del blocco
ELSEIF espressione
viene eseguito il sottosistema connesso con la seconda porta
ELSEIF espressione
viene eseguito il sottosistema connesso con la terza porta
ELSE
viene eseguito il sottosistema connesso con l'ultima porta
END

È possibile utilizzare più segnali di ingresso (nelle espressioni vanno indicati


come u1, u2, ecc. ed un numero arbitrario di condizioni ELSEIF ognuna
caratterizzata dalla sua porta di uscita (basta inserire le relative espressioni
nel campo parametri separate da una virgola).
I sottosistemi attivati dalle diverse condizioni di IF devono possedere una
Action Port.
• Switch Case consente di determinare quale fra i sottosistemi pilotati deve
essere eseguito sulla base del valore assunto dal segnale di ingresso.
I sottosistemi attivati dalle diverse condizioni dello SWITCH devono avere
una Action _fort. . ·
• While Iteration: il sottosistema è eseguito ciclicamente, ad ogni passo
di integrazione, fintanto che non si verifica una specificata condizione (o si
raggiunge un numero massimo di iterazioni).
Si noti che i sottosistemi attivati tramite condizioni derivanti da un blocco IF
o da un blocco Switch Case devono essere atomici, così come lo devono essere i
sottosistemi che contengono i blocchi FOR o While.

14.5 Un esempio: un manipolatore planare


In questo paragrafo verrà descritto come costruire uno schema di un sistema un
pochino più complesso: un manipolatore planare.
Tale robot, descritto in Figura 14.10, è costituto da due bracci (detti general-
mente link) connessi tra loro e con il basamento attraverso due giunti rotoidali. Sul-
Passe dei giunti sono calettati altrettanti motori che, operando quali azionamenti,
sono in grado di modificare la postura del manipolatore.
La dinamica del robot è descritta dalla seguente eql).azione

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)

Figura 14.10: Manipolatore planare a due link.

Se si assuma che i due link siano identici e di lunghezza 0.5 m esplicitando i


di versi legami funzionali si ottengono le seguenti matrici

50 cos (q2 ) + 200 25 cos (q2) + 32.5 )


B (q) - ( 25 cos (q2 ) + 32.5 122.5
-25 42(241 + 42)sin (q2) )
( ql
25 sin (q2)

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

I 270 CAPITOLO 14. SOTTOSISTE!vtI


--~'
..ì.\,t
, ·r"J.r

---------------10ut l ln114------ -----,

Coppiedi gravità <,,


.,r'f1.•
·':?.,~·
,_,,.
----------iC)ull
I
Coppiedi Corlolis

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

un segnale di cardinalità 4).


I
•:
1;
1~~w
-I. . 11

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

che si ottiene. Questo consente di prevenire errori subdoli di difficile individuazione .


In maniera del tutto analoga è stato realizzato il sottosistema relativo alla forza
di gravità.
Note le coppie applicate è possibile calcolare le accelerazioni ai giunti sfruttando '
la relazione q = B(q) - 1 (-h - g + r). Operazione effettuata dal blocco Matrice di
Inerzia rappresentato nella Figura 14.13. Nella parte più a sinistra di tale sotto- ~,...(
sistema. vi è il calcolo dei vari elementi della matrice B. Tali elementi vengono
prima. raggruppati su un unico segnale di cardianlità. quattro e poi, utiliz-zando il ;.,;.,
_ .
blocco Rejhape,riorganizzati in modo da formare una matrice 2 x 2. Per otte nere
.Jf~
'{1·' ..
questo risultato si è posto al valore customize il parametro Output dimensionality ~
:;i,.I .4
del blocco Reshape in modo da indicare che l'uscita dal blocco è un segnale 2-D e
specificandone le dimensioni con il parametro Output dimensions posto a [2 2] .-
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

Figura 14.13: Sottosistema dedicato al calcolo delle accelerazioni si giunti.

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.

In questo schema la dinamica del robot è stata mascherata in un mask a cui


I
è stata associata un'icona auto-esplicativa realizzata tramite i seguenti comandi
inseriti nel campo Drawing commands del Mask Editor
I
272 CAPITOLO 14. SOTTOSISTEMI

plot ( (O 19] > (O O] • [6 10 21] , [O 12 17))


plot((22 20 23), (15 19 20) ,(22 25] ,[15 16])
plot([O 2). (-2 O], [2 4], (-2 O], (4 6]. [-2 O], (6 8])
plot([-2 O], (8 10). (-2 0],(10 12],(-2 O])
plot([12 14),(-2 O], [14 16).[-2 0),(16 18],(-2 O])
plot(-15,-15)i plot(40,40)

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

Figura 14.15: Schema del controllore.

Nella Figura 14.15 è rappresentata la struttura del controllore impiegato. Es-


so è un controllore di tipo PD (Proporzionale - Derivativo) in cui le costanti di
proporzionalità sono assunte identiche per i due giunti e pari a K P = 3750 e
KD = 750.
Tornando alla Figura 14.14 si vede che i riferimenti per i giunti sono genera.ii
dal sottosistema in alto a sinistra (espanso nella. Figura 14.16). Le traiettorie sono
calcola.te imponendo alle velocità il classico profilo trapezoidale mostrato nella
parte inferiore della medesima figura. :
L'ultimo elemento che rimane da analizzare dello schema di Figura 14.14 è il
blocco lviATLAB Function all'estrema destra. Esso serve per rappresentare il moto
del robot nel suo complesso . A tal fine il blocco richiama la la seguente funzione
MATLAB: ·;

function mygraph(q) i
x1=cos(q(1));
y1=sin(q(1));
x2=xl+cos(q(1)+q(2));
14.6. ESERCIZI 273

i.

fil •-mento velulO pnm•


glv•t•

Rlltrimo•I• Ytltoltl .. , .. d, a••···

Figura 14.16: Calcolo delle traiettorie di riferimento.


1
y2=y1+sin(q(1)+q(2));
plot([O xl x2],[0 yl y2]); àxis([-2 2 O 2]);
Si noti che , non essendo previsto alcun parametro di uscita della funzione, si è posto a. zero
il campo Output dimension del blocco MATLAB Punction.
L'utilizzo della finestra. grafica di MATLAB, sebbene migliori la. qualità della. rappresen-
tazione, aumenta notevolmente i tempi di calcolo. Questo inconveniente può essere pa.rzla.hnente
superato ricorrendo diretta.mente alle proprietà. degli oggetti grafici descritti nell'Appendice A.
Il risultato della simulazione è mostrato nella Figura 14.l 7. Il confronto fra la
traiettoria desiderata e quella reale è stata ottenuta usando il comando
simplot({out rif})

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=

±1= [l3i- ì1F (x )) x i Ù·


. r;f~ ....
....

±2 =(/32- ì2F(x ).Jxz \~~tr;,


-«•~:J,',~
,
·-:~1~
x 3 = [/j3 - ìJF(x)J X3
• "'Y .,..,
.{I
•• ~ ....>·:1
,

dove I
i
3
F(x ) = L OiXi i

f= l

tutte le costanti sono numeri positivi ed in par·ticolare /Jirappresenta il tasso nat- . . .. I


f•t,~-p '•1

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\ ..
~~~'
....

Suggerimento. Realizza1·ela /unzione F(x) mediante un group. '


,_i.
,
14.6. ESERCIZI 275

Esercizio 14.2 Generalmente la forza prodotta da una molla è ipotizzata pm-


porzionale con lo spostamento. In alcune circostanze. questo modello risulta.una
semplificazione eccessiva. Un modello più sofisticato è la così eletta molla-rigida
(hard spring • Dujfmg 1908) che ipotizza che la forza cresca in modo più che
proporzionalecon lo spostamento.
Si confronti il compo1·tamentodi un sistema massa-molla p1·ivodi smorzamen-
to sollecitato da un forzamento tipo u( t) = A cos(0. l t) considerando i seguenti
modelli per la molla:
modello lineare molla-rigida
ky ky + k2y1
dove y è lo spostamento rispetto alla posizione dì equilibr-io.Si assuma unitaria
la massa, k = 0.3 N m- 1 , ka :::=0.02 N m- 3 e l'ampie.~zadel forzamento .A pari a
O.lN.
Si confrontino, inoltre, i due modelli nel caso in cui agisca un forzamento di
ampiezza maggiore: A = 2 N.
Suggerimento. Costruire due distinti sottosi:Jtemi ognuno dedicato
alla simulazione di uno dei due modellì della molla ed utilizza,.e alter-
nativamente questi sottosistemi all'intemo di un'unico schema comp-
lessivo del sistema.
j
In presenza di piccoli spostamenti rispetto alla posizione di equilibrio I
i
I
i due modelli forniscono risultati praticamente identici, mentre all'a-
umentare dello spostamento la rispo3ta che .,i ottengono nei due casi
diviene differente.

Esercizio 14.3 Si costruisca lo schema Simulink di un robot Carte3iano a due


bracci il cui modello è: I
i

M(q)ij + h (q, q) + f (q) = r

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

h(q,q) - -0.163 <12(2<i1+ <12)


sin (q2) )
( 0.163 qfsin (q2)
5.3 sgn (<i1))
f (q) = ( 1.1 sgn (<i2)
276 CAPITOLO 14. SOTTOSISTEMI

Inoltre si assuma che esistano dei fine-corsa meccaniciper i vari giunti: lq1IMAX -
2.3 rad e lq2IMAX = 2.15 rad.
Capitolo 15

Sistellli tempo discreto

Fino ad ora abbiamo considerato esclusivamente sistemi descritti <la equazioni


differenziali; esistono però anche sistemi descritti da equazioni alle differenze. In
questi sistemi le grandezze non variano con continuità, ma solo au intervalli di
tempo predeterminati e per questo vengono detti sistemi a tempo-discreto. Questi
modelli scaturiscono sia da sistemi intrinsecamente discreti che da approssimazioni
di modelli continui in cui si ha conoscenza dei segnali di ingressi e di uscita solo
in determinati istanti di tempo. Tutti i sistemi tempo-discreto posson o essere
simulati in MATLAB ricorrendo ad una struttura tipo for, ma questa soluzione
non è ottimale computazionalmente (si veda quanto detto nel Capitolo 7) 1 e non
offre la visione d'insieme che è possibile avere da uno schema Simulink. Inoltre
scrivere algoritmi per la simulazione di sistemi descritti da equazioni alle differenze
l
può risultare alquanto complesso in presenza di elementi caratterizzati da differenti
intervalli di evoluzione o da istanti di evoluzione non sincroni fra loro; Simulink,
ìnvece 1 risolve tutti i problemi di sincronizzazione e di tempificazione in modo
trasparente all'utente.

15.1 Simul azione di equazioni a lle differ en ze


Si consideri la, seguente equazione alle differenze

y(k + 1) =ay(k - 1) + u(k), y(-1) = 1

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

assumere la y al passo successivo (cioè è proprio y(k + 1)} e questo consente di


chiudere il loop.

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

continuo; infatti le modalità di costruzione sono sostanzialmente le stesse avendo {'~:.;.


}J ..,
sostituito all 'integra.tore il blocco Unit Delay. . ::;"].
f;;tf·
··~~
15.2 Un esempio: il ripopolamento di un lago ti
Si consideri ii seguente modello che descrive il ciclo evolutivo di una specie di pesci
{Leslie 1945). In particolare si può individuare come varia.bile di stato Xi(k) il nu- ·,\','.t
•r ,.,,~
"
~.'.!'?
~i:4
mero di femmine di età i nell'anno k-simo. I fenomeni che interessano l'evoluzione ..
,!,; ~.r:..
della popolazione sono sostanzialmente l'invecchiamento (governato da opportuni t!
coeffidenti di sopravvivenza s,,
che tengono conto dell'interazione con i predatori \
e delle morti naturali) e la riproduzione (governata da opportuni coefficienti di .
;: ../}\..
~-
fertilit.à h), Il modello complessivo può quindi essere scritto come:
i
X1(k + 1) so U1x1(k) + f2x2 (k) + hxa(k) + f4x4(k) + hxs(k)) •. '. -• i-
._
'\~,ucr
,! Xi(k + 1) = S1X1(k)
·;~ \~g
~,}.•.,.1r
~~
_.,.fl
X3(k+ l} - S1X2(k) (15.1) H

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

So= 0.01 li= o


81 = 0.5 h = 55
82 = 0.9 h = 69.5
83 = 0.9 /4 = 90
S4 = 0.5 /s =23.5

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

15.3 Sistemi con differente Sample time e sistemi ..


ibridi
!.
A volte è necessario operare con blocchi che presentano differenti intervalli di
campionamento. È sufficiente a tal fine specificare l'intervallo di campionamento
dei singoli blocchi e Simulink provvederà alttopportuna sincronizzazione dei tempi
in fase di simulazione. ·:'.
-~
~ ",i
Fra i metodi di integrazione esistono due varianti discrete deputate alla simulazione di sistemi ,,;) .
~

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

Simulink è anche in grado dì gestir e la presenza di sfasamenti fra gli istanti


di campionamento. Inserendo nel campo Sample Time un vettore di due elemen-
ti, il secondo valore sarà interpretato come offset. Nella Figura 15.2 è mostrata
l'evoluzione di due sistemi discreti caratterizzati da differenti tempi di campiona.-
mento: il primo ha un periodo di campionamento di 1 s, mentre il secondo ha
un periodo di 0.5 s con un istante di campionamento sfasato rispetto al primo di
0.3 s in ritardo (ottenuto inserendo nel campo Simple Time del secondo blocco
[0.5 0.3]).

Z110,01dt1
Ho14
..,....!ft,e , 1

11•
• w,. ,

Figura 15.2: Sistema con differenti tempi di campionamento.

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

Esercizio 15.3 Risolvere il seguente p7'oblemaposto da Leonardo da Pisa nel


1202: "Se partiamo con una coppia di conigli, un maschio ed una femmina, quan•
ti conigli avremo dopo un anno, se si ipotizza che un coniglio impiega un mese
per diventarefertile, ed ogni coppia di conigli generi una coppia di coniglietti (un
maschio ed una femmina) ogni mese r"
Suggerimento. Leonardo da Pisa è più noto come Fibonacci, così
intmdua.,ela ~erie che porta il suo nome.

.I Esercizio 15.4 Un metodo per il calcolodella radice quadratadi un numero a è


quello di prncedereper successive approssimazioni. Verificareche il sistema ·

x(n + l} = x(n) + a - x(n) 2

per a = ¼ ed a = ½ calcolala radice quadrata di a qualunquesia lo stato inizial~


purchèO~ x(O) ~ 1. Il metodo funziona solo per numeri positivi minori dell'unità.
Esercizio 15.5 Si consideri il modello di sviluppo di una specie animale in un
ambiente camtterizzato da 1isorse limitate '

x(k + I) = x(k) + a [ 1 - ~:z;(k)]x(k) + u(k)


dove il termine fra•parentesi quadrerappresentail tasso di crescita istantaneo ed è
influenzato dal livello di popolazioneattuale (in particolaree rappresentail numero
massimo di individui che possono coesistere). Analizzare l'influenza dei parametri
a e e nell'evoluzionedella popolazionein ipotesi di ingresso nullo.
Esercizio 15.6 Realizzare lo schema Simulink della trasformazione di Cremona

x1(k + 1) = x1 (k) cos(a) - xi(k) 2} sin(a)


(x2(k) -
(k} - x1(k} 2) cos(a)
xi(k + 1) = x1 (k) sin(a) + (:Z:2
15.4. ESERCIZI 283

ed analizzarele soluzioni che si ottengono scegliendoa = 1.328 e le seguenti coppie


di condizioni iniziali
(O.I, 0.1), (0.2, 0.2), (0.5, 0.5), (0.6, 0.6)

rappresentandole soluzioni sovrappostesul piano delle fasi utilizzando l'opzione


' . ' dell'istruzione plot.
Esercizio 15.7 n seguente modello di Str♦eeter-Phelp.'J (19t5) permette di analiz-
zare la qualitd delle acquefluviali prendendo quali parametri di analisi la concen-
trazione di osaigeno dìsciolta (DO) rispetto alla richiesta di osaigeno neceaaaria
per i processi biologici(BOD). Studiarne l'evoluzione
DO(k + 1) = 1.335 + 0.8142DO(k) - 0.00001 BOD(k)
BOD(k + 1) - 0.7455 BOD(k) + 0.1471 DO(k - 3)

Suggerhnento. Utilizzaredei blocchiUnit Delay per ottenere DO(k-


3).

Esercizio 15.8 Il processodi restituzione di un capitale mediante rate semestrali


può essere descritto mediante l'equazione

1/Je= (1+ ~) Yt.:-1 -u.k

dove y è il debito residuo, i è l 'inter-esseannuo e u è la rata pogata semestralmente. ' I

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

Suggerimento. Interromperela simulazione quando il debito è estinto


(utilizzare il bloccoSTOP SimulationJ.
Esercizio 15.9 Analizzare l'evoluzione del sistema

ky(k + 1) = (1+ (k - l)y(k - 1)]


a partire da condizioni iniziali nulle, per k > 3.
Suggerimento. Utilizzareil Clock per genera1·
e i valori di k e "ritar-
darli" opportunamente.

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

284 CAPITOLO 15. SISTElvII TEMPO DISCRETO


-~--~7:l!
·.r
~i:-
"""~"."l•' \t: ~
;-~~~~ .

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

parametri a = 3.43 e· b = 0.31, con la soluzione che si ottiene perturbando leg- ~· .I


germente un parametro: a= 3.6545.
S'\.Jggerimento. Considerarealmeno S000 punti ed analizzare le risposte
,,~~
})~
• l~~T'/_ ,:_ •
•..1·,H 1 I
,.., rtl~,:,
sul piqno delle fasi con l'opzione ' . ' per il plot. • •,r,;i.Ì:, ,,
,.:'',~lf \
Esercizio 15.11 Costruire un automa che riceva in ingresso una sequenza di '
{O,1} e sia i~ grado di riconoscere la presenza di 9 uno consecutivi. - .t
S.uggerimento. Ogni machina a stati finiti può essere realizzata tramite · · -~
una rete combinatoria ed alcuni elementi di ritardo. Realizzare la ·
rete combinatoria tramite il bloccoCombinatoria! Logie, e gli elemen-
ti di ritardo tramite dei Unit Delay ( questo renderà la rete sincrona).
Realizzare in MATLAB la sequenza con cui sollecitare l'automa.
·,1•, f'
• ~1
. •

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 '

stata introdotta una somma almeno pari a 1000 lire.


..
. . ',.1
:,~'
Suggerimento. Anche questa è una macchina a stati finiti, si veda ,'
,.r
I ·~:

' ..
~"
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.

Esercizio 15 .13 Analizzare l'uscita da un bloccoUni t Delay con tempo di C!lm~


pionamento unitario di una sinusoide con frequenza pari ad 1 rad/ s.
Suggerimento, Utilizzare l'opzione '., del comando plot, il risul-
tato sarà molto coreografico,ma non una sinusoide.

Esercizio 15 .14 A naJizzarela risposta che si ottiene da un Zero-Order Hold con


una frequenza di campionamento di 1 kHz in presenza di un ingresso sinusoidale
di ampiezza unitada e frequenza pari a: 100 Hz, 300 Hz, 500 Hz, 900 Hz, 1000 Hz,
1100 Hz. '·
Suggerimento. Questo esercizio evidenzia alcuni dei problemi del
campionamento. Esistono differenze fra la risposta al segnale a 500 Hz
e quella a 1ODOHz?
Le risposte a 100 Hz, a 900 Hz e a 1100 Hz sono "simili11, perchè?
Capitolo 16

Funzioni avanzate

In questo capitolo è contenuta una serie dì strumenti e funzionalità che Simullnk


mette a disposizione dei suoi utenti e che non hanno trovato una adeguata collo-
cazione nei precedenti capitoli.

16.1 Analisi del sistema


Gli schemi progettati con Simulink vengono memorizzati in file con estensione
.mdl. Sui modelli Simulink è possibile operare, oltre che all'interno dell'ambiente
grafico di Simulink, anche tramite istruzioni MATLAB. È importante precisare
che per quanto verrà detto nel seguito gli ingressi e le uscite del sistema sono,
esclusivamente, quelle connesse a blocchi lnport ed Outport (la presenza di un
generatore non è considerata equivalente ad un ingresso, ma viene interpretato
come un elemento integrato nello schema).

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.2 Visualizzazione dei risultati


Le istruzione
simplot(data);
aimplot(time, data)
consentono di visualizzare i risultati di una simulazione con un aspetto che ricorda
quello dello Scope all'interno di una finestra MATLAB. Questo consente di poter
aggiungere annotazioni al grafico nonché stamparlo.
Nel caso si vogliano confrontare i risultati di due diverse simulazioni è sufficiente
raggruppare i risultati in una variabile di tipo struttura:
simplot({datal data2});
simplot({data1 data2},'diff');
In particola.re l'ultima sintassi traccia direttamente la differenza fra risultati
ottenuti nelle due simulazioni.

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

[A,B,C1 D]=dlinrnod( 1 model 1 , te, x, u, para);


dove è presente anche l'indicazione ts del Sample Time associato al modello.
dlinmod può essere usata anche per convertire un sistema discreto in un sistema sempre
discreto con differente tempo di campionamento, o per convertire un sistema. discreto in uno
continuo (ponendo ts•O) .
In presenza di uno schema con blocchi che evolvono con diJferenti tempi di campionamento,
qualora non si scelga un valore per ts multiplo di tutti i sample time dei vari blocchi ed il sistema
non sia s\abile, i risultati prodotti da dlinmod potrebbero non essere corretti.
Esiste une. versione piu accurata. denominata linmod2, es1;Jatuttavia necessita di tempi di
calcolo maggiori che non la. versione semplificata linmod. In questo ca.so l'algoritmo implementato
tende ad individuare il valore della perturbazione da associare a ciascuno stato in modo da
ridurre sia gli errori di arrotondamento (causati da.li'uso di piccoli valori per l'ampiezza delle
perturbazioni, che producono imprecisioni a causa della necessitò. di operare con un numero
finito di cifre) aiagli errori di troncamento (causati da ampiezza eccessiva delle perturbo.zioni che
portano ad invalidare l'approssimazione lineare).

16.1.4 Punti di equilibrio


Affinchè l'operazione di linearizzazione produca un modello stazionario, è neces-
sario che avvenga nell'intorno di un punto di equilibrio. Sìmulink consente di I
determinare tali punti con la funzione trim. La sinta.-;si è la seguente

[x, u, y, dx]=trim('model', xO, uO, yO, para);} I


t

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

sim( 1 prova 1 ,(J,eimset( 1


debug', 1 on'));
sldebug ('prova')

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

Figura 16.1: Debugger di Simulink. ' i


I!
Gli elementi presenti all'interno della libreria possono essere impiegati per la
costruzione di nuovi schemi.
I,
Non appena si utilizza una libreria, si noterà che, a differenza dei blocchi nor-
mali, quando si colloca un blocco tratto da una libreria utente sul foglio di lavoro
I
compare nell'angolo in basso a sinistra una freccia molto simile a quella che carat-
terizza le icone di tipo collegamento di Windows. Infatti in questo caso non si è
semplicemente copiato il blocco ma si è inserito un link (collegamento) alla libreria.
Questo comporta che se il blocco viene modificato nella libreria immediatamente
tutti gli schemi che utilizzano quel blocco saranno aggiornati alla nuova versione.
Volendo si può sospendere il link tramite l'opzione Disable del comando Link
options del pop-up menu (in questo ca.so la freccia che indica il collegamento diviene
grigia). Un link sospeso può essere sia riattivato sia completamente interrotto
tramite le relative opzioni che appaiono in questo caso tra le voci del Link options.
Quando un link è sospeso è possibile modificare il sottosistema. Si noti che,
qualora si riattivi il link, ed esistano discrepanze fra l'elemento presente all'interno
del modello e quello della libreria, Simulink chiederà all'utente le modalità per
riallineare le versioni.
Qualora non si voglia dare la possibilità di modificare un elemento di una li-
breria si deve utilizzare l'opzione Read-Write permissìon dei parametri del blocco.
In particolare l'opzione Rea.dOnly inibisce le modifiche dall'interno di uno schema,
mentre l'opzione NoReadOrWrite inibisce anche l'analisi del schema del sottosis-
tema. Si faccia attenzione che, a differenza delle opzioni sul link, questi parametri
~·~~.;,-·

290 CAPITOLO 16. FUNZIONI AVANZATE

vanno definiti per gli elementi della libreria .


.~\:,-~~·-
. ·~d!~
'!;• • ("
'. •..,1~,f,:._
·· •!>;~~

16.4 Esercizi •• 1_•H;t


., -;.4'~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'~

Esercizio 10.2 Costruire un bloccoSimulink in grado di generare: una costante,


una rampa, una parabolaed 1m cubica, o una loro combinazione lineare.
..:1.,
, 1,.!
Esercizio 10.3 Analizzare l'andamento di una biglia su un tavolo da biliardo di ,•\·=,;
,.J:
~."";,
1.2 m per 2.5 m in funzione della posizione e della velocità iniziale. Si assuma ~~jd l
•• \e

che gli urti con le sponde siano elastici (con un fattore di elasticità di O.9) e che ·~-' ;,
·.~f.t
.;U:;;,
,
l'interazionefra panno e bigliapossa essere schematizzato come un attrito viscoso ;i\-•-·,li••
(l'.'t•. '
camtterizzato da un fattore di smorzamento a= 0.05. ';-..~-~~·
...........
,.:~ ..i·•;•
' ...... .a
Suggerin1ento. Realizzare un mask che acquisite le notizie sulla po- ! '
sizione e sulla velocità (sia in tennini di ampiezza che di direzione}
iui.ziali, calcoli gli opportuni valori da assegnare quali condizioni in•
iziali.
La dinamica nelle due direzione è indipendente e può essere, per- .
,.t,{1 ...
.,._ ..'.!-;::·
1~ -4•F'/..~·
tanto, realizzata utilizzando due repliche di un stesso mask {facendo ·J~r.,_~
;-,1J~.;_
·a!,
attenzione al fatto che le dimensioni del biliardo non sono identiche). ·,-:.1~
:'lf.t,
"''!li.;,;
"· .\_

',\'
I
':1.,'(,~·'(.•:
~f"'.:
f

Esercizio 16.4 Determinare i punti di equilibrio del seguente sistema •:~,1 :1.,
1·► , tr.-1'-"'1·
• t~-~' •,,•
·•~ '\:f
•d:~ ..•'
:i:1 - -X1X2 + X2 ).'~

±2 - x1 - x1x2 + 0.5x2 + u
y = Xt -
2
X1X2
. ..::.. -

'•
.._,i
per i seguenti valori dell'ingressou E [O,11 3, 9]. Quale punto di equilibrioè stabile? 1ç
'~,.,;·--
if
~ "i
Si calcoli,quindi, il punto di equilibriopiù prossimo a u = 9 e y = 3. Questo purito ,~--
-i~
di equilibrioè stabile? ;:,
..
Suggerimento. Utilizzareil comando trim per il calcolo dei punti di
eqv.ilib,'io.La stabìltà dei vari punti di equilibrio può essere valutata :tf.~
v'-
,f t . •
sulla base del relativo modello linearizzato del sistema ottenibile con il ~} ...
• ,4 n,.,
· ~ •lf.~
comando linmod. ;J~1;.; .
,,:.j .
-~
~-

Esercizio 10.5 Si consideri il seguente sistema tempo-variante x = A(t):z:(Vino- ,,.


-~(\
gradov, 1952), dove
'ii
2
A(t) = ( -1 - 9cos 6t + 6sin 12t 12cos 6t + 4.5sin12t )
2

-12sin 2
6t + 4.5sin 12t -1 - 9sin 2 6t - 6sin12t
16.4. ESERCIZI 291

Si calcolinogli autovalori del sistema 'frozen time', cioè valutando gli autovalori
in ogni istante di tempo considerandot come un parametro. Si simuli, 8-U.ccessiva-
mente il comportamento del sistema assumendo x(O) = (1; 2].
Suggerimento. Si usi il comando lirunod pe1· calcolareil modello
linearizzato in differenti istanti di tempo.
Si verificherà che gli autovalori del sistema sono costanti (cioè non
dipendono dal tempo) ed hanno tutti parte reale negativa. Ciononos-
tante la simulazione evidenzia che lo stato cresce in modo illimitato.

Esercizio 16.6 Si consideri il seguente sistema tempo-variante i: = A(t)x {Wu,


1914), dove
1 15 1
A(t) _ ( - \ + 'J sin 12t ; cos 12t )
- il'J cos 12t -il 'J - ll'J sin 12t

Si calcolinogli autovalori del sistema 'frozen time' (si -uedaquanto detto nell 'eser-
cizio precedente) e, successivamente, sì .'Jtudila dinamica della x(t) a partire dalla
condizione iniziale x(O) = [1i 2].
Suggerimento. Si verificherd che gli au.tovalor·idel sistema sono
costanti (cioè non dipendono dal tempo) e che un autovalore ha parte
reale positiva. Ciononostante la simulazione evidenzia che la :i:(t) è
limitata.

.;
I'

Capitolo 17

Librerie dei blocchi

In questo capitolo sono sinteticamente descritti i blocchi Simulink. Scopo di


quest'elencazione non è quello di una esaustiva esposizione delle varie funzionalità
dei singoli blocchi (per la qual cosa si rimanda ai manuali) quanto una succinta
sintesi dei vari elementi contenuti in ogni libreria.
Di ogni blocco verrà fornita una descrizione funzionale corredata con delle
note sulle modalità di utilizzo. Inoltre verranno fornite alcune fra le seguenti
caratteristiche:

• DirectFeedthrou9h
evidenzia l'esistenza di un legame algebrico ingressi-uscita
e, quindi, la potenzialità di realizzare con tale blocco dei loop algebrici;

• Sample Time specifica gli istanti di tempo in cui il blocco verrà valutato;

• Multi-variabilespecifica le dimensioni dei segnali di ingresso ed uscita sup-


portati da.I bloccoi

• N. di Stati specifica il numero delle variabili di stato associate al blocco;

• Scalar expansion indica se il blocco è in grado o meno di effettuare tale


operazione;

• Virtual block indica se il blocco in esame è un blocco virtuale;

• Data 1}/pespecifica i tipi di dati supportati per i segnali di ingresso ed uscita


del blocco (qualora non diversamente specificato si intenderà che il blocco
supporta i medesimi tipi sia per i segnali di ingresso che per quelli di uscita).

Si precisa che per ogni blocco si evidenzieranno solo quelle caratteristiche appro-
priate al contesto. I I
r

I
!
'
294 CAPITOLO 1 ì. LIBRERIE DEI BLOCCHI

17.1 Co ntin uous


Contiene i blocchi che simulano il comportamento dì elementi con dinamica {cioè il cui modello
mntemaLico è un'equazione differenziale).

1 du/dt r
Derivative

Derivative: 8ffeLtua la derivata numerica del segnale di ingresso. Ad ogni passo la derivata
è calcolata utilizzando il rapporto incrementale rispetto al valore precedente, in presenza di un
passo di campionamento ampio i risultati potrebbero essere non precisi.
Carotteriatiche:
Oirect Feedthrough: Si.
Sample Time: è ìntrineecamente tempo continuo.
Multi-variabile: opera sia con segnali 1-D che 2-0.
Data Type: opera con segnali reali di tipo double.

{D
Integrator 81
lntegrator1

Integrator: Integra. il segnale di ingresso. Il blocco, come descritto a pag. 205, è molto flessibile
consentendo di specificare l'esistenza di condizioni di reeei, limiti sui valori della variabile inte-
gra.oda. nonché 11peclficare Il valore di tolleranza. assoluta (Abatol) che l'algorlttno tll lntegra.ziono
deve utilizzare (per maggiori dette.gli su queeto B.BpeUosi vedn pa.g. 230).
Caratteristìclie:
Direct Feedthrnugh: LimitatamenLe alle porte di reset e external reset.
Sample Time: è intrinsecamente tempo continuo.
Multi-variabile: opera sia con segnali 1-0 che 2-D.
N. di Stati: dipendono dalla dimensione dei parametri e dalla cardinalità. del segnale di ingresso.
Data Type: opera con segnali reali di tipo double (la porta di re.set accetta anche segnali
boolea.n),
Zero Croeaing: intrinseco sul raggiungimento dei va.lori di so.turazione.

@
Memory

Memory: Introduce un ritardo pari al passo di integrazione. È utile per spezzare i loop algebrici.
Nota: lt de. evitare l'uso di questo blocco se l'algoritmo di integrazione è ode15, o ode 113.
Carntter111tiche:
Direct Feedthrough: No.
17.1. CONTINUOUS 295

Sample Time: è intrinsecamente tempo continuo, ma se è attiva. la relativa. opzione può ereditare
il valore del Sample Time dal segnale che lo pilota.
Multi-variabile : opera sia con segnali 1-D che '2-0.
Data Type: opera con qualunque tipo di segnale .

. x' = Ax+Bu >


y = Cx+Du
State-Space
State-Space: Implementa un sistema lineare staziona.rio nella formulazione in spazio di stato.
Nota: È possibile specificare un valore di tolleranza assoluta (A.bsTol) per ciascuna delle varia.bili
di stato (per maggiori delta.gli su questo aspetto si veda pag. 230).
Caratteristiche:
Direct Feedthrough: solo se D i O.
Sa.mple Time: è intrinsecamente tempo continuo.
Multi-variabile: opera con segna.li 1-0.
N. di Stati: dipendono dalla dimensione della matrice parametri A.
Data Type: opera con segnali reali di tipo doubla.
Scalar Expansion: solo della condizione Iniziale.

rn
Transfer Fcn

Transrer Fcn: Implementa una. funzione di traaferimento. I coefficienti dei polinomi al numer-
atore e al denominatore vanno espressi in termini di potenze della s in ordine decrescente,
Nota: È possibile specificare un valore di tolleranza assoluta (Ab•Tol) per ciBBcuna delle vnrlablll
di stato (per maggiori dettagli su questo BBpetto si veda. pag. 230).
C11rotteri8tiche:
Direc\ Feedthrough: solo se il grado numero.tare è pari a queUo del denominatore.
Sample Time: è intrinseca.mente tempo continuo .
Multi-variabile: accetta quale ingresso solo segnali scalari, l'uscita. è un segna.le 1-D se il numer•
atore è una matrice.
N. di Stati: pari al grado del denomina.tare.
Data Type: opera con segnali reali di tipo double.
Scalar Expanaion: No.

~
Transport
Delay

Tra.neport Delay: Ritarda l'ingresso dì un qua.ntit~ specificata.


Nota: Il blocco ammette un'implementazione tra.mite approeaimazlone di PADE utile <lurante le
operazioni di linea.rizza.zlone.
296 CAPITOLO 17. LIBRERIE DEI BLOCCHI

Oaratteri,&iche:
Direct Feedthrough: No.
Sample Time: è Intrinsecamente tempo continuo.
Multi-variabile: opera. sia con segnali 1-D che 2-0.
N. di Stati: durante le opera2ioni di linea.rizzazione pari all'ordine dell'approssimazione.
Data Type: opera con segnali reali di tipo double.
Scalar Expansion: di tutti i parametri eccetto la dimensione del buffer.

Variable .
Transport Oelay

Varlable Transport Delay: tntroduce un ritardo varia.bile, li secondo Ingresso rappresenta di


quanto Il primo ingresso è traslato nel tempo.
Nota: Il blocco ammette un'Implementazione tramite approssimazione dl PADE utile durante le
operazioni di linearizzazlone.
Caratteristiche:
Direct Feedthrough: Limitatamente al secondo ingresso (ampiezza del ritardo).
Sample Time: è intrinseca.mente tempo continuo.
Multi-variabile: opera sia con segnali 1-D che 2-0.
N. di Stati: durante le operazioni di linearizza.zione pari all'ordine dell'approssimazione.
Data Type : opera con segnali reali di tipo double.
Scalar Expansion: di tutti i parametri eccetto la dimensione del buffer.

(s-1)
) >
s(s+ 1)
Zero-Pale

Zero-Pole: Implementa una funzione di trasferimento nella rappresentata in termini di zeri e


poli.
Nota: t possibile specificare un valore di tolleranza. assoluta (Ab1Tol) per ciascuna delle variabili
di stato (per maggiori dettagli su queato a.<3pettosi veda pag. 230).
Caratteristiche:
Direct Feedthrough: solo se il numero di zeri è pari a quello dei poli.
Sample Time: è intrinsecamente tempo continuo.
Multi-variabile: accetta quale ingresso solo segnali scalari, l'uscita è un segnale 1-D se nel campo
zeri si introduce una matrice.
N. di Stati: pari al numero dei poli.
Data Type : opera con segnali reali di tipo double.
Scalar Expansion: No.

17.2 Discrete
Contiene alcune funzioni utili per la simuluioni di sistemi tempo-discreto, ovvero descrivibili
tramite un modello alle differenze.
In tutti i blocchi di questo gruppo è presente il campo Sample Time che rappresenta la durata
17.2. DISCRETE

de!Plntervallo di campiona.mento. Questo campo è intrinse camente scalare : tutte le compen~~ .---:·:• ~:
ti del segnale sono campionate sincrona.mente, In tale campo è p088ibfle inserire un seconda
parametro opzionale che rappresenta l'offset dell'ista.nte di campione.mento rispetto agli altri
blocchi. Cioè l'anticipo (se il valore dell'offset è negativo) o Il rlia.rdo dell ' Istante nel quale
avviene il campionamento.

1 z+~-5
Discrete
~
Transfer Fcn I l
Discrete Transfer Fcn: Implementa una funz ione di trasferimento
mediante I coefficienti delle potenze di z In ordine decrescente .
Caratteristiche:
tempo discreto . descritta
I
Direct Feedthrough: aolo ee Il grado numeratore è pari a quello del denominatore.
Sample Time: è Intrinsecamente tempo discret o.
I
Multi-variabile: accetta quale ingresso solo segnali scalari, J>uscitaè un segnale 1-D se II numer-
atore è una matrice.
N. di Stati: pari al grado del denominatore .
Data Type: opera con segnali reali di tipo double .
Scalar Expansion : No .

(z-1)
z(z-0 .5)
Discrete
Zero-Pale

Discrete Zero-Pote: Implementa una funz ione di trasferimento discreta nella rappresentazione
in termini di zeri e poli .
Caratteristiche:
Direct Feedthrough: solo se Il numero di zeri è pari a quello dei poli.
Sample Time : è intrinsecamente tempo diecreto .
Multi-varia.bile : accetta quale ingresso solo segnali Sta.lari, l'uscita è un segnale 1-D se nel campo
zeri si introduce una matrice .
N. di Stati: pari al numero dei pol i.
I i

Data Type: opera con segnali reali di tipo double.


Scalar Expansion: No .
II:
i II
~ ~
I

i+~sz-1
DiscreteFilter IIi I
Discrete Filter: Implementa filtri di tipo IIR e FIR .
Note : I parametri devono eaeere espressi in termini dei coefficienti delle potenze di .i- 1 in ordine
crescente .

\.
298 CAPITOLO 17. LIBRERIE DEI BLOCCHI

Carotteri8tiche:
Direct Feedtbrough: solo se il grado numer3tore è pari a quello del denominatore .
Sample Time: è intrinsecamente tempo discreto.
Multi-variabile: accetta quale ingre88o solo segnali scalari, l'uscita è un segnale 1-D se il numer-
atore è una matrice.
N. di Stati: pari al grado del denominatore.
Data 1'ype: opera. con eegnali reali di tipo double,
Scalar Expanaion: No.

y(n)=Cx(n}+Ou(n)
>
x{n+1)=Ax(n)+Bu(n)
Discrete State-Space

Discrete State-space: tmplementa uu sistema lineare tempo-discreto nella rappresentazione


in termini di spazio di stato .
Ct1ratteri8liche:
Direct Feedthrough: solo ee D :f. O.
Sample Time: è intrinsecamente tempo discreto.
Mul\i-variabile: opera con segnali 1-D.
N. di Stati: dipendono dalla dimensione della matrice parametri A.
Data Type: opera con segnali reali di tipo double.
Scalar Expanslon: solo della condizione iniziale.

ill 0
Discrete-Time
lntegrator
ForwardEuler
-
Discrete-Time
lntegrator
BackwardEuler
{I} 1
Discrete-Tm,e
tntegrator
Trapezoidal
TI
1 z-1

Discrete-Time
lntegrator

Discrete-Time lntegrator: Implementa un integratore tempo discreto. Il blocco presenta le


medesime funzionalità del blocco Integmtor (alla cui trattazione si rimanda per maggiori dettagli
sul significato dei vari campi), inoltre è possibile specificare il metodo di approssimazione da
utilizzare (che appare nell'icona del blocco):
• ForwardEuler: con queeto metodo 1/ s ti appro88lmato con T /(z - 1) per cui si ha che
y(k) = :.c{k}, :.c(k+ 1) = :.c(k)+ T • u(k)
• BackwardEuler: con questo metodo 1/s è approssimato con T z/(z - l) per cui si ha che
y{k) = ~(k) +T • u(k), ~(k + 1) = y(k)
• 1rapezoidal: con queato metodo {noto anche come trasformanioni bilineare o metodo di
Tutsin) 1/s è approssimato con T (z + 1)/2(z - 1} per cui ai ha che
y(k) = :z:(k)+ T / 2 • u(k}, z(k + 1) = y(k) + T/2 • u(k)
dove y(k) rappresenta l'uscita del blocco e x(k) il valore dello stato dell'integratore e Tè il tempo
di campionamento.
Caratteristiche:
17.2. DISCRETE 299

Direct Feedthrough: Limitatamente alle porte di reset e external reset.


Sample Time: è intrinsecamente tempo discreto.
Multi-variabile: opera sia con segnali 1-D che 2-D.
N. di Stati: dipendono dalla dimensione dei parametri e dalla cardinalità del segnale di ingresso.
Data Type: opera con segna.li reali di tipo double o single (la porta di reset accetta anche
segna.li boolnn),
Zero Croseing: Intrinseco eul raggiungimento del va.lori di saturazione.

Flrst-Order
Hold

First-Order Hold : Implementa un organo di tenuta del primo ordine. i


Note: L'usdta, ritardata di un campione rispetto al segnale di ingresso, è ottenuta per inter-
polazione lineare degli ultimi due campioni. Questo blocco ha una valenza. puramente didattica
essendo di limitato utilizzo in applicazione pratiche.
t
f

· Caratteristiche:
Direct Feedthrough: No.
Sample Time: è intrinsecamente tempo continuo (serve per convertire un segnale tempo discreto
in uno tempo continuo).
Multi-varia.bile: opera sia. co11segnali 1-D che 2-D.
!i
I I
'I
N. di Stati: uno stato t.empo continuo ed uno tempo discreto per ciascuna componenle del seg-
nale di ingresso. ·
Data Type: opera con segnali di tipo double.
Scalar Expa.nsion: No.

{D
Unit 0elay

Unit Dele.y: Ritarda l'ingresso di un periodo di campionamento.


Caratteristiche:
Dlrect Feedthrough: No. "i •
Sa.mple Time: è intrinseca.mente tempo discreto.
Multi-varia.bile: opera. sia con segnali 1-D che 2-D.
N. di Stati: dipendono da.Ila dimensione del para.metri e dalla cnr<lina.lità.del segnale di ingresso.
Data Type: opera con segnali di qualunque tipo.

Zero-Order
Hold
300 CAPITOLO 17. LIBRERIE DEI BLOCCHI

Zero Order Hold: lmplementa un organo di tenuta di ordine zero.


Note: Il blocco campiona. Il segna.le di ingresso negli istanti di campiona.mento e mantiene costante
tale valore fino al successiv-0 istante di campionamento.
Caratteri,tiche:
Direct Feedthrough: No.
Sample Time: è intrinsecamente tempo continuo (serve per convertire un segnale tempo discreto
in uno tempo cont.ìnuo).
Multi -variabile: opera sia con segnali 1-D che 2-D.
N. di Stati: O.
Data Type: opera con segnali di qua lunque tipo.

17.3 Function & Table


Contiene una serie di blocchi che consentono di implementare delle generiche funzioni descritte
tramite formule matematiche o relazioni tabellari.

[I}
Oirect Look-Up
Tabla (n-D)

Direct Look-Up Table (n-D)1 Consente di estrarre da una t11.bella.


1 sulla baae del valore degli

indici, un valore scalare, un vettore o una matrice 2-D.


Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segnali di ingresso reali di qualunque tipo (l'uscita può essere un segnale
reale o complesso di qualunque tipo.)
Scalar expansion: No.

1..____f(u)
__,~
Fcn
Fcn: Implementa una. generica funzione.
Note: I riferimenti a.i segnali di ingresso deve essere del tipo u[i]. È possibile far riferimento a
variabili scalari MATLAB. Per maggiori informazioni si veda quando detto nel Para.grafo 11.7 a.
pag . 205.
Caratteristiche:
Direct Feedthr ough: Si.
Sample Time: eredita la caratter ist ica del segna le di ingresso.
Multi-varia.bile: accetta. come ingresso anche segna.li 1-D, l'uscita è sempre una quantità. scalare.
N. di Stati: O.
Data. Type: opera con segna.li di tipo double .
Scalar expansion: No.
17.3. FUNCTION & TABLE 301

2-D T(k,f)

~· -
lnterpolation (n-D)
using Prelook-Up

Interpolation (n-D) using PreLook-Up: L'uscita del blocco è calcolata per interpolazione
lineare dei valori presenti in una tabella .
Note: L'ingresso de l blocco deve essere costituit o degli indici che individuano gli elementi nella
tabella e dalla distanza relat iva di questi da l punto di funzionamento (informaiioni ottenibili con
il blocco PreLook-Up Jnde%Search).
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristi ca del segnale di ingresso .
Data Type: i segnali di ingresso possono essere double o single, mentre il segnale di u11eitapuò
essere di un qualunque tipo.
Scalar expaneion:No.

EELook-Up
Tabla

Look Up Table: Costruisce una rappresentazione lineare a tratti di una funzione descritta
tramite tabella.
Caratteristiche :
Direct Feedthrough : SI.
Sample Time: eredita la caratter istica del segnale di ingresso .
Data Type : opera con segnali di tipo double .
Scalar expansioo : No.

~
~
.!':.
~
\.
-
Look- Up
Table (2- D)

Look Up Table (2-D): Costruisce una rappresentazione lineare a tratti di una funzione di due
variabili descritta tramite tabella.
Caratteristiche:
Dire ct Feedthrough: Si.
Sample Time : eredita la caratteristica del segna.le di ingresso .
Data Type: opera con segnali di tipo double.

1'.
,l .
·1·.I
~
302 CAPITOLO 17. LIBRERIE DEI BLOCCHI

Scalar expansion: d1 on ingresso se l'altro è vettoriale.

~ Look-Up
Table (n-0)

Look Up Table (n-D): Costruisce una rappresentazione lineare a tratti di una funzione di n
variabili descritta tramite tabella..
Note: È poeaiblle specificare la modalità di interpolazione (costante, lineare o tramite spline
cubiche). In presenza di fu11zionidi più di 2 variabili è necesse.rio introdurre nel campo parametri
una matrice multidimensionale.
Corotteristiche:
Direct Feedthrough: Si.
Sample Time: eredita. la. caratteristica del segnale di ingresso.
Data Type: i segnali di ingresso possono essere double o single, mentre il segnale di uscita può
essere di un qualunque tipo.
Scalar expaneion: No.

MATLAB I>
Functlon
MATLABFcn

MATLAB Fcn: Consente tli richiamare, dall'interno di uno schema. Simulink, una funzione
MATLAB.
Note: li blocco rappresenta un'interfaccia paaalva.:non ~ effettuato alcun controllo di congruenze.
fra Il numero di uscite previste nello schema e quelle effettive. Le componenti dell'Ingresso vanno
indicate come u(i). ·
Camtteristiche :
Direct Fee<lthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: il segnale di ingresso puè essere un valore reale o complesso di tipo double, il segnale
tli uscita può essere di un qualunque tipo .
Scalar expension: No.

P(u) I>
O(P) = 5
Polynomial

Polynomial: Fornisce in uscila Il valore del polinomio P(u).


Camtteriatiche :
Direct Feedthrough: Si.
Sarnple Time: eredita la caratteristica del segnale cli ingresso.
Multi-variabile: opera con segnali 1-D e 2-D.
N. di Stati: O.
17.4. !vIATH 303

Data Type: opera con segnali di tipo double o single.


Scalar expansion: No.

Prelook-Up Prelook-Up
lndex Search lndex Search
Output only the index

PreLook-Up Index Search: Determina i valori degli indici e dello spiazza.mento relativo di
un ingresso rispetto ai breakpoints.
Note: È utile per pilotare Il blocco Interpolation (n-D) uiir19 PreLnok-Up ed il blocco Dìrect
Look- Up Tab/e (n-D).
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la. caratteristica del segnale di ingresso.
Data Type: i segnali di ingresso possono essere double o single, il segnale di uscita. è dello stesso
tipo dell'ingresso.

, syatem ~
S-Functlon

S-Function: consente di utilizza.re, al11interno di uno schema Simulink, un elemento funzionale


realizzato dall'utente e memorizzato In un file con una struttura. di S-function.
Note: Una S-functlon può essere scritta come M-flle (sintassi MATLAB) o MEX-flle (AieIn C,
e++,Fortran o ADA compilati). Stante la complessità intrinseca legata alla. scriUura di una
S-function, l'utilizzo delle stesse dovrebbe essere relegato a rasi particolari preferendo, in tali
casi, In formulazione come MEX-file che è la pìu efficiente computazionalmente.

1 ay,temD~

S-Functlon Bullder

S-Function Builder: consente di scrivere in modo guidato una S-Function.


I ,
Note: Consente di 11importare" in Sirnulink codice già scritto. t

j
17.4 Math
r

Contiene i blocchi che realizza.no i principali legami funzionali non dinamici.


304 CAPITOLO 17. LIBRERIE DEI BLOCCHI

G Aba

Abs: Calcola il valore assoluto dell'ingresso.


Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale dì ìngresso.
Onta Type: gestisce segnali reali e complessi di qualunque tipo.
Multi-variabile: opera con segna.li l·D e 2-D.
N. di Stati: O.
Zero Croseing: rileva il passaggio per lo zero.

Salve z I>
' f(z) f(z)=O
AlgebralcConstraint

Algebraic Constraint: Determina. l'uscita. in modo da rendere nullo il proprio ingresso.


Note : Serve a simulare la presenza di vincoli algebrici (equazioni algebrico-differenziali), affinché
il blocco possa operare è necessario che esista un loop algebrico fra. l'uscita. e l'ingresso del
blocco (ovvero un percorso costituito da tutti elementi con Direct Feedthrough). Per maggiori
informazioni si veda Para.grafo 12.8 a pag. 236,
Caratteristiche :
Direct Feedthrough: SI.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segnali reali di tipo double.
Scalar Expansion: No.

bltwise
: ANO 1>
'FFFF'
Bitwise
Logica! Operator

Bitwise Logica! Operator: Esegue operazioni di maschera.mento {AND, OR 1 XOR), inversione


(NOT) e shift (sinistra o destra) sui bit del segnale di ingresso.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la. caratteristica del segna.le di ingresso.
Data Type: opera esclusiva.mente con segnali rea.lì di tipo uint8, uint16 e uint32.
Scalar Expansion: No.
17.4. lvIATH 305

18}
Combinatoria!
Logie

Combinatorial Logie: implementa un circuito logico tramite una tabella della verità. (truth
table) e consente di simulare il comportamento di un PLA (pogrammable logie array }.
Note: Si noti che nel campo para.metri va inserita esclusivamente la truth t able, Simulink assume
che gli ingressi siano opportunamente ordinati, Un semplice esempio può a.iuta.re a. comprendere:
se si vuole simulare il comportamento della seguente rete logica (sommatore con riporto)

Ingresso! Ingress o2 Uscital I Uscit a2


o o
o
o
1

è sufficiente digitare

\
(O O; 1 O; 1 O; O 1)

Ogni colonna rappresenta un'uscita il cui valore è determinato dal valore degli ingresc3i. Ogni
valore per l'ingresso diverso da O viene interpretato come l logico.
Caratteristiche.: I;
Direct Feedthrough: Si.
Sample Time: eredita. la caratteristica del segnale di ingresso.
Data Type: opera con segnali di tipo boolean (se l'opzione BooltUJnlogie signals è ott il blocco
opera anche con segnali di tipo double).
Scalar Expansion: No.

.f7iuil>
~
Complex to
Magnitude-Angle

Complex to Magnitude~Angle: Calcola il valore del modulo e/o della fase di un segnale
complesso.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: t!redita la caratteristica. del segnale di ingresso.
Data Type: opera con segnali complessi di tipo double.
Multi-variabile: opera con segnali 1-0 e 2-D.
Scalar Expansìon: No.
306 CAPITOLO 17. LIBRERIE DEI BLOCCHI

_rRe(u)
\... lm(u)

Complaxto
Real-lmag

Cornplex to Real-Imag: Calcola il valore della parte rea.le e di quella. immaginaria di un


segnale complesso.
Caratteristiche:
Dlrect Feedthrough: Si.
So.mplc Time: eredita la. caratteristica. del segna le di ingresso.
Data Type: opera con segnali complesai di qualunque tipo.
Multi-vat'labile: opera. con segnali 1-D e 2-D.
Scalar Expansion: No.

o
Dot Produot

Dot Product: Calcola. il prodotto scalare dei vettori di ingresso.


Note: Si faccia Mtcnzione a non utilizza.re questo blocco per il calcolo del normale prodotto fra
due segnali (per questo scopo si deve usare il blocco Prvduct).
Caratteristiche:
Direct Feetlthrough: Si.
Sample Time: eredita la caratteristico. del segnale di ingresso.
Data Type: opera con segnali di tipo double.
Multi-variabile : opera con segnali 1-0 e 2-D.
Scalar Expansion: No.

Gain

Galn: Amplifica l'ingresso di un fattore specificato.


Note: Nell'icona del blocco compare il valore del guadagno, a meno che le dimensioni del blocco
non siano troppo anguste, nel qual ca.so compare la sLrioga -K-. In presenza di segnali multi-
variabili e di un guadagno di t ipo matriciale è posaibile specificare il tipo di moltiplicazione da
eseguire: elemento per elemento K. •u, pre-moltiplicazione hu o post-moltiplicazione u•K.
Carattedsticlie:
Direct Feedtbl'ough: Si.
Sarnple Time : eredita la caratteristica del segnale di ingresso.
Data Type: accetta segnali di ingresso reali o complessi di tipo double o single nel caso si
utilizzi la pre- o post -moltiplicazione; segnali di qualunque tipo (eccetto boolean) se si utilizza
la moltipli cazione elemento per elemento.
Multi-variabile: ope ra coo segnali 1-0 e 2-D.
17.4. l\lIATH 307

8
Logica!
Operator

Logical Operator: L'uscita del blocco è TRUE (valore 1) se gli ingressi soddisfa.no la relazione
specificata., altrimenti l'uscita. è FALSE (valore O). Le relazioni imple mentate sono: ANO, OR,
NOR, NANO, XOR, NOT .
Note: Ogni valore diverso da Oviene interpretato come l logico. Se il blocco ha. un unico ingresso
di tipo multi•\'aria.bile l'operazione li eseguita fra le component i del segnale di ingresso.
CaratteriBtiche:
Dlrect Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segna.li di tipo boolean (se l'opzi one Boolean logie signala è off il bloc co
opera anche con segnali di tipo double).
Scalar Expansion: No.

~
~
Magnituda-Angla
to Complex

Magnitude-Angle to Complex: Calcol a il numero complesso specificato in termini di modulo


e fase.
Caratteri&tiche:
Direct Feedthrough: Si.
Sample Time : eredita la caratteristica. del segnale di ingresso.
Data Type: opera con segnali complessi di Upo double.
Multi-var iabile: opera con segnali 1-D e 2-0.
Scalar Expansion: No.

0
I
Math
Function

Math Function: Calcol a la funzione specificata in corrispondenza del valore dell'ingre88o.


Note: Le funzioni a disposizione sono : up, log, 1o·u, log10, magnitude·~. equa.re, eqrt,
pov, conj, reciprocal, hypot, rem, mod, tra1111post, hermiti&n. Questo blocco è da utiliz-
zare al posto del blocco Fcn quando è richiesta una uscita vettoriale o matriciale.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingreoso.
Data Type: opera con segnali reali o complessi di tipo double,
Multi-variabile: opera con segnali 1-D e 2-D.
308 CAPITOLO 17. LIBRERIE DEI BLOCCHI

G> {3>, {3»


Matrìx Matrix Matrix
Gain Galn Gain
Element Wise Lett Multiplication Alght Multlplication

Matrlx Gain: Moltiplica. l'ingresso per una matrice.


Note: Il funzionamento è del tutto analogo al Gaìn.
Carattenstìche:
Direct Feedthrough: Si.
Sample Time: eredlt~ la caratteristica del segna.le di Ingresso.
Data Type: a.ccetta segnali dì Ingresso reali o complessi di tipo double o lingle nel CIIBO al
utilizzi la. pre- o post-moltiplico.iionej segnali di qualunque tipo (eccetto boolean) se si utilizza
la moltiplicazione elemento per elemento.
Multi -variab ile: opera con segna.li 1-D e 2-D.

G
MlnMax

MinMax: Restituisce com e usci ta. il valore minimo o massimo fra quelli assunti da.gli ingressi.
Note: Nel caso il blocco abbia. un solo ingresso di tipo multi-variabile, l'uscita è pari alla com-
ponenti minima o massima del segna.le.
Caratteristiche:
Oirect Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: accetta segnali di ingresso reali di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.
Zero Crossìng: determina i valori minimi e massimi.

OD
Product

Product:
+
Product1
o Produci
Matrix
{TI}
Product2

Calcola il prodotto o il rapporto dei segna.li di ingressi.


Note: Se nel campo po.rametr i si introduce un numero questo rappresenta. il numero di ingressi
che andranno moltiplicati fra loro , alternativamente è possibile inserire una stringa. composta dai
caratteri • e / che specificano se il corrispettiv o ingresso è un moltiplicatore o un divisore del
risultato. È possibile specificare se il prodotto deve essere eseguito elemento per elemento o come
prodotto matriciale. In presenza di segnali2-0 e utilizzando il prodotto matriciale, l'operatore
di divisione equivale all'operatore di inversione. •··
Se il blocco ha un solo Ingresso di tipo multi-variabile l'uscita. è pari alla produttoria. delle com-
ponenti del segnale (nell'icona del blocco comp are il simbolo di produttoria).
Caratteristiche:
Dire ct Feedthrough: Si.
Sa.mple Time: eredita la caratteristica del segnale di ingresso.
Data Type: nella moda.lità elemento per elemento accetta segnali reali e complessi di qualunque
17.4. 1\IIATH 309

tipo, nel caso di moltiplicazione di tipo matriciale i segnali devono essere numeri reali o complessi
di tipo double o single.
Multi-variabile: opera con segnali 1-D e 2-D.

F-=J
~
Aeal-lmag to
Complex

Real-Imag to Complex: Fornisce in uscita un numero complesso di cui se ne specifica la. parte
reale e quella. immaginaria.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data. Type: opera con segnali complessi di qualunque tipo.
Multi-variabile: opera. con segnali 1-D e 2-D.
Scalar Expansion: No.

G
Relational
Operator

Relational Operator: L'uscita del blocco è TRUE (valore 1) se gli ingressi soddisfano la
relazione specificata, altrimenti l'uscita è FALSE (valore O). Le relazioni implementate sono:
eguale a •a, diverso da •, minore di <, minore o uguale a <=-,maggiore o uguale a >=, maggiore
di>.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso .
Data. Type: i segna.li di ingresso possono essere valori reali o complessi di qualunque tipo, l'uscita
è un segnale di tipo boolean (se l'opzione Boolean logie aignals è ott l'uscita è un segnale di tipo
double),
Zero Croesing: determina gli istanti in coi cambia la condizione.

B
Rounding
Function

Rounding Function: Effettua. sul segnale di ingresso un'operazione di troncamento. I metodi


di troncamento supporta.ti sono: tloor, ceil, round, f h.
Caratteristiche:
310 CAPITOLO 17. LIBRERIE DEI BLOCCHI

Direct Feedthrough: Si.


Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segnali reali di tipo double e lingla.
Multi-va.dabile: opera con segnali 1-D e 2-D.

m
Slgn

Slgn: implementa la funzione signurn,


1 se u>O
o se u=O
-1 se u<O
'
dove con usi è indicato l'ingresso e con 11l'uscita.
Carotteristiche:
Direct Feedthrough: Sì.
Sample Time: eredita. la. caratteristica del segnale di ingresso.
Data Type: opera con segnali reali di tipo double.
Multi-variabile: opera con segnali 1-D e 2-D.
Zero Crossing: individua. gli istanti di passaggio per lo zero.

0
Sllder
Galn

Slider Gain: guadagno variabili in modo interattivo.


Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di iugre880,
Datn.Type: oper&con segn&IIreali o compleaaldi tipo doubl ■ o lin1l1,
Multl•vatl&blte:
opera <:oneegnall 1-0 e 2•0.

Sum: L'UBCitaè pari alla somma algebrica degli ingressi.


Note: Nel campo parametri va inserita una stringa composta dai caraUeri + e ~ che specificano
per ciascun ingresso il segno corrispondente (al solo scopo estetico è possibile inserire anche
caratteri I che introducono uno spazio fra. i vari Ingressi).
Se il blocco ha un solo ingresso di tipo multi-varia.bile l'uscita è pari alla sommatoria. delle
componenti del segnale (nell'icona del blocco compare il simbolo di sommatoria).
CaroUeri8tiche:
17.5. NONLINEAR 311

Direct Feedthrough : Si.


Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: supporta segnali reali o complessi di qualunque tipo.
Multi -varia.bile: opera con segnali 1-D e 2-D.

G
Trigonometric
Functlon

Trigonometrie Functioni Calcola il valore della funzione trigonometrica specificata,


Note: Questo blocco è da utilizzare al posto del Fcn quando è richiesta. una. uscita di tipo multi -
variabile.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica. del segna.le di ingresso.
Data Type: opera con segnali reali o complessi di tipo double,
Multi-variabile: opera con segnali 1-D s 2-D,

17.5 Nonlinear
Contiene le più comuni non-linearità.

@
Backlash

Backlash: Gioco meccanico, simula il comportament o di due ruote dentate. L'uscita rimane
costante fintanto che l'ingresso permane nell'interstizio fra. i due denti consecu~ivi (cioè fintato
che li nella 11Dea.d Zone"). Qunado l'lngreaeo arriva Rgll e11tremi di questo dea<!110ne(eltue.alono
di engo.gement)l'ueclt& h pari all'Ingrosso meno la semi ~mplena della dlle.dzono,
OarolteM1Hch9:
t)lrect FeedLhrough: SI.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segnali reali di tipo double.
Multi-variabile: opera con segna.li 1-D e 2-D.
Zero Crossing: individua gli istanti di engagement.

f
m
Coulomb &
ViscousFrlction

Columb &l.Viscous Frictlon: consente di simulare eia l'attrito di primo distacco che queUo
viscoso,
.I
;. • t

312 CAPITOLO 17. LIBRERIE DEI BLOCCHI

Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita lo. cara.ttarlstlca del segnale di ingresso.
Data. Type: opera. con segna.li rea.li di tipo double.
Multi~va.ria.bile: opera con segnali 1-D e 2-D.
Zero Crossing: individua gli istanti di passaggio per lo zero.

m
DeadZone
Dead Zone: L'uscita. è nulla. per tutti i valori dell'ingresso contenuti nella Dea.d Zone (zona
morta).
Note: È possibile specifica.re se durante l'operazione di linearizza.zione il blocco deve essere
approssimato come un guadagno.
Caratteristiche:
Dlrect Feedthrough: Si.
Sa.mple Time: eredita la caratteristica del segnale di lngreseo,
Data Type: opera con segnali reali di qualunque tlpo.
Multi-variabile: opera con segnali 1-D e 2-D.
Zero Crossing: individua gli istanti di entrata ed uscita. da.Ila dead zone.

~>
)-0

Manual Switch
Manual Switch: l'utente, commutando la porta di ingresso, può specificare quale degli ingressi
fornire in uscita.
Note: La commutazione dello switch si ottiene con un clic sull'icona. del blocco in corrispondenza
della porta di ingresso non attiva. Si noti che facendo doppio clic sull'icona non appare la. finestra
dei parametri del blocco.
Caratteristiche:
Dlrect Feedthrough: Si.
Sample 'rime: eredita la caratteristico. del segna.ledi Ingresso.
De.ta Type: opera con segna.li di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.

Multiport
Switch

Multiport Switch: consente di specifica.re fra.più ingressi quale è il segna.le di uscita.


Note: li primo ingresso (nell'icona rappresentato in modo diverso) rappresenta l'indice di se-
17.5. NONLINEAR 313

lezione della porta. In funzione del valore (troncato ad intero) assunto da questo il blocca
individua la porta. a cui connettere l'uscita.
Caratteristsche:
Direct Feedthrough: S1.
Sample Time: eredita la caratteristica del segnale di Ingresso.
Dàta. Type: la prima porta {porta dell'indice) accetta. segnali rea.lì di qualunque tipo, mentre le
altre porte accettano segnali reali e complessidi qualunque tipo.
Multi-varia.bile: opera con segna.li 1-D e 2-D.
N. di Stati: O.

Quantizer

Quantlzer: simula l'effetto di una quantizzazione.


Note: È possibile specificare se durante l'operazione di linea.rlzzazione il blocco deve essere
e.pprosslmato con un guadagno.
Oamtterìstscl&e:
Direct Feedihrough: S1.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segnali reali o complesso di tipo double o single.
Multi-variabile: opera con segna.li 1-D e 2-D.

RateLimitar

Rate Limitar: Limita l'ampiezza. della derivata prima del segnale che lo attraversa.
Note: Simullnk, calcolato il rapporto incrementale fra l'ingresso al blocco all'istante attuale e
l'uscita al passo precedente

6
= u(i) - y(i - 1)
6t

pone l'uscita a.

y(i - 1) + R • ~t se
y(i) = u(i) se
{
y(i - l} - F • 6t se

dove R è il rising slew rate e F è il falling slew rate. Questo blocco permette di modellare
fenomeni di saturazioni sulla velocità. di variazione dei segnali.
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: è intrinsecamente tempo continuo.
Data. Type: opera con segnali di tipo doublo.
Multi-variabile: opera con segnali 1-D e 2-D.
314 CAPITOLO 17. LIBRERIE DEI BLOCCHI
...,.

m
Relay

Relay: Simula il comportamento di un relé con isteresi.


Note: Il valore dell'uscita commuta fra due valori detti on ed off. Quando il sistema si trova
nellu staLo oH si ha la commutazione allo stato on se l'lngre880 supera. Il valore dello 8Witch on
point, mentre commuta dallo stato on e. quello oU quando il valore dell'ingresso è inferiore al
valore dello awitch off point. L'uscita del blocco è legato al valore dello stato. Ponendo lo stesso
valore numerico sia per la commutazione on che per quella ol.f si modella un relé ideale privo di
isteresi.
Carotteristicl1e:
Direct Feedthrough: Si.
Sa.mple Time: è intrinsecamente tempo continuo.
Data Type: opera con segnali reali di tipo double.
Multi-va.riabile: opera con segnali 1-D e 2-D.
Zero crossing: individua gli istanti di commutazione.

m
Saturation

Saturation: Simula una saturazione, limita cioè il m888imo valore dell'uscita,


Note: è possibile specificare se durante l'operazione di linearizzazione il blocco deve essere ap- 4 '
Ì,

prussimato con un guadagno. J.;


Carotteri8tiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segnali reali di qualunque tipo.
Multi-variabìle: opera con segnali 1-D e 2-D. .
Zero crossing: individua gli istanti in cui sono raggiunti i limiti della saturazione. _........,._

.:::;/:
I

li!''!
·.c~1t.
1

~•.!.iJ"
~t <'•.

E3
• "' I

Switch

Switch: L'uscita è pari al primo ingresso se il segnale di comando (secondo ingresso) è inferiore
ad un valore di soglia, altrimenti è pari al terzo ingresso,
Corotteri,tiche:
Direct Feeùthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingre860.
Data Type: il segnale di comando deve essere dì tipo double o boolena; gli altri segnali possono
essere reali o compleSBi di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.
Zero Cr088ing: individua gli istanti in cui avviene la commuLazione.
17.6. SIGNAL & SYSTEMS 315

17. 6 Signal & Systems


Contiene i blocchi per la manipolazione dei segnali.

U1 -> Y
U2 -> Y(E) y
Assignment

Assignement: consente di assegnare un valore specificabile dall'utente ad alcune delle compo-


nenti del segnale di ingresso.
Caratteristiche:
Direct Feedt.hrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segnali reali di tipo double.
Multi-varìabile: opera con segnali 1-D e 2-D.

I
Bus Creator: combina più segnali di ingresso in un unico Bus signal.
Note: La selezione dei segnali avviene tramite la maschera che compare con un doppio clic
sull'icona del blocco.
Carotteri,tiche:
Vlrtual Block: Si.
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: il segnale di uscita è un 8t1s Signal, i segnali di ingresso possono essere reali o
complessi di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.

I
Bus Selector: seleziona uno o più segnali da un Bus signal .
Note: La selezione dei segnali avviene tramite la maschera che compare con un doppio clic
sull'icona del blocco. È possibile specifica.re se il blocco deve avere un'uoica usci~a o uscite
distinte per i vari segnali seleziona.ti.
Carotteriatiche:
Virtua.l Block: Si.
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: il segnale di ingresso deve essere un Bus Signa/ composto da segna.li renli o complessi
di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.
316 CAPITOLO 17. LIBRERIE DEI BLOCCHI

Data Store
Memory
Data Store Memory1 consentedi specificare un'ara& di memoria utillaublle per i blocchi Data
Stare Reade Data Stare Write.
Note: La. posizione del blocco identifica. anche l'ambito di visibilità della variabile che identifica
la regione di memoria.
•·!·
.t:}~
,.. .r.
·fo~

~
,..~)tl
-4 • .1I
.•.r:'t
l'.
, ,:
•. .I
• I t~
Data Stare "·
1.qi:/' •

Read .-.,:3
,,t f
..1, '-:-
~;"t~
":~ .h .P,
Data Store Read1 legge I dati da un 'area di memoria specificata, , ,j\\ f
1 ;,4ck"~
·q
,.,.,.
?,,
-.~:·-1.
I ,, \ ~

Data Stare •hj,


. ·
,.I",,:
;

Write

Data Store Write: scrive i dati in un'area di memoria specificata.

auto
(???)
Data Type Converslon

Data Type Converalon1 converte il tipo di da.to In ingresso in un tipo specificabile dall'utente.
Note: L'opzione auto fa.si che l'ingress o sia convertito nel tipo di dato richiesto dal blocco a cui
il Data Type Con11ersionè connesso .
Caratteristiche:
Virtual Block: Si.
Direct Feedthrough: Si.
,Sample Time: eredita la caratteristica de l segnale di ingresso .
Data Type: opera con segna.li di qualunque tipo.
Multi-varia.bile : opera con segnali 1-D e 2-D.
I

17.6. SIGNAL & SYSTElvtS 317

I
Demux: Separa un ingresso multi-variabile nel suoi costituenti.
Note: È poaalblle specificare la cardlnnlltà riel vari segnalidi uacita (per maggiori Informa.ioni
si veda Il Paragrafo 13.3 a pag . 249).
Caratteristiche:
Virtual Block: Si.
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segna.le di ingresso.
Data Type: opera con segna.li di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2•0 ,

0> I
From

From: Rappresenta il terminale di uscita di una connessione wireless.


I
Note: Nel caso in cui il blocco fa.cela riferimento ad un Goto locale, il nome della variabile
compare racchiusa fra parentesi quadre, qualora si faccia riferimento ad uno con visibilità acoped
il nome compare racchiuso fra parentes i graffe nel caso in cui, invece, si fa riferimento ad un
Goto globale il nome compare senza niente (per maggiori informazioni si veda il Paragra.fo 14.2
a pag. 258).
Caratteristiche:
Virtual Block: Si.
Direct Feedthrough: Si.
Sa.mple Time: eredita la caratteristica del aegnsJe di ingresso .
Data Type: opera con segnali di qualunque tipo.
Multi-variabile: opera. con segnali 1-D e 2-D.

~
I
f() I
Funclion-Call .
Generato,

Function-Call Generator: Consente di richiama.re un numero specìftcato di volte una funzione


l
ad ogni passo di campionamento.
Caratteristiche :
Samp le Time : è intrinsecamente tempo discreto.
I I

I
g Goto
G g
Goto Goto
)
II
tocai global scoped

Goto: Rappresenta. il terminale da cui partono una o più connessioni wireless. l


318 CAPITOLO 17. LIBRERIE DEI BLOCCHI

Nc,te: È possibile definire l'ambito di visibilità, cioè da qua.le parte dello schema ci si può con-
nettere al Goto tramite un blocco From. Nel caso in cui si utilizzi l'opzione local il nome della.
variabile compare racchiusa fra parentesi quadre, con l'opzione acopad risulterl racchiueo fra
parentesi graffe, mentre con global il nome compare senza niente (per maggiori informazioni si
veda Paragrafo 14.2 a pag. 258).
Caratteristiche:
Virtual Block: Si.
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica. del segnale di ingresso.
Data. 'I'ype: opera con segna.li di qualunque tipo.
Multi-variabile: opera con segna.li 1-D e 2-D.

G
Goto Tag
Visibìlity

Goto 'l'ag Vlelblllty: Definisce l'ambito di visibilità di un GoCoin cui si è utilizzata l'opzione
11eoped.
Caratteristiche:
Virtua.l Block: Si.
Direct Feedthrough: Si .
Sa.mple Time: eredita la. caratteristica del segnale di ingresso.
t Data. Type: opera con segnali dì qualunque tipo.
Multi -variabile: opera. con segna.li l-D e 2-D.
ì

Hit Hit Hit


Crossing Crossing Crossing
Falling Rlslng Either

,• I
Hit Crossing: consente di attivare l'algoritmo di zero crossing detection al verificarsi di una
determinata. condizione. . ·
Note: lo presenza di un algoritmo di integrazione a passo variabile, Simulìnk impone che la
soluzione sia valutata immediatamente prima e subito dopo l'istante in cui il segnale di ingresso
abbia. raggiunto il valore specificato quale soglia. (e con la. giusta. direzione). Quando la. condizione
ti attiva l'uscite.del Hit CroaBsngè pari ad 1.
Carotteriatiche:
Direct FeedLhrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data. Type: opera con segnali in ingre860 di qualunque tipo, l'uscita è un segnale di tipo boolean
(se l'opzione Boolean Logie Signal è ott l'uscita è un double).
Multi-variabile: opera con segnali 1-D e 2-D.
Zero crosslng: determina. il raggiungimento del valore della soglia..

'!
17.6. SIGNAL & SYSTEMS 319

d IC

IC : consente di specificare il valore che un segnale assume nell 'istnote inizial e dello. simulai.ione
(lo Start time).
Caratteri6tiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segna.li di qualunque tipo.
Multi-varie.bile: opera con segna.li 1-D e 2-D.

Horiz Cat

~□~
Matrlx
Concatenation

Matrix Concatenation: consente di effettuare una concatenazione degli ingressi in modo da


fornire in uscita una matrice.
Caratteriatiche:
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Multi -va.ria.bile: opera. con segna.li 1-D e 2-D.

B Merge

Merge: consente cli creare, a partire da. più segnali , un uni<·o segna.le composto, istante per
istante, da quella componente del segnale di ingreseo che è stai a aggiornata più recentemente .
Note: È utile in presenza di sistema con esecuzione condizionata. In preaenza di più ingress i
care.Uerlzzatl dal medesimo Sample Time viene utilizzato come uscite. Il valore do! blocco con
priorità più alta.
Carotteriatiche:
Virtual Block: Si.
Dìrect Feedthrough: Si.
Samp le Time: eredita la caratteristica del segnale di ingresso .
Data Type: opera con segnali di qualunque tipo.
Multi-variabile: opern con segnali 1-D e 2-D.
320 CAPITOLO 17. LIBRERIE DEI BLOCCHI

) signal1
I>

, signal2

Mux: Consente di raggruppa più segnali in un unico segnale multi-variabile.


Note: Se una delle componenti di ingresso è un segnale 2-D, l'uscita del blocco è un Bus Signal.
Per maggiori informazioni sull'utilizzo del blocco si veda. il Paragrafo 13.3 a. pa.g. 249.
Caratteristiche:
Virtual Block: Si.
Direct F'eedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data. Type: opera con segnali di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.

t>
t>
: W:0, Ts:(0 O),C:0, 0:0
t>
t>
Probe

Probe: fornisce alcune informazioni sul segnale: cardinalità. del segnale, il suo Sample Time, se
si tratta o meno di un segnale complesso e le dimensioni del segnale.
Note: 1 valori vengono mostrati anche all'interno dell'icona del blocco.
Camtteristiche: -
Dlrect Feedthrough: SI.
Se.mple Time: eredlta la. caratteristica del segna.le di ingresso.
Data Type: opera coo eegnaJl di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.

..

8
Reshape
'fl
..,"
! ~ _ I
f

.,

Reshape: modifica le dimensioni del segna.le di ingresso. ·,i

Note: È utile per convertire segnali 2-0 in segnali 1-D e viceversa.


Caratteristiche:
Direct Feedthrough: Si. • r,, l

Sa.mple Time: eredita. la. caratteristica del segnale di ingresso.


Data Type: opera con segnali di quaJunque tipo.
Multi-variabile: opera con segnali 1-0 e 2-D.
17.6. SIGN1lL & SYSTE!vIS 321

Se lector

Selector: consente di selezionare e riordinare quali componenti del segnale di ingreSBOcoati-


tuiranno l'uscita.
Note: Gli indici di selezione possono essere specificati sia tra.mite un parametro che tramite un
ulteriore ingresso del blocco.
Carotteristiche:
Virtual Block: Si.
Direct Feedthrough: Si.
Sample Time: eredita la caratteristica del segnale di ingresso.
Data Type: opera con segnali di qualunque tipo.
Multi -variabile: opera con segnali l·D e 2-D.

1...
__ _...,r
1_nh_e_ri_t
Signal Specification

Signal Speciflcation: consente di verificare se un segna.le soddisfa particolari specifiche.


l
Note: Le caratteristiche verificabili sono: le dimensioni, il Sample Time, il tipo del segna.le ed il
fatto che sia reale o complesso. L'uscita. del blocco coincide con il segnale in ingresso se questo
verifica le specifiche indicate, altrimenti Simulink interrompe la simulazione avvertendo l'utente
con un messaggio di errore. \
Caratteristiche:
Direct Feedthrough: Si.
Sample Time: eredita la carattarlatica del segnale di ingresso.
De.te.Type: opera con segnali di qualunque tipo.
Multl-ve.riablle: opera con segnali l·D e 2-D.

l
fBWidth

Width: l'uscita è pari al valore della cardinalità del segna le in ingresso.


Note: Il valore della cardinalità, compare anche nel11icona. del blocco.
Carotteristiche:
Virtual Block: Si.
Direct Feedthrough: Si.
Sample Time: è ìntrinsecamente tempo continuo.
Data Type: opera con segnali di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D (in quest'ultimo caso il blocco fornisce in uscita la
cardinalità del segnale di ingresso, ma non le sue dimensioni).

\.

t
t:r.,::
.~:-
~~;.

322 CAl'I'TOLO 17. LIBRERIE DEI BLOCCHI

17.7 Sinks
Contiene I blocchi in grado di visualizzo.re e memorizzare i segnali.

1......
1 __ __,O!

Dlsplay

Display: mostra il valore istantaneo del segnale in ingresso.


Note: Se I&dimensione del blocco non consente la visualizzazione di tutti i valori del segnale in
Ingresso compariranno delle frecce che indicano la. direzione nella quale è necessario espandere il
blocco. È anche poesibile avere un Display fluttuante, cioè che evidenzia il valore Istantaneo del
o dei segnali di volta in volta selezionati con Il mouse.
Carotteristiche:
Sarnple Time: è intrinsecamente tempo continuo.
Data Type: opera con segnali di qualunque tipo.
Multi-variabile: opera con segnali l•D e 2-0 .

..
B
Floating
Scope

Flont.ing Scope: è uno Sc.opecon il fle.gdi floating settato.

o Out1

Outport: Definisce una porta di output per un suttosietema e, più in generale, servea specificare
le variabili di uscita di uno schema.
Note: Ogni Outport in un sottosistema è identificata da un suo numero univoco,
Carotteri.,tiche:
Virtual Block: Si.
Sample Time: è intrinsecamente tempo continuo.
Data Type: opera con segnali di qualunque tipo.
Mulli-variabile: opera con segnali l·D e 2-D.

..
I

B
Scope

ì Scope: Consente dì visualizzare i segna.li durante la simulazione con un aspetto grafico clie
ricorda un oscllloscoplo. :>
17.7. SINKS 323

Note: Ai parametri del blocco si accede direttamente tramite la toolbar present.e nella finestra
dello Scope. Per maggiori informazioni si veda. il Paragrafo 11.5 a. pag. 199.
I.
't
Caratteristiche:
Data Type: opera con segnali reali di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-0.

e
Stop Simulation

Stop Slmulatlon: Interrompe la simulazione appena almeno una. delle componenti del segnale
di ingreeaodiviene diverso. da iero.
Caratteristiche:
Data Type: opera con segnali di qualunque tipo.
Multi-variabile: opera con segnali 1-0 e 2-D.

@
Terminator

Terminator: consente di evitare i messaggi di warning in presenza di linee non connesse.


Caratteristiche:
Data Type: opera con eegne.li di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-0.

, untitled.mat

To File

To File: Registra.I dati in un file, essi vengono gestiti come una matrice la cui prima colonna ()
il vettore dei tempi e le successive le variabili di uscita.
Caratteristiche:
Virtual Block: Si.
Sample Time: è intrinsecamente tempo continuo.
Data Type: opera con segnali reali di tipo double.
Multi-variabile: opera con segnali 1-0 e 2-D.

G
To Workspace

To Workspace: Esporta. i dati in MATLAB.


Note: à possibile utilizzare per il rleulta.to sia una rappresentazione matriciole che tramite una
.t

324 CAPITOLO 17. LIBRERIE DEI BLOCCHI

struttura (con o senza I& base dei tempi). Per maggiori informazioni si ved& il Paragrafo 11.5 a
pag. 199.
Caratteristiche:
Data Type: opera con segnali di qualunque tipo. ..'·.
Multi-variabile: opera con segnali 1-D e 2-D.

e]
XY Graph
XY Graph: consente dì visualizzare il grafico della variabile Y (secondo ingresso} in funzione
della variabile X (primo ingresso).
Note: Il blocco utilizza una finestra grafica MATLAB, di conseguenza questo aumenta l'onere
computazionale.
Carotteristicl&e:
Data Type: opera con segnali reali di tipo double.
Multi-variabile: opera con segnali scalari.

17.8 Sources
Contiene i blocchi in grado di produrre l segnali di forzamento ai sistemi.

~
Band-Umited
Whlte Nolse

Band-Limlted White Noise: Genera una sequenza di rumore bianco a banda limitata.
Caratteristiche:
Sa.mple Time: è intrinsecamente tempo discreto.
Data Type: opera con segnali reali dì tipo double.
Multi-variabile: opera con segnali 1-D e 2-D.

[tr
Chirp Signal

Chirp Signa!: Genera un segnale la cui frequenza si incrementa in modo linearmente con il
tempo.
Caratteristiche:
$ampie Time: è intrinsecamente tempo continuo .
Data Type: opera con segna.lì reali dì tipo double.
Multi-variabile: opera con segnali 1-D e 2-D. .·'
17.8. SOURCES 325 l
(9>
Clock

t
Clock: rende accessibile il tempo corrente durante una simula2ione.
Note: Il Clock non è un generatore di tempo, ma fornisce una. vista sui valori del tempo che
l'algoritmo di integrazione definisce durante la simulazione,
OamtterlBtiche:
Sa.mple Time : è Intrinsecamente tempo continuo.
Data Type: opera con segnali reali di tipo double .
Multi-variabile: opera con segnali scalari.

D
Constant
I
Constant: genera un valore costante.
Caratteristiche:
Sample Time: eredita le caratteristiche dal blocco a cui è con nesso.
Data Type: è possibile specificare all'interno del blocco Il tipo del segnale di uscita,
Multi-variabile: opera con segnali l·D e 2-D.

l
r
I
12:34
Digitai Clock

Digitai Clock: rende accessibile il tempo corrente durante una llimulazione ad intervalli di
tempo specificato.
Note: Come il Clock, questo non è un vero e proprio generatore di tempo, ma fornisce una. vista
sui valori del tempo che l'algoritmo di integrazione definisce durante la simulazione.
Caratteristiche:
$ampie Time: è intrinsecamente tempo dillcreto. \
Data Type: opera con segnali reali di tipo double.
Multi-variabile: opera con segnali scalari.

__ s,_m_,n_
.... r
From
Workspace

From Workspace: consente di utilizzare quale ingresso un segnale definito nel workspace di
MATLAB .
Note: È possibile far riferimento sia a variabili in forma matriciali che a tipi strutture. Per
maggiori infor mazioni ai veda il Paragrafo Sources a pag. 203.
Caratteristiche:
Sample Time: definito quale parametro.
Data Type: opera con segnali reali o complessi di qualunque tipo (nel caso in cui si utilizzi la
t
'

I
326 CAPITOLO 17. LIBRERIE DEI BLOCCHI

ra.ppresenlazione tramite matrice i segna.li devono essere rea.li e di tipo double ).


Multi-varia.bile: opera con segnali 1-D e 2-D.

untttled.mat r
From File

From File, consente di utilizza.re quale ingresso un segna.le memorizzato in uu file.


Note: I dati devono e88ere organizzati in forma matriciale . La prima riga. rappresenta il valore
del tempo, le altre righe i diversi ingressi (rispetto al From Workspace è invertito il ruolo delle
righe e delle colonne. Per maggiori informazioni si veda pag. 203).
Caratteristiche:
Sample Time: definito qua.le parametro.
Data Type: opera con segnali reali di tipo double.
Multi-variabile: opera con segnali 1-D.

)
0
Ground
l
I
Ground: consente di evita.re i messaggi di warning in presenza. di linee non connesse.
.. :, 'F.,..
.-~'"":
!"" ,\

,·:-.!'!
~•. l,:,tl
,,....
<--~-
CD>
ln1
..•
Inport: consente di definire le porte di ingresso di un sottosistema e, più in generale, individuare 5<
gli ingressi di uno schema.. ~r.:,:-,.
r.- -
Caratteristiche: . .._,\
q.}i~
....
~ ...1
..., "-"~"

Sample Time: definito quale parametro. Lif~'M~·


Data Type: opera con segna.li reali o complessi di qualunque tipo. '.;,.;
:{•t)'
...
m
1.r-,.l.i
;r. .
-n.,'
Multi-variabile: opera con segnali 1-D e 2-D.
--,,
~~
'C'
i-f~ri~t
•.P:'F~·r'>J/·

[n[r
Pulse
f :• :

,,•.
:!\
Generator !f~
.. ,

Pulse Generator: genera una sequenza di impu lsi.


Caratteristiche:
Sample Tirne: definito quale p11.rametro,
Dala •rype: opera con eegnall reali di qualunque tl)Jo,
Muni-va.riabile: opera con segnali 1- D e 2-D.

ì
17.8. SOURCES 327

[2}
Ramp

Ramp: genera una. rampa con pendenza specificabile.


Caratteristiche:
Data. Type: opera con segnali reali di tipo double.
Multi-varia.bile: opera con segnali 1-0 e 2-D.

Random
Number

Random Number: genera una. sequenza di numeri da.euali con distribuzione gauasia.na (con
media. e varianza specificabili).
Coratteriatiche:
Sample Time: definito quale parametro.
Data Type: opera con segnali reali di tipo double.
Mult i-va.ria.bile: opera con segnali 1-0 e 2-0 .

Repeating
Sequence

Repeating Sequence: genera un segnale replicando indefinita.mente un segnale di forma. gener-


ica.
Caratteristiche:
Sample Time: definito quale parametro .
Data. Type: opera con segnali reali di tipo douhle.
Multi-va.ria.bile: opera con segnali scalari.

fifcip□l
LJ
Signsl
Generator

Signa! Generatori genera un segnale di uscita la cui forma d'onda. può e88ere scelta fra le
seguenti: seno, onda quadra, dento di sega, rumore random con dle~rlbuzloneuniforme,
Carutteristiche:
Sample Time: definito quale parametro.

lj
328 CAPITOLO 17. LIBRERIE DEI BLOCCHI

Data Type: opera con segnali reali di tipo double .


Multi-variabile: opera con segnali 1-D e 2-D.

ffi
Slne Wave
B
Sine Wave
con bias

Sine Wave: genera un segnale sinusoidale con, eventualmente, un valore di offset.


Caratteristiche:
Sample Time: definito quale parametro .
Data Type: opera con segnali reali di tipo double.
Multi -variabile: opera con segnali 1-D e 2-D.

rn
Step

Step: genera un segnale a gradino.


Caratteristiche:
Sample Time: definito quale para.metro.
Data Type: opera con segnali rea.li di qualunque tipo.
Multi-variabile: opera con segna.li l•D e 2-D.

Uniform Random
Number

Uniform Random Number: genera una sequenza di numeri casuali con distribuzione uni~
forme .
Ooratteriatiche: ..,
Samp le Time : definit o quale parametro.
Data Type: opera con segnali rea.li di tipo double.
Multi-variabile: opera con segnali 1-D e 2-D.

17.9 Subsystems
Questa libreria più che dei blocchi elementari contiene dei template da utilizzare per la costruzione
di sottosietemi. La cui esecuzione è condizionata in vario modo dal verificarsi di specificati eventi.
Per l'utilizzo di questi iemplate è sufficiente copiare il relativo blocco all'interno dello schema e~
una volta. espanso il sottosistema, andare ad introdurre al posto del collegamento fra la Jnport e
la. Outport lo schema di interesse potendo aggiungere, qualora ce ne fosse la necessità, ulteriori
porte di ingresso e/o uscita. ::!
17.9. SUBSYSTRMS 329

In questo paragrafo verranno evidenziati i blocchi elementari che possono essere utilizzati
dall'utente per la costruzione autonoma di sottosistema.

l
CJ Configurable
Subsystem

Conftgurable Subsyatem: questo elemento consente di gestire in modo efficiente quelle situ-
azioni in cui si devono provare, all'interno di uno schema, più modelli di un medesimo compo•
nente.

\.

[fil
V'

f1 I.
Enable
Enabled
Subsystem

Enabled: il sottosistema è eseguito mentre è verificata la condizione di attivazione.


Note: Il sottosistema (che deve essere atomico) mostra nell'icona una porte. con il simbolo dell'a-
bilitazione: il sottosistema è eseguito se almeno una delle componenti del segnale che comanda
tale porta è on (valore maggiore di O).
Caratteristiche :
D11taType: opera con segnali di qualunque tipo.
Multi-variabile : opera con segnali l·D e 2-D.

H
[!]
Trigger
Triggered
Subsystem

Trigger: il sottosistema è eseguito, una sola volta, ogni qual volta è verificata la condizione di
trigger.
Note: li sottosistema (che deve essere atomico) può attivarsi sul fronte di salita e/o di disceso.del
segna.le connesso con la porta di trigger. È anche possibile imporre che l'attiva2ione del blocco
sia legata ad una S-function.
Caratteristiche:
Data Type: opera con segnali dì qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2- D.
330 CAPITOLO 17. LIBRERIE DEI BLOCCHI

For
> far { ... }
lteralor
For llerator
For lterat or
Subsystem

For Iterator1 il sottosistema. è eseguito un numer o specificato di volte ad ogni passo di inte-
grazione.
Note: ll blocco deve esaere poeto all'interno di un sottosistema. atomico.
Carotteri,,iche:
De.ta Type: accetta quali segna.li di ingreBBo(numero di iterazioni) segnali rea.li di qualunque Lipo
. . che però vengono troncati a valori interi. Il tipo del valore corrente del conto.tore è specificabile
dall'interno del blocco.
Multi-variabile: opera. con segnali scalari.

il(u1 > O)
u1 elseif(u1<0)
else

lf

tr: specifica, sulla b88e dl une. o più condizioni, quo.le fra diversi sottosistemi deve essere eseguito.
Note: Possono essere utilizzati un numero arbitrario di segnali di ingresso (ognuno caratterizzato
da una propria porta ed indicati all'interno delle espressione come ul, u2, ecc.) ed un numero
arbitrario di condizioni ELSEIF (inserendo le stesse nel relativo campo separate da una virgola).
I sottosistemi attivati dalle condizioni dello lf devono essere di tipo atomico ed a.vere a.I loro
Interno il blocco Action Port a.Ila quale andrà connessa la relativa uscita. del blocco IJ. ·
Caratteristiche:
Da.LaType: opera con segnali di qualunque tipo.
Multi-variabile: opera con segnali 1-D e 2-D.

-V

Action

G ActionPort
lf Action • I

Subsystem
, .

Actlon Port: è il terminale che definisce l'attivazione di un eottoeietema comandato da un // o


da uno Switch Caae.
Note: Deve essere posto all'Interno di un sottosistema atomico .
17.10. SIMULINK EXTRAS 331

case ( 1 ]: >
u1
default: >
Switch Case

Switch Case: specifica, sulla base del valore assunto dall'ingresso, quale fra i diversi sottosistemi
connessi deve essere attivato.
Note: I sottosistemi attivati dalle condizioni dello Switch Case devono essere di tipo atomico ed
avere al loro interno il blocco Action Port alla quale andrà connessa la relativa uscita del blocco
Switch Case.
Caratteristiche:
Data Type: opera con segnali reali di qualunque tipo (eccettuato boolea.n) che, però, vengono
troncati a valori interi.
Multi-variabile: opera con segna li scalari.

cond whlle {
whlle ( ... )
IC
While lterator While lterator
Subsystem

Whlle Iterator: il sot\osistema è eseguito, ad ogni passo di integrazione, iter.e.tivamente fintanto


che non sia soddisfatta una data condizione o el raggia un numero maasitno di Iterazioni.
Note : il blocco deve essere posto all'Interno di un sottosistema atomico.
Caratteristiche:
l Data Type: opera con segnali di qualunque tipo.
1 • Multi-varinbile: opero. con segnali scalari.
' I
I
17.10 Simulink Extras I

In questa. libreria sono raccolti alcuni blocchi specialistici. Stante la loro elevata specificità si
preferisce limitarsi ad una sintetica presentazione di alcuni di tali blocchi, rimandando all'help in
linea per maggiori delucidazioni (anche se, purtroppo, non sempre la documentazione è esaustiva).
I blocchi descritti sono quelli presenti in Figura 17.1.
Alcuni di essi richiedono per poter funzionare la contemporanea presenza di toolbox quali
Signal Processing, Control, Robust Contro/.
Tutti i blocchi presenti in Eztras sono blocchi mask, è pertanto possibile effettuare su di essi
un'operazione di un-mask per poterli meglio analizzare ed eventualmente modificare.
iI
17.10.1 Additional Discrete
Discrete Tronsfer Pcn {with inìtfol output) implementa una funzione di trasferimento
qua.le è possibile specificare il valore di uscita nell'istante di start time.
per la !i I
1

I \
Discrete Transfer Fcn {with initiCJIstate) implementa una funzione di trasfcrìmcnto per la quale ! :
è possibile specificare i valori delle variabili di stato nell'istante di start time. I '·
. \
I I

Diacrete Zero-Polo(with inittal output) lmpiemonta una funzione di traaferimento per la quale è
poBSiblle specificare il valore di uscita nell'Istante di start time.
332 CAPITOLO 17. LIBRERIE DEI BLOCCHI

~~
z(z-0.5) 8 lliK}
PIO Controllar Auto Spectrum Clock
Discrete
Zero-Pote Correlator Anelyzer lR IO~
0 o
~
(wlthlnillal states)

8
PIO Controllar Avaraglng
CLK S-A
Fllp-Flop
z(z-0.5) (wllh Approxlmate PowerSpectral ICLR IO

Discrete
Zero-Pote
(wllhlnlllal output1)
Deri11ati11e)

x' • Ax+ Su
y ■ Cx+D
Dens,ty

~
O Fllp-Flop
[:]
L~.r State-Space
(wlth fnltial ou1pu1s)
Averaging
Spectrum
AnaJyzer
o a Switchad
dar111atl11e
lor
llnaarizalion

w
Discrete IO
Transler Fcn

i@ &ì
,.~.. ~
(wlthlntllat states) o Letch

~
Transfer Fcn : J Cartaalento Polar to
Cross Pelar Cartaslan
(wllh lnlllel outputs)
Corretator

88
CLK
Discrete
Transfer Fcn
(with lnltial outputs) i] :K
Degreesto Aadians
TransfarFcn Floating Bar Plot J-K
(with inillal slates) Fllp-Flop Aadians lo Oegrees
(s-1)
t>
l!:!2.t>fli51QQ
~~
8(8+1)
Zero-Pola a(s+1) 1=J t::J t.::.J
(wlthlnltlal output&) PowerSpectral Celsius to Fahrenheit Certeslen
to Spherlcalto
Zero- Pole Oensity
(wlth inltlal state&) Fahrenheit lo Celsius Spherical Carteslen

Figura 17.1: Principali blocchi contenuti nella libreria Simulink Extras.

Discrete Zero-Polo (with initial !tate) implementa. una funzione di trasferimento per la. quale è
possibile specificare i valori delle varia.bili di stato nell'istante di start time.

17.10.2 Additional Linear


PlD Controller implementa. un controllore Proporzionale• Integra.le • Derivativo.

PlD Controller (with Approximated Derivative) implementa. un controllore PID in cui la funzione
di derivazione è approssimata con una funzione di trasferimento del primo ordine.

State-Space (with initial outputs) rappresentazione di un sistema lineare stazionario in termini


di spazio di stato con la. possibiltà di specifica.re il valore dell'uscita nell'istante di start time.

Transfer Fcn (with ìnitial outputs) rappresentazione di un sistema. linea.re tra.mite la sua funzione
di trasferimento con la possibiltà di specificare il valore dell'uscita nell'istante di start time.

Transfer Fcn (with initial states) rappresentazione di un sistema lineare tramite la sua funzione
di trasferimento con la possibiltà di specificare il valore dello stato nell'istante di start time.
17.10. SIMULINK EXTRAS 333

Zero-Pote (with initial outputs) funzione di trasferimento di un sistema lineare nella forrnulazione
in termini di zeri e poli con la possiblltà di specificare il valore dell 1uscita. nell'istan\~ di ,tart
time.
I
Zero-Pale {with initial states) funzione di trasferimento di un sistema. lineare nella formulazione
in termini di zeri e poli con la possibiltà di specificare il valore dello stato nell'istante di start
tìme. 1
17.10.3 Additional Sinks
Auto Correlator visualizza l'auto-correlazione di un segnaleusando una finestra grafica MAT•
LAB. li blocco neceaalta del Signal Proceuing Too/bo:r.

Averanging Power Spectral Denaity visualizza. la desnltà. spettro.le di potenza media di un segnale
usando una finestra grafica MATLAB.

Averonging Spectrum Analyzer visualizza. la risposta armonica. media di un sistema ca.lcola.taa.


partire dagli spettro del segnale di ingresso e da quello relativo al segnale di uscita. Utilizza una
finestra grafica MATLAB.

Cros, Correiator visualizza la cross-correlaiione fra due segnali usando una finestra grafica
MATLAB. Il blocco necessita del Signal Processing Toolbo,;.

Floating Bar Plot visualizza, in una finestra grafica MATLAB, le varie componenti del segnale
selezionato tramite un diagramma a barre. Nel caso in cui si selezionino più segnali (usando il
tasto SHIFT) viene utilizzato un asse diverso per ciascun segnale.
1
~ Power Spectrai Density visualizza la. desnità spettrale di potenza di un segnale usa.ndo una
finestra grafica. MATLAB.

i
1 ••
Spectrum Analyier visualizza la risposta armonica di un sistema calcolata a. partire dagli spettri
del segnale di ingresso e da quello relativo al segnale di uscita. Utilizza. una finestra granca
MATLAB.
I
17.10.4 Flip Flops
Clock genera un'onda quadra con periodo specificabile e va.lori pari a 1 e O (l'uscita è pari ad 1
nel primo semi periodo).

D Flip-Plop implementa. la seguente tabella di verità.

Q D new Q
o o o
o 1 1
l o 1
1 1 o
dove new Q rappresenta l'uscita del Flip-Flop sul successivo fronte di salita del clock.

D Latch Flip-Flop implementa. la. seguente tabella di verità

Q D new Q
o o o
o 1 1
1 o 1
1 l 1
334 CAPITOLO 17. LIBRERIE DEI BLOCCHI
I
(
dove new Q rappresenta l'uscita del Flip-Flop sul successivo fronte di salila del clock.
l
JJ( Flip-Flop implementa la seguente tabella di verità

Q J K new Q
o o o o
o o o 1
o 1 o 1
o l l 1
1 o o 1
l o 1 o
.1 l o 1
l 1 l o
dove new Q rappresenta l'uscita del Flip-Flop sul successivo fronte di discesa del clock.

SR Flip-F/op implementa la seguente tabella di verità

s R Q
1 o 1
o 1 o
1 l o
.\
dove Q rappresenta l'uscita del Flip-Flop . Nel caso non mostrato in tabella l'us cita non commut~
di stato.
'\
17.10.5 Linearization . ;I
Switched derivative /or tineari.iation in funzione del parametro scelto Il blocco ca.lcola la deriv~
ta numerica del segnale di ingresso ovvero una sua approseimazione tramite una funzione-di
trasferimento del primo ordine (utile durante le operazioni di linearizzazione) . .

Switcl1ed transport delay /or linearization è il blocco 'Ihmsport Delay dove è stato settato a 2
l'ordine di approseirnazione di PADE.
ì
17.10.6 Transformations
Cartesian to Polar converte una quantità espressa in coordinate cartesiane in coordinate pola.ri.

Cartesian LoSpherical converte una quantità. espressa in coordinate cartesiane (3D) io coordinate
sferiche.

Celaioua to Faht-enheitconverte una temperatura. espressa. in gradi centigradi in gradi Fahrenheit.


' !1:1.l .,
Degreeato Radiuaconverte la misura di un angolo eepresaa In gradi In radianti. :i" "

Pahrenheilto Celafouaconverte una temperatura espressa in gradi Fahr enheit In gradi centigradi.
,~ , 1~
Potar Lo Cartesian converte una. quautit~ espressa in coordinate polari in coordinate cartesiane. ·-·~·:! .,• . ·~
-➔ ·I;'.
• , ~•·t
Radius to Degrees Potar to Cartesian converte la misura di un angolo espressa in radianti in
gradi.

Spherical lo Carteaian converte una quantità espressa in coordinate sferiche in coordinate


cartesiane (3D).
l

..

Parte III

Contro! Systern Toolbox


Capitolo 18

Modelli nel doniinio di


Laplace

Un sistema Lineare Tempo Invariante (LTI) può essere rappresentato, più o meno indifferente -
mente, in varie forme : tramite un insieme di equazioni differenziali, nello spazio di stato nel-
la cosiddetta forma ingresso-stato-uscita, per mezzo di funzioni razionali fratte utilizzando la.
funzione (o matrice) di trasferimento, o ancora in termini di zeri e poli o di residui e poli.
In questo capitolo saranno esaminati in dettaglio i comandi e quindi le relativa potenzialità
del Contrai Syetem Toolbox (d'ora in poi sinteticamente denominato CONTROL) rigu&rdo a.Ila
l
ra ppresentazione del sistemi LTI tempo-continuo nel dominio di La.piace, e quindi ala tramite
fu nzione di trasferimento che mediante una realizzazione in termini di zeri e poli. Il capitolo aarl
principalmente dedicato a.Ila. rappresentazione dei sistemi Single Input Single Output (SISO),
riportando poi gli aspetti relativi alla rappresentazione dei sistemi Multi Input Multi Output
I
{MIMO) nell'ultimo paragrafo .

18.1 Fun zioni di trasferimento


L'istruzione di CONTROL da utilizzare per la rappresentazione in MATLAB di una funzione di
trasferimento è:

t:t Funzione di trasferimento


t:tdata Estrazione di numeratore e denominatore

Per l'utilizio de l comando tt nel caso di siatemi tempo.discreto ai veda Il Paragrafo 24.1.
Nella parte dedicata a SIMULINI< abbiamo visto che il modo più diretto per descrivere un
sistema dinamico è quello di rappreeen~arlo tramite un insieme di equazioni differenziali. Ad
esempio, consideriamo un sistema meccanico in cui ad un corpo di massa m viene applicata un
forza F(t). La conseguente accelerazione del)a massa avri\ la stessa direzione della. forza ed una
intensità legata alla forza dalla legge di Newton :

F(t) = ma(t)
dove a(t) è l'accelerazione del corpo. Volendo determinare la posizione p(t) de lla massa bisogna.
valutare come l'accelerazione è legata alla velocità u{t) e quest'ultima alla posizione:
338 CAPITOLO 18. !vIODELLINEL DO!vIINIODI LAPLACE

2
d
a(t) = -v(t} = -d (d-p(t) ) = -p(t)
d
dt dt dt 2 dt
Sostituendo quest'ultima relazione nella precedente si ottiene:

F(t) = jj(t) ( 18.1)


m
dove si è usato il doppio punto per indicare la.derivata temporale seconda. La. ( 18.1} rappresenta.
un modello tramite equazione differenziale del sistema.
Una forma alternativa di rappresentazione del sistema si ottiene utilizzando la trasformata di
Lo.piace (monola.lera) e la funzione di trasferimento. Ricordiamo innanzitutto che la definizione
di trasformata. di La.piace per un segnale tempo-continuo p(t) è

P(.s) = C(p(t)} = 1 00

p(t)e-•tdt

dove ovviamente si è supposto che l'Integrale esista. Si definisce funzione di trasferimento di


un sistema LTI Il rapporto tra la traaforma.\a di La.piace Y(a) deU'usclta y(t) e quella. U(a)
dell'ingresso u(t):

Y(.f} = W(8)U(s)
Ad esempio, applicando la trasformata di Laplace all'equazione (18.1), nell'ipotesi di con-
dizioni iniziali nulle si ottiene la. funzione di tro.sferlmen\o
1
G(s) - P(s) - - - (18.2)
- F(s) - m8 2
Assegnare in MATLAB una. funzione di tra.eferimento è immediato, essendo per il caso SISO
la 0(3) costituita da. un rapporto di polinomi, tiplce.men\e con il numeratore di grado minore
o uguale a quello del denominatore (a seconda che il sistema. sia stretta.mente proprio o proprio
l rispettivamente). Bo.sterà quindi 8B8egnare due vettori costituiti da.I coefficienti dei polinomi
nurnoratoree denominatore, ordinati secondo le potenze decrescenti della variabile compleesa
} a. 1 Ad esempio, la funslot1e di trasferimento (18.2), MBUmendo I&m8B8a unita.ria, può essere
tl88egnata mediante le istruzioni

m=l; sopra•1; aotto"lll•[l O O];


fuma=tf(sopra,aotto)

e sulla finestra dei comandi comparirà il risultato

TranahÌ. ; :function:
1

D'ora in poi all'oggetto fuma sa.rà associata la rappresenta.zione del sistema meccanico in
termini di funzione di trasferimento {tf sta appunto per tran8/er /unction).
Spe88osi rende necessario potere modificare solo alcuni coefficienti del numeratore o denom-
inatore di una funzione di trasforirnento. Considerando ancora. Il sistema meccanico appena pre•
sentato, supponiamo, ad esempio, di volere ottenere la. funzione di traaferlmento corrispondente
a.clun valore doppio della ma&!a..Per fare cib basta digita.re
1Per la gestione in MATLAB dei polinomi si veda ii Capitolo 6.
18.1. FUNZIONI DI TRASFERINIENTO 339

Si noti che per accedere al polinomio numera.tore (denominat ore) dopo il nome dell'oggetto
che corrisponde alla funzione di trasferimento, bisogna utilizzare .num ( .den ) indipendent emente
da.glieventuali nomi da.ti in precedenza. a polinomi numera.tore e denomina tore (rispettivamente ,
sopra e sotto nell'esempio in esame). Inoltre, l'ac cesso ai polinomi numeratore e denominatore
è anche possibile utilizzando i suffissi .no .nu per il numerat ore e .do .de per il denominatore.
Si noti che digitando il comando

fum&.den

il risultato che compare è

ans =
(lx3 double)

che ci dice che il deooaninatore è un a.rra.ydi tre celle di tipo double. Se voglio vedere il contenuto
di tale array dovrò dlglLe.re

1uma.den{1}

che fornisce come risultato

ane •
1 o o

cioè visualizza il polinom io richiesto.


Un altro modo per estrarre i polinomi numeratore e denominatore dall'oggetto corrispondente
alla funzione di ~raeferimento è l'impiego del comando ttdata, utilizzabile mediante la ainta.88i

(num,den]•tfda~a(f1111a);

che produce lo &tesso effetto delle istruzioni preeen~ate in p1·ecedenza. Più in generale , ae et
dealdera accedere al polinomio numera.toro o a quollo denonilnètore bMtel'à eeguh'ele regole
degli arra.y di celle ( vodl Pa.ragtaro 18.8),
Supponiamo ora di volere oLtenere la velocità della massa. a partire dalla. posizione. Per fare
ciò bisognerà ovviamente inserire un'azione di tipo derivativo ::1ull 'uecita. del sistema. (la. velocità.
è la derivata. della posizione). Si tratta quindi di modifica.re la. funzione di tr asferimento !Ullla ,
aggiungendo uno zero nell'origine:

fu.ma.nu.m•(1 O]

che produce come risultato

Tran1fer function:
s

È evidente che aarebbe opportuno effettuare una aemplifkazlone tra numeratore e denom-
inatore (cancellazione tra zeri e poli coincidenti), cioè oitene re quella che vn sotto il nome di
roppreaentaaioneminima del elatema. Per fa.re cib al può uaaru l1lsLl'uzione

!uma:minreal(tuma)

.I
i·I
!I
'
340 CAPITOLO 18. MODELLI NEL DOMINIO DI LAPLACE

che fornisce come risultato

Transfer function:
1

SI noti che, in generale 1 è sempre opportuno utilizzare l'istruzione minreal sulle funzioni di
tr8.9ferimento ottenute mediante l'uso dei comandi di CONTROL. Ciò in quanto, talvolta, tali
funzioni di trasferimento non sono in forma minima,

18.2 Rappresentazione in termini di zeri e poli


Le istruzioni di CONTROL da utilizzare per la rappresentazione in MATLAB di una funzione
di trasferimento mediante l'indicazione degli zeri, dei poli e del guadagno statico sono:

zpk Funzione di trasferimento con zeri e poli


zpkdau Estrazione degli zeri, poli e guadagni

Per Jlutilizio del comando zpk per sistemi tempo-discreto si veda il Paragrafo 24.1.
La rappresentazione nel dominio della variabile complessa s in termini di zeri e poli si
può ricavare considerando le radici dei polinomi numeratore e denominatore della funzione di
trasferimento. Una generica funzione di trasferimento G(s) può sempre porsi nella forma:

(18.3}

dove k è la costante di guadagno, e .r e p sono i vettori delle radici (eventualmente complesse e


coniugate) dei polinomi numeratore e denominatore.
La rappresentazione in MATLAB della funzione di trasferimento (18.2), facendo riferimento
alla (18.3), potrà essere effettuata tramite le istruzioni

k•l; zeri=(); polis(O O];


fuma•zpk(zeri,poli,k)

che fornisce come risultato

Zero/pole/gain:
.;
1

~1W
jj ~/:t ~
·, ,
Nelle assegnazioni relative ai vettori zeri e poli bisogna fare attenzione a.isegni da utilizzare:
in tali vettori vanno poste le radici dei polinomi con il proprio segno e non i termini noti de~
singoli fattori al numeratore e denominatore della. funzione (18.3).
Per accedere ai diversi elementi della funzione di trasferimento !uma si possono utilizzare i
campi 1 ,z', '.p' e '.k'. Alternativamente si può impegare il comando zpkdata.

18.3 Scomposizione in termini di residui e di poli


Un'altra possibile rappresentazione di una funzione di trasferimento è quella che si ottiene espan-
dendo in fratti semplici la funzione di trasferimento espressa come rapporto di polinomi. Come
vedremo nel Capitolo 20 tale rappresentazione risulta particolarmente utile nel caso in cui si
18.3. SCOlvJPOSIZIONEIN TERMINI DI RESIDUI E DI POLI 341

voglia determinare la rispoeta impulsiva. (o più in generale l'evoluzione forzata dell'uscite.) del
sistema.
Ipotizzando che non vi siano poli multipli, essendo la. funzione di trafserimento un rapporto
di polinomi, espandendo in fratti semplici si ottiene una espressione del tipo

G(s) =:~ +_.!!._+···+ rn,. +k(s) (18.4)


S - Pl S - ,>2 8 - Pna

Tale forma può essere definita tramite un vettore colonna poli contenente I poli del sistema,
un vettore colonna rea contenente i corrispondenti residui, ed un vettore riga k contenente 1
coefficienti del polinomio che caratterizza la eventuale parte
definito solo nel caso in cui il numero di zeri sia non inferiore
Nel caso vl siano poli multipli compariranno nella (18.4}
impropria del sistema (va.quindi
a quello dei poli),
termini del tipo
l
--
r, + -- Ti+l Ti+m-1
- + ... + -------
8 - Pi (s - pi) 2 (s - Pi)m
dove m rappresenta la molteplicità del polo Pi• La rappresentazione resterà. invariata fatta
eccezione per il fatto che nel vettore poli va, riportato m volte il polo Pi•
Per ottenere la rappresentazione in MATLAB di una funzione di trasferimento in termini di
residui e poli, il comando da utilzzare è:
0

residue Calcolo dei res idui

come già visto a. pag. 113.


Per l'uso dell'istruzione residue nel ce.so di sistemi tempo-discreto si veda il Paragrafo 24.5.
Consideriamo ora il sistema idraulìco di Figura 18,1, dove :z:1 ed :i:2 sono i livelli del liquido
nei due serbatoi, u1 ed u2 sono le portate In ingresso ai due serbatoi, C1 e C:i sono le 5ezioni d~i
I
due serbatoi, R1 ed R2 sono i parametri caratteristici delle restrizioni a valle dei due serbatoi. E
semplice verificare che applicando i bilanci di massa al primo ed al secondo serbatoio e supponendo
i flussi in uscita da ciascun serbatoio in moto laminare e quindi proporziona.li al livello del
serbatoio stesso, si ottengono corrispondentemente le eeguenti due equazioni differenzia.li:
I
(18.5)

~ (18.6)
l
Applicando la trasformata di Lapla.ce alle (18.5)-(18.6) è semplice ottenere lo schema a blocchi
riportato in Figura 18.2.
Assumendo per semplicità. tutti i parametri unitari ed utilizzando per ìl termine di ritardo
un'approssimazione di Padé al primo ordine, la funzione di trasferimento tra l'ingresso u1 ed il
livello x2 è esprimibile come r
r
•I
G( ) 1 - 0.5s 4 4 3
s = (1 + 0,Ss)(l + s)2 = s + 2 - ;;-i + (a+ 1)2
Senza dovere effettuare in modo analitico la scomposizione in fratti semplici, usando il
comando residue (vedi pag. 6.1) nella forma

(rea,poli,k)•residue((-0.6 1],conv([0.5 1),(1 2 1)))

sono assegnati i vettori contenenti rispettivamente i reeidui, i poli e la eventuale parte impro-
pria del sistema, a.vendo usato come argomenti del comando residue i polinomi numeratore e
denominatore della funzione di trasferimento in esame.

I
;!
'
342 CAPITOLO 18. MODELLI NEL DOMINIO DI LAPLACE

u,{t) fj u,(t- )
)~

~ e~,__. x,(tJ I UJ(t)

l .,

RJ
I
Figura 18.1: Sistema idraulico con serbatoi.

~-- i-----..J
X, lù
l+1lùC1

Figura. 18.2: Schema a blocchi del sistema idraulico con serbatoi.

Si noti che il comando MATLAB rHidua può anche essere usato per ottenere la. funzione di
trasferimento del sistema. a. partire dalla conoecenza dei residui, dei poli e della parte impropria
del sistema. In tal caso però l'oggetto corrispondente alla funzione di irasferiment o va comunque
)
successivamen~e definito con il comando tf.
! Si noti che per rappresentare il blocco di ritardo in Ingresso allo schema a blocchi di Flgu•
l ra. 18.2 abbiamo usalo una sua approsaimaiione di Pa.dé, cioè una rappresentazione del ritardo in
termin i di rapporto di polinomi. E ben noto che la presenza dei ritardi negli schemi di controllo
è abbastanza comune. In CONT ROL è possibile de finire i ritardi in ingresso e/o in uscila a. una
data funzione di trasferimento in maniera. più semplice che non utilizzando le approssimazioni di
Pa.dé. Per mostrare come, consideriamo ancora lo schema a blocchi in Figura 18.2 e, assumend o
tutti i parametri unita ri, la funzione di trasferimento tra u1(t - r} ed x2 può essere assegnata
col comando

aerbatoi:::atf(1,conv([1 1),[1 1)))

Volendo ora esplicitare la presenza del ritardo in ingresso, aasegnando -r = l s, basterà digita.re
1
tau•1; set(s1rbatoi,'inputdelay ,tau)
\
da cui digitando ancora urbatoi comparirà la nuova rappresentazione

Transfer function:
1

j
18.4. PARAf,,tfETRI CARATTERISTICI DEI SISTEMI LTI 343

Si noti che, analogamente al ritardo in ingresso e in uscita ad un sistema (quest'ultimo defini-


bile mediante l'opzione outputdelay), è anche possibile definire ulteriori proprietà del sistema
stesso, cosi come descritto in dettaglio nel Pa.ragrafo 18.6.

18.4 Parametri caratteristici dei sistemi LTI


Le istruzioni di CONTROL utili a determinare alcuni parametri caratteristici del sistemi LTI
sono:

damp Coefficienti eh smorzamento e pulGazioni naturali


dcgain Guadagnu statico
deort Ordinamento poli per modulo
eaort Ordinamento poli per parte reale
pole Poli
zero Zeri
tzero Zeri di Lraemisslone

Per l'uso dei comandi damp e dcgain nel caso di sistemi tempo-discreto si veda anche il
Pa.ragrafo 24.4.
In questo paragrafo descriveremo brevemente come impì1?gare questi comandi nel caso di
sistemi tempo-continuo.

18.4.1 Frequenze naturali e coefficienti di smorzamento


Innanzitutto ricordiamo che data una coppia di poli complesal coniugati o ± j/j la pulsazione
naturale e<l il coefficiente di smorzamento ad essi relativi si deflniacono come

Wn = ✓ol +fj2 ( =- o
✓02 +p2
ciob, rispettivamente, come Il modulo e l'opposto del coseno della rase del numero compelaso
a+ j/J. Il polinomio monlco le cui re.dici eono o± j/J è esprimibile come

Consideriamo ora il sist ema meccanico riportato in Figura 18.3 dove J è l'inerzia, b il
coefficiente di attrito viscoso, k il coefficiente di elasticità, T la coppia e O la posizione angolare.

1/J//lll}//f/!/JJI
b

Figura 18.3: Sistema meccanico rotante con attrito e elasticità.

Un !lempllce bilancio di coppie consente di determina.re la 3eguente equazione dlff'erenzlale: [;


'
Jii + bO+ lcO= T
344 CAPITOLO 18. MODELLI NEL DO"!vlINIODI LAPLACE

I da cui, applicando la trasformata di Laplace, si ottiene la seguente funzione di trasferimento:

G{a) _ e(a) _
-T(s)-
l
Ja2 +b1+k
(18.7)

Supponiamo ora che eia. J = 0.01 kg m 2 / s; mediante la sequenza di Istruzioni

J=0.01; b=5e-4; k•2e-3;


num=1; den a(J b k];
ìner:ziaa tt(num,den);
(vn,zita)• damp(ìuerzia)

comparirà Il risultato

Il?\ ,.

0.4472
0.4472
·~fi~·
~ :••·~
:zit.a .. ..
·;:~~
0.0569 .:'~•
;.11_,
·..,; •
0.0669 __ ,_.
~-
~:
·,,.•1Y,{
;'

cioè si ottengono i vettori colonna. vn e zi ta contenentì rispettivamente le pulsazioni nature.li ed


. ~-~r
:
~:r:~
:.
::,,)
I coefficienti di smorzamento del sistema considerato.
Il comando damppub anche essere impiegato usando come argomento un polinomio. In tale
caso l'istruzione restituirà i coefficienti di smor2amento e le pulsazioni naturali del polinomio.
·;;~
:.:-~:~
Ad esempio l'istruzione
~\} ;,.
Cwn,zitaJ•dup((1 8 25J) •"""A
, ..P!1
,\

restituisce come risultato ' ,.--:•r


~~
.'/[~,
i'··F·
..· .:,·/..
'I t~ ... 1~

vn •
6 .. ~~~J~
6 :·t~~r ·
• -!J~,.
·.'-i{·
zita • ..-,,.-ì
• • ,.J •

0.8000 ·,~'t
:i-!}
0.8000 --:•.t..~
~ ~-"';-
~:~
.;·j./~.
Se l'argomento di damp è un vettore colonna , l'istruzione calcola le pulsazioni naturali ed i .., ,.:·;.-:,•
,
•t~••M~
coefficienti di smor2amento del polinom io che ha per radici gli elementi del vettore. Ad esempio, ..· ( ·-r..-,-
.,·•
l'istruzione
.. ~,...-
-~\i
(vn,zìta]adamp([-4-3j;-4+3j])

fornisce lo stesso risultato ottenuto in precedenza.


Se si usa come argomento del coma.ndo da.mpuna matrice, si otterranno come risultato i
coefficienti di smorzamento e le pulsazioni naturali corrispondenti agli autovalori della matrice .
-~·
.
;i · --~
..,...
r~~
!t! ~
11comando damppub essere utilizzato con sistemi di ordine qualsia.si e restituisce le pulsazioni
naturali ed i coefficienti di smorzamento corrispondenti alle diverse coppie di poli complessi
coniugati del sistema considerato, mentre nel caso di poli reali, coerentem ente con le definizioni
date ad inizio paragrafo, restituisce un coefficiente di smorzamento pari a ±1, secondo che il polo
sia negativo o positivo rispettivamente , e una pulsazione naturale pari al valore a.'180lutodel polo
stesso .

;1
e

:;-
~
18.5. INTERCONNESSIONE DEI SISTEMI 345

18.4.2 Guadagno statico


Consideriamo ancora la funzione di trasferimento (18.7). Digitando
. dcgain(inerzia)

si ottiene come risultato 500 1 cioè il guadagno statico della funzione di trasferimento definita (il
valore del lim,-to G(s)), Quindi, essendo l'angolo Omisurato in radianti, per una coppia di l Nm
la massa avrà compiuto a regime 500 /( 21f) ~ 80 giri.
È interessante osservare che il comando dcgain fornisce come risultato O e Inf nel ca.~o che
la funzione di trasferimento considerata. presenti rispettivamente zeri o poli nell'origine.

18.4.3 Ordinamento poli


Talvolta può essere utile ordinare i poli di un sistema. secondo la loro parte reale. A tale fine si
può usare il comando esort. Consideriamo il vettore

p = ( -1 - 3j 4j -1 + 3j - 3.4 5.2 -4j )


ed applichiamo l'istruzioue
[pord,ind]=eaort(p);
Come risultato si ottiene il vettore
I
Pord = ( 5.2
4j -4j -1 +3j -1- 3j -3,4 )
che contiene i numeri assegnati nel vettore p, ordinati in modo decrescente rispetto alla parte
reale e il vettore

ind = ( 6 2 6 3 1 4 )
che contiene gli Indici corrispondenti alla loro posizione originarla. nel vettore p, La seconde. uscita
ind pub eventualmente essere ome111Ja.Questa funzione può essere llnplegata per un qualela.sl
polinomio, ma risulta particolarmente utile per l'ordinamento degli autovalori di una matrice,
I
È interessante evidenziare la differenza tra il comando eaort ed il comando aort (vedi
pag. 4.3). Quest'ultimo infatti ordina gli elementi di un vettore non in modo decrescente per
parte reale, ma in modo crescente per modulo. Applicando ad esempio il comando eort(p)
usando il vettore precedentemente definito si ottiene come risultato il vettore
l
( -1-Sj -l+3j -3.4 -4j 4j 5 .2)
Per ordina.re gli elementi di un vettore in modo decrescente rispetto a) modulo è possibile
utilizzare il comando daort .

18.5 Interconnessione dei sistemi


La lista. delle istruzioni utili ali 'interconnessione dei sistemi è
connect Modello di un diagramma a blocchi
feedback Connessione di un sistema in retroazione
parallel Connessione in parallelo
series Connessione in serie
\.
Tuli comandi possono essere utilizzati indifferentemente per sistemi tempo~continuo e per
sistemi tempo-discreto.
Va comunque osservato che, come si vedrà. in seguito, molte delle connessioni elementari
possono altresì ottenersi mediante semplici operazioni aritmetiche sugli oggetti precedentemente
definiti.
346 CAPITOLO 18. MODELLI NEL DO!vIINIODI LAPLACE

,I 18.5.1 Connessione serie


Con riferimento allo schema a blocchi di Figura 18.2, definiamo le funzioni di trasferimento

l R2
Gi(s) = 1 + aR1C1 G2 (s) = 1 + aR2C.2
La.funzione di trasferimento della serie di questi sistemi ottenuta rendendo l'ingre&ao del
secondo sistema uguale all'uscita del primo, è come ben noto G(.,) = G2{a)G1(a). Per ottenerne
una rappresentazione in MATLAB, una volta definiti I parametri R1, R2, G1 e G2, una prima
poBSibilit~è definire
I numgaR2; deng•conv((Rl•Cl 1],[R2•C2 1]);
g•tt(11wag,d.ng)
ma lo stesso risultato può ottenersi con i com&ndi
g1•tt(1,[R1•C1 1)); g2•zpk([);-1/(R2•C2);1/C2):
g-aerie ■ (g1,gl):

SI noti che il comando 11rie1 può essere utilizzato con oggetti aventi diverse rappresentazioni:
nell'esempio preaentato un sistema era rappresentato mediante funzione di truferimento e l'altro
mediante zeri, poli e guadagno.
Lo sleeso risultato può però ottenersi più semplicemente mediante la sequenza di istruzioni
8•tf ( 1 8 I) j
g1•1/(1+a•R1•C1);
g2•R2/(1+ ■ •R2•C2);
I g•g1•g2
Si noli che, In quest'ultltno caso, si è sfruttata la possibilità. di definil'e le funzioni di trasferi- . t ':; ~·
mento G1(J) e G2(s) attrav erso operazioni r1ritmetiche sulla funzione di trasferimento elementare
a (la corrispondente istruzione poteva anche essere sostituita dalla a•t:t { (1 O] , 1)). lnolt.re
l'oggetto corrispondente alla funzione di trasferimento serie è stato otteout.o come il prodotto
degli oggetti g1 e g2.

18.5.2 Connessione parallelo


ì Al fine di mostrare come ottenre la rappresentazione di un sistema costituito dal parallelo di ,.,,1,•~
,..~
.S~1-,
~

altri sottoelsternl, consideriamo il caso dei coeiddetli controllori PIO (Proporzionale Integrale
Derivativo). Questi controllori sono sistemi LTI che ottengono , a partii-e da un segnale di errore \tj
.·1,,:
e una varia.bile di controllo u come somma di tre contributi: proporzionale, integrale e derivativo. ·...•'Ì''
~j'~!~
Con riferimento alla Figura 18.4 la funzione di trasferimento complessiva del controllore può
~✓a;
otte nerei connettendo in parallelo le tre funzioni di trasferimento elemen tari: ·Y'-1t"·
t ~ti/
.,,,,,"'~).
e•tf([1 0),1): kp•1; kd•2; ki=3;
prop•kp; dariv•kd•s; integ•ki/1;
,.. ..
• ~J".1j:".:t
~

PIO• prop+deriv+integ r.i~ff..~


••J}::·
:'lr.:.•·/',
.. ._,t...
che fornisce come risultato ll '"h'},J,
-~~~U
,f1:i.
Transfer function: .. ~·
...
2 8~:2 + Il + 3 . ~-;;,,'!I
1
'
,',
:-:.'f..·!°
"
I

In altri termini l'operazione di somma su oggetti funzioni di trasferimento opera come una

.I connessione parallelo. Si noti che lo stesso risultato si poteva anche ottenere mediante il comando
parallel che ha una sintassi analoga a. quella del comando serie ■ presentato nel precedente
pamgrafo.
18.5. INTERCONNESSIONE DEI SISTEMI 347

..
-
kp

e(t) +,, u(t)


,
~

kdS -
,

+ .h +

-
,. --1G
s

Figura 18.4: Schema a blocchi di un controllore PID.

18.5.3 Connessione in retroazione


Data una funzione di trasferimento G{8), ~ semplice verificare che la funzione di trasferimento a
ciclo chiuso ottenuta retroazionando G{s) con un trasduttore H(a) ed utilizzando una retroazione
negativa (vedi Figura 18.5) è data da

W a - G(a)
( )- l +G(8)H(s)

R E y
-.. G(s) -..
+

~ I!I,
"'
,·I

Figura 18.5: ~chema a. blocchi di un sistema retroazionato. I


I
Coneideriomo li sistema idra.ulico di Figura 18.1 e eupponi llmo di volel'e regolare il llvallo del
eecondo serbatoio mediante un controllol'e PIO secondo lo echHmadi Figuro. 18.6.
Il i
1l sistema idraulico ha due ingressi e due uscite, ma la retroazione è effettuata tr a l'uscita
112(il livello del secondo serbatolo) e l'Ingresso u1 {la portatt\ in ingresso al primo serbatoio ),
Consideriamo quindi la sola. funzione di trasferimento tra u1 ed y~. Al fine di ottenere un mod ello
del sistema a ciclo chiuso va. innanzitutto ottenuta La funzione di trasferimento corrispondente al
sistema a ciclo aperto:

s•tf('s');
PID•kp+ki/1+kd•1;
g1•tt(1,(R1•C1 1),'inputdelay', tau);
g2•R2/(1+e•R2•e2) ;
C•PID•gl•g1;
348 CAPITOLO 18. J'vIODELLI
NEL D0}"11NIODI LAPLACE

u,(t) R.i
PID(a)
+ l+sR.iCi

Figura 18.6: Sistema idraulico con controlloin retora.zione.

Ora, la funzione di tra.Bferimento del sistema a ciclo chiuso può ottenersi con i comandi

WaG/(1 +O .1 •G);
W'"'IDinreal(W)

Per ottenere la. rappresentazione di sistemi con retroazione si può usare anche il comando
feedback che però risulta poco utile nel caso di sistemi SISO. Come si vedrà. nell'ultimo paragrafo
di questo ca.pitolo, tale comando risulta invece part icola rmente utile nel caso di siatemi MIMO.

18.6 Proprietà nella d efinizione di un mode llo


Una volta definito il modello di un sistema LTI attraverso i comandi tf, zplt o sa (il comando
11 sarà presentato nel prossimo capitolo), è possibile associare ai relativi oggetti delle ulteriori
informazioni che vanno sotto il nome dì proprìetd. Per conoscere quali sono le proprietà di un
certo tipo di rappresentazione è possibile utilizzare Il comando ltipropa .
Per visualizzare le proprietà di un sistema LTI el possono usare i comandi aet e get . Ad
esempio, digita.ndo

sis==t1 ( (1 1) , (1 3]);
seT.(.sis)

si evince che le proprietà di un sistema definit o mediante una rappresentazione con funzione di
trasfer im ento sono:
• num, polinomio numeratore della funzione di trasferimento;
• den, polinomio denominatore della funzione di trasferimento;
• Vuiable, variabile indipendente che si può scegliere tra s (per sistemi continui) e z (per
sistemi discreti) 2 ;
• T11 temp o di campiona.mento (per sistemi discreti);
• ioOalay, ritardo ingresso-uscita (associati a questa proprietà vanno considerate anche
quelle di InputDelay, ritardo in ingresso, ed OutputOelay, ritardo in uacìt&);
• InputNameed OutputName,nomi dell'ingresso e dell'uscita;
• InputGroup ed DutputGroup, gruppi di ingressi ed uscite per matrici di trasferimento;
• Notes, note;
• UserData., per memorizzare dati lega.ti al siste ma considerato d'interesse per l'utente.
2 Per l'uso di altre variabili indipendenti si rim anda ai Manuali.
18.7. RAPPRESENTAZIONE PER SISTEMI MIMO 349

Supponiamo, ad esempio, di volere aggiungere un ritardo alla funzione di trasferimento s il


precedentemente definita. Per sapere se esiste già un ritardo è possibile digitare una delle due
seguenti istruzioni equivalenti ....
•il, ioDelay
l.,
't

l
get(1i1 1 1 i0D1lay 1
)

Per a.esegnare ora un ritardo pari, ad esempio , a 3 secondi potremo digitare, equivalentemente, ,,; I
una delle due istruzioni l.
.! '
sis. ioDelay,=3
1et(1i1,'i0Delay 1 ,3)

da cui comparirà la nuova funzione di trasferimento comprensiva del rlta.l'dO. Se or& voglia.mo
I
inserire l'etichetta 11tensione 11 all'ingresso e l'etichetta 11posizione" all 'usc ita potremo digitare
J
sis,InputName•'ten1ione'
set(sis,'OutputName','posizione') 1
La manipolazione delle altre proprietà è assolu t amente analoga a quella fin qui descritta e
presuppone l'uso dei comandi aet e get . In particola.re la sintassi generale del comando set per
l'assegnazione o la modifica di una o più proprietà di un sistema. risulta:

set(sia,'NomeProprieta1','ValoreProprieta1', ...
'NomeProprieta2','ValoreProprieta2')

dove gli apici prima e dopo il ValoreProprieta vanno omessi nel caso in cui tale valore sia un
numero anzicché una stringa di caratteri. Come già. visto negli esempi precedenti, equivalente
ali 'uso del comando set è l'uso del punto, ossia:

111.NomeProprieta•ValoreProprieta

Analogamente la sintassi generale del comando get risulta.

get(aia, 1 NomeProprieta1 )

e l'assegnazione di una proprietà di un sistema ad una variabile può essere effettuata mediante
il comando

variabile=sis.NomeProprie~a
l
Per ulteriori dettagli sull'uso dei comandi set e get si rimanda anche a! Para.grafo A.l.

18. 7 Rappresentazione per sistemi MIMO


18. 7.1 Matrice di trasferimento
Cominciamo col considera.re un sistema con un solo ingresso, ma più uscite (sistema SIMO). In
tale caso, il numeratore della matrice di trasferimento G(s) non è più costituito da un semplice
polinomio, ma da un vettore di polinomi ciascuno corrispondente ad una uscita. In questo ca.so
al vettore num va sostituto un insieme di vettori il cui numero coincide con il numero delle uscite
considera.te. Se il denominatore delle diverse funzioni di trasferimento è lo stesso, allora. den
può aocora essere un semplice vettore, altrimenti anch'esso dovrà essere un insieme di vettori di
dimensioni congrue~ti a quelle di nuro.
Consideriamo nuova.mente una massa soggetta ad una forza F' e, oltre alla posizione p,
scegliamo come ulteriore uscita anche la velocità v. La corrispondente matrice di trasferimento
potrà quindi essere definita mediante l'istruzione
350 CAPITOLO 18. MODELLI NEL DOMINIO DI LAPLACE

111•1;
fuma=tf({l; [1 0]},(11 O O])

che fornisce come risultato

Tran1fer function from input to output ..•


1
11:

I
12:

l' Per evldensiare le possibili cancellazioni poeelamo usare il comando


I fuma-.inr1al(fuma)

che fornisce la matrice di trasferimento

Tran11er tu .net ion tro11 input to output. , .


1
t1:

1
12: -
I

I Nel caso di un sistema MIMO si deve generalizzare l'approccio descritto per i sistemi SIMO.
Ad esempio, consideriamo ancora. il sistema idraulico riportato in Figura 18. l. A partire dal
modello ( 18.5)·( 18,6), o, equivalentemente, dallo schema a blocchi di Figura. 18,2, considerando
come usciledel elatema.I livellidel due serbatoi si ha:

( ~!~:~ ) = G(a) ( ~~~:~ )


dove la matrice di tra.eferime"tO 0(8) è data da


li termine di ritardo può eesere sostituito con una approssimazione d i Padé al secondo ordine:
(18.8)

tau•1; ordine•2; [nlllll1'it ,denrit]•pade(tau, ordiH)

La matrice di tra.sferimento dell'intero sistema può quindi essere assegnata mediante la


sequenza di istruzioni:

R1•1; R:Z•i; C1•1; C2•2;


NUH• {Rl•nwuit, O; R2•nWll'it, R2};
D&H11•conv((R1•C1 1],d,nrit);
OEN21•eonv((R1•C11],eonv((R2•C2 1],denrit));
0EN11{0EH11, 1 l 0EH21, [R2•C2 1]};
SISidnulicostf(NUM,DEN)
18.7. RAPPRESENTAZIONE PER SISTE!i1IIVIIMO 351

che fornisce

Transter function trom input 1 to output ...


,-2 • 6 I+ 12
tl: -----------------------
•A3 + 7 .-2 + 18 1 + 12

a•:z • 6 I ♦ 12
12: -----------------------------------
2 ,-4 ♦ 16 ■ •3 + 43 8-2 + 42 I ♦ 12
·1
Tranafer function from input 2 to output ... '
I
I
11: O j
'!
1
t2: -------
2 I + 1

Si noti che per accedere ai singoli polinomi della matrice di trasferimento bisogna seguire le
cl9.88iche regole degli array di celle. Se, ad esempio, si vuole conoscere il polinomio numeratore
della funzione di trasferimento tra la seconda uscita ed il primo ingresso, bisogna eseguire il
comando

SISidraulico.n{2,1}

Se vogliamo invece conoscere la. funzione di trasferimento tra. la seconda uscita. ed li primo
ingreseo basta digitare

g•SISidraulico(2,1)

assegnando In g la corrispondente funzione di trasferimento.

18.7.2 Rappresentazione con zeri e poli


Per assegnare sistemi MIMO in termini di zeri e poli si può applicare una procedura analoga a.
quella mostrata nel precedente paragrafo per l'uso del comando tf. Ad esempio la matrice di
trasferimento (18.8), utilizzando la forma (18.3) e per il termine di ritardo l'approsaimazione di
Padé al primo ordine, può essere riscritta come

-1 " - ~
-
G(a) _
C1 (-'+ ri1c;-Ha+
1 I 1.
:) (18.9)
(
R1;:C2
(s + ~)(:: l I
~)(s
2 l
+! )
~

e quindi assegnata mediante la sequenza di istruzioni:

k•(•1/Cl, O; ·1/(Rl•C1•C2), 1/C2);


ZERI•{root1(numrit), [J; roota(numrit), [J};
POLI11•(·1/(R1•C1); root1(denrit)J;
POLI21•(·1/(R1•C1); •1/(Rl•C~)i root,{denrit)];
POLI•{POLI11,[); POLI21, -1/(Rl•C2)};
SISidraulico•zpk(ZEl\l,POLI,k)

che fornisce come risultato


352 CAPITOLO 18. MODELLI NEL DONIINIO DI LAPLACE

Zero/pole/gein trom input 1 to output ...


- c ■ -2 - 6s + 12)
11: ---------------------
(1+1) ,.-2 + 61 + 12)

-o.6 c,-2 - 6s + 12)


12: -----------------------------
(11+1) (a+0.6) (1·2 + 6s + 12)

Zero/pola / gain from input 2 to output ...


11: O

0.6
t2; -------
(s+0 .5)

18. 7 .3 Array di sistemi SISO


li modo forse più semplice per definire un sistema. MIMO è concatenando dei sistemi SISO,
vale a dire definendo separatl\mente le singole funzioni di trasferimento componenti anzlcchè la.
matrice di trasferimento nel suo Insieme. Le alngole funzioni di traaferimento componenti ven•
gono poi l\88emblate In un unico oggetto corrispondente alla. matrice di trasferimento desiderata,
Consideriamo il sistema con funzione dì trasferimento

G( 8 ) "+ (
= s2 + 7.t + 10
e supponiamo di voler analizzare Il sistema al variare dello zero. A tale fine, possiamo definire
un sistema MIMO, o meglio SIMO, in cui ciascuna funzione di trasferimento corrisponde ad un
particolare valore di ,. In particolare, digitando

den• (1 7 10] ;
zeta• (1 5 10) i
nu.m1•(1 zete(1));
nwn2•(1 ze~a(2)];
num3•[1 zeta(3}];
sia1•tf(nWD1,den):
1i12•tf(num2,den):
1i13•tf(num3,den):

possiamo ora. concatenare le singole funzioni di trasferimento col comando

si1•(1i11; 1112; si13);


sis""lllinreal ( a is)

che fornisce come risultato

Tran1f•r tunction from input to output , ..


• + 1
11: --------------
.~2 + 7 s + 10

' 1
12:
s + 2
18.7. RAPPRESENTAZIONE PER SISTEMI MIMO 353

s + 10
13: --------------
.-2 ♦ 7 I+ 10
cioè l'nasegnazione di un array di tre funzioni di trasferimento. Volendo accedere, ad esempio alla
funzione di tra.sferimento tra il primo (unico in questo caso} ingreseo e la terza uscita., basterà
digìta.re
sis(3,1)
Se invece voglio visualizzare il polinomio numeratore della stessa funzione di trasferimento dovrò
digitare
■ i ■ (3, 1) .nUJ11{1} \.
che fornisce
ans ,.
o 1 10
dove si può notare che compare uno zero come primo coefficiente, aggiunto da CONTR.OL per
mantenere le ra.ppresenta2ioni dei polinomi numeratore e denominatore della stessa lunghezza.
Lo stesso tipo di sistema MIMO pub essere assegnato considerando I diversi sottosistemi
SISO come delle singole entità. La.sequenza. di Istruzioni,
ai ■ (:,: ,1)•1111;
lli1(:,:,2)•sia2;
~ia(:,:,3)•sis3i
lia"lllinreal ( ■ ia)
forniece come risultato
Hodel 111(:,:,1,l)

Tra.nafer tunction:
s + 1
i •
I

Hodel sia(:,:,2,1)
aaa■•••aa ■••••••••

Tranafer function:
1

I + 2

Model sia(:,:,3,1)

Tranafer function:
I ♦ 10

3:x:1 array of continuou1-ti111e tra .nster funetions.


cioè l'assegnazione di un array di tre funzioni di trasferimento. t ,i
I

l.
1:
,l
l•

li
. ~~
~\ •S' ;\
~ (:( ~....
t>-·~ -;· I
<iI.
i-f .
H·,:..
354 CAPITOLO 18. MODELLI NEL DO!VIINIO DI LAPLACE

18.7.4 Zeri di trasmissione . ·~l:,:•


;.

Ricordiamo innanzitutto la definizione di zeri di trasmissione. Assegnata. una matrice razionale


G(.!) di rango normale r (si pensi alla matrice di trasferimento di un sistema. MIMO) è sempre

.I posaibile riportarla in una forma. pseudo-diagonale a blocchi (la matrice di trasferimento non è
necessariamente quadrata) del tipo

. { E1(s) E2(.9} Er(.9) }


M(s} = diag ttii(s}' 1/l~(s)'"'' tbr(.,)'0,0, ... ,0

detta anche forma dì Smith-McMilla.n, dove i polinomi monici (cioè con coefficiente del termine
di grado mastimo unitario) (Ei, ,Pi) sono primi tra loro e vale la proprietà di divisibilità esatta tra
ogni polinomlò t, a quello Immediatamente eucce88ivo e fra ogni polinomio Wie quello precedente.
SI definiscono zeri di trasmissione le radici del polinomi e,.
La definizione risulta quindi une.
generalizzazione della definizione degli zeri nel ca.so SISO e mantiene fisicamente il concetto
relativo alla situazione in cui l'uscita è zero pur non essendolo necessariamente gli stati e gli
ingressi. In altri termini un numero complesso À è uno zero di trasmissione per un sistema se,
per qualche vettore d'ingresso uo e qualche stato inizia.le xo risulta.no verifica.te le equazioni
.?
I x(t)
O
=
=
Ax(t) + BuoeÀt,
C:i:(t) + Duoe-"t
:z:(0)= Xo

Con una delle istruzioni

i zeritr•tzero(A,B,C,D);
zeritr•tzero(siatema);
(poli,zeri~r]~pzmap{aiatema):

si possono ricavare gli zeri di trasmissione del relativo sistema.


f
18,7.5 Connessioni
Le connessioni tre. sistemi MIMO esguno regole analoghe e.quelle presentate per I sistemi SISO.
Alcune differenze nascono nel caso in cui ai voglia.no connettere solo parzialmente due sistemi
MIMO (cioè connettere solo alcune delle uscite di un sistema con alcune degli ingressi di un altro
sistema).
Facendo riferimento alla Figura 18.7 (serie parziale di due sistemi), il sistema serie può essere
ottenuto col comando

r••rie ■ (ai1i,1ia2,ua1,in2);

dove nei vettori uel e in2 vanno specificati gli indici rels.t.ivi rispettivamente alle uscite del primo
sistema. che si desidera connettere agli lngre68i del secondo. Ovviamente ua1 e in2 devono a.vere
la ste88a. dimensione (nel caso in figura u11s1 e in2•2 ed hanno entrambi dimensione unitaria).
Si noti che nel caso di un sistema serie parziale, il sistema. complessivo ottenuto col comando
Hriea avrà come ingressi i soli ingressi del primo sistema e come usci\e le sole uscite del secondo
eietemo..
Nel ca,io di connessione parallelo, facendo riferimento alla. Figura 18.8 il comando

g•pu&llel( ■ i ■ 1,sia2,in1,in2,ua1,ua2);

consente di ottenere un parallelo parziale, cioè solo gli ingressi i cui indici sono specificati in in1
ed in2 sono fatti coincidere, così come solo le uscite specificate in us 1 ed us2 saranno sommate
per ottenere l'uscita del parallelo (ovviamente in questo caso in1 ed in2 devono avere le stesse
dimensioni, cosl come ual ed u112). I restanti ingressi e le restanti uscite saranno considerati
18.8. ESERCIZI 355

r - - - - - - - - - - - - - - - - - - - - - -,

=-
I I
y=y 2
I Sistema 2 I
Yl U2
ti =U1 I I
Sistema 1 I
~
I
- - _,
Figura 18.7: Serie parziale di due sistemi.
r--------------- 1
I I

I Sistema 1 I
U2 I I 111
'
I
$ I
I Sistema 2 I
I I
L _______________ J

Figura 18.8: Parallelo parziale di due sistemi.

applicati a.isingoli sistemi non i nterconnesei e, a differenza del comando seriea , sa.ranno anch'essi
cons idera.ti come ingressi e uscite rispettivamente del sistema complessivo.
Vediamo ora come si ottiene la. connessione in retroazione di sistemi MIMO. Consideriamo
ancora H sistema idraulico di Figura 18.1 e supponiamo di regolare il livello del secondo serbatoio
mediante un controllore PID secondo lo schema di Figura 18.6. Il sistema idraulico ha due ingressi
e due uscite, ma la retroazione è effettuata tra l'uscita Y2 e l'Ingresso u1, Al fine di ottenere un
modello MIMO del sistema & ciclo chiuso va Innanzitutto ottenuta la matrice di tra.Bferlmento
corrispondente al sistema che ha come lngreeel (e, u2) e come uscite (111,.V2):
g1•PID•tt(1,(R1•C1 1), 1 1nputdelay', tau1);
s:stf( 1 a 1 ); g2=R2/(1+s•R2•c2};
Gca•(R1•g1 O; g1•g2 g2];
Ora., la matrice di trasferimento del sistema. a ciclo chiuso può ottenersi con i comandi
INe•1: USy2•2; sagno•-1; tra1duttore•0.1;
Gccafe•dback(Gca, trasduttore, INe, USy2, 1egno)
dove INe è Il vettore degli indici degli ingressi di controllo del sistema a ciclo aperto, USy2 è il
vettore degli indici delle corrispondenti ueclie da retroazi onare e aegno•-1 indica. una retorazio11e
positivo.

18.8 Esercizi
Eaerdzio 18, 1 Si assegnino in MATLAB le aeguenti /unzioni di trasferimento

G() s+2 G() s-5 G 5 s1 + 2 s - 1


2 8
1
s = a2 + 2s + 1 ' = s 2 + 8a + 25 ' 3
{s) = (s + 4)(s2 + 2 s + 1) 1
(s - 3}(s + 1) l
G 4 (s ) =5-----,
(s +2)(s - 4) Gll(s)= (a+l-j)(s+l+j)
., .
...

356 CAPITOLO 18. MODELLI NEL DOMINIODI LAPLACE

Si determinin o le corrispondenti rappresentazioni in te,mini di zeri, poli e guadagni. Usando


il comando damp si valtJtino quindi coefficienti di smorzamento e frequenze naturali.

Esercizio 18.2 Si ~segnino ìn MA TLA B le seguenti matrici di trasferimento

.,+ 2 ) (.t + S~.r + 3} )


( ( 2 s2 + 12 s + 18
.s3 + 3s 2 + l
s 3 + 5s + l (s + 20 ± 10j)(s 2 + 8 s + 12)
Si determinino le corrispondenti rappresentazioni ìn termini di zeri, poli e guadagni.
U,ando il comando damp 11 valutino quindi coefficienti di smorzamento e frequenze naturals.
Esercizio 18.S Dato il circuit o riportato in Figura 18. 9, applicando i principi di Kirchhoff se
ne ricavi una rappresentazione in te,mini dì equazioni differenziali.
R L

~-----.
y
e

Figura 18.9: Circuito elettrico.

Assegnati quindi i parametri R1 = 1.5 fl, L = 0 .25 H, C = 0.5 F, ~ = 5 O , si rica11ino e si


assegnino in MATLAB le rappresentazioni del circuito in termini di funzione di trasferimento,
di zeri e poli e di residui e poli.
Esercizio 18.4 Sia assegnato il circuito riportato in Figura 18.J0 dove l'ingresso u ~ una cor-
rente e l'us cita y una tensione. Applicando i principi di Kirchhoff se ne ricavi una rappresen-
tazione in termini di equazioni differenziali.
Assegnati quindi ad arbitrio i parametri del circuito purché siano verificate le condizioni
R1 = Rl =Re R 2 C/L =1, si verifichi che la funzione di tra/erimento del circuito è pari ad
una costante . Qual .!Iil valore di questa coatanteV
Eeerclzio 18.~ Dato il circuito riportato in Figura 18.JJ se ne ricavi una sua rappresentazione
in termini di equazioni differenziali. Auegnati quindi i parametri R = l n, L = l mH, C = 5
mF, si assegni in MATLAB il modello con funzione di trasferimento considerando come uscita
la sola y e poi con matrice di trasferimento considerando come uscite Yl ed y2. Si ricavjriq
quindi le rappresentazioni del circuita in termini di zeri e poli e di residui e poli.
Esercizio 18,6 Si consideri la serie di due sistemi con /unzioni di trasferimento

Si determini la funzione di trasferimento G. 12 = G1 G2, Si costruisca uno schema Simulink


applicando lo steuo ingresso a gradino sia alla serie dì 0 1 e G2, sia alla sola G412. Si con-
frontino le uscite e si discutano i risultati ottenuti rappresentando anche l'uscita della sola
G 1 . Si effettui poi un ulteriore confronto con riferiment o alla funzione di trasferimento serie
G.121 = G'lG1 ,
18.8. ESERCIZI 357

ti e
y

\
Figura 18.10: Circuito elettrico . 1
L e
••,__ ___ ~
I I I l y
l;..__________

----1

I
y R
l
Figura 18.11: Circuito elettrico con due ingressi e due uscite.

Esercizio 18. 7 Con riferimento alle /unzioni di trasferimento definite nel precedente esercizio
si verifichi la differenza nelle rappresentazioni di G.s12 e Gs21, Si ripeta poi il confronto dopo
avere applicato ad entrambe le rappresentazioni il comando minreal.

' .

1
1

, ;

. , ..
...·.
F',I~•
~
~

,:

l
Capitolo 19

Modelli nello spazio di stato

In ques~o capitolo vedremo come è possibile assegnare in CONTROL una rappresentazione di un


sistema LTI mediante equazioni nello spazio di stato, Affronteremo quindi I metodi per ottenere
la conversione tra. le diverse rappresentazioni di un sistema LTI, I<'proprietà di controllab ilità ed
osservabilità., o la riduzione di ordine dei modelli.

19.1 Rappresentazione nello spazio di stato


Le istruzione di CONTROL da utilizza.re per le rappresentazioni nello spazio di stato di un
sistema LTI sono:

11 Rappresentazione nello spazio di stato


udata Estrazione delle matrici della rappresentazione

Tali comandi possono essere anche utilizzati per sistemi tempo-discreto a patto di indicare
il periodo di campionamento tra le opzioni dei comandi stessi (vedi Paragrafo 24.1).
Qualsiasi sistema LTI proprio può essere rappresentato mediante un insieme di equazioni
differenziali del primo ordine del tipo:

x = Ax+Bu {19.1)
y = Cx+Du {19.2)
dove u è il vettore degli ingressi, x è il vettore di stato, 11è quello delle uscite, A si dice matrice
dinamica del sistema, B matrice degli ingress i, C matrice delle usite e D matrice ingressi-uscite,
Come ben noto, l'elemento fonda.mentale di MATLAB è la matrice . Pensare quindi in MATLAB
ad un sistema. rappresentato nelle. forma ingresso-stato-uscita. equivale semplicemente ad a.sseg•
nace quattro matrici: A, B, Ce D relative al modello (19.1)-(19.2), ciascuna delle qnali sarà
trattata come una singola variabile .
Ad esempio, considerando ancora il sistema meccanico costituito da un corpo di massa uni•
te.ria, spinto da. una forza F, la relazione tra F e la posizione 7, è rappresentabile mediante la
cascata di due integra.tori (Flgur&. 19.1), Tale sistema, in termini di spazio di stato, può essere
rappresentato come

z = (~ ~)x+(~)u
11 = ( O 1 )~
360 CAPITOLO 19. MODELLI NELLO SPAZIO DI STATO

dove la prima \/ariabile di stato è la velocità e la seconda è la posizione. Le istruzioni

A=[O 0;1 O); Ba(l O]'; C=(O 1]; 0:0; .


. , ,.
,,,,.
f

forniscono le matrici relative ad una po8!1ibile rappresentazione del sistema suddetto nello epiuio
di stato.

....__I__,x1=±2 •~I_J___,1---y--_x_2
I

_u =_x_1
--+l•I '.

Figura 19.1: Schema a blocchi di un doppio integratore.

È chiaro d 1altr11.parte che, qua.le che sia. la rappresentazione adottata, l'oggetto fisico model-
lato è sempre quello visto Paragrafo 18.1. Cos\ come per le funzioni di trasferimento, si pone ora
s..;.:..
il problema di definire in MATLAB l'oggetto fisico a partire dalle matrici che ne definiscono la 'l
rappresentazione in spazio di stato. A tale fine si può usa.re l'istruzione

DOPPIOint•11(A,B,C,D)

do\/e u sta appunto per 11ste.te-space''. ossia spazio di stato. Si noti che l'oggetto DOPPIOinte
l'oggetto fuma definito nel Paragrafo 18.1 sono in realtà lo stes,o oggetto, anche se definiti in
maniera diversa. Digitando

DOPPIOini.B

si può accedere alla matrice B dell'oggetto D0PPI0int, Inoltre, anche se la matrice dinamica del
sistema (o analogamente una delle altre matrici del sistema) è deRnlta con un nome diverso da
A, per accedere aJla matrice dina.mica del sistema bisognerfl. digitare sempre l'istruzione

DOPPIOint. A

o indifferentemente

DOPPIOint.a

Per le altre matrici andranno ovviamente utilizzati i campi'. b', '. e' e'. d' . Alternativamente
si può utilizzare il comando sadata con la sintassi

(A,B,C,O]=ssdata(DOPPIOint);

19.2 Controllabilità ed osservabilità


La lista dei comandi di CONTROL relaiivi alle proprietà di controllabilità e di osservabilità è:

ctrb Matrice di controllabilità


ctrbt Forma controllabile a blocchi
gram Gramiani dì controllabilità e di osservabilità
obsv Matrice dì osservabilità
obsvf Forma osservabile a blocchi
19.2. CONTROLLABILITA ED OSSERVABILITÀ 361:

Tutti questi comandi poaeono essere anche utilizzati per sistemi tempo-discreto. . ..
Dato un sistema del tipo . .. . ·:-

± = Ax + Bu
una coppia di matrici (A 1 B) ai dice controllabile se, assegnati due qualsiasi stati :z:oed :i:1 e due
qualsiasi istanti di tempo to e t 1 con to < t 11 esiste un controllo ti che porta il sistema.dallo stato
:ro aJPistante to allo stato :z:1 all'istante t 1 • Tale definizione non fornisce alcun metodo analitico
per determinare se una coppia dì matrici sia o meno controllabile. A tale proposito risulta
invece di maggiore utilità la seguente equivalente definiziont!: una coppi/\ di matrici (A, B) si
dice controllabile se

rango( B AB A" - 1 B ]=n (19.3)


dove n rappresenta l'ordine del sistema (cioè la ciimenatone del vettore di stato) .
Verlfkara la controllabilltl è abbaatanu semplice attraverso le l1Lru1lonl di CONTR.OL.
Consideriamo Il modello di un motore a corrente continua con eccitazione indipendente

ku
o
L
I
B 1 i
J J I
f
Ii
dove la prima variabile di stato è la corrente di armatura, la seconda è la velocità del rotore e gli ~
alLrl parametri hanno il seguente slgnlftcato

R resistenza.di armatura.
L induttanza di armatura
J momento d 1inerzia.
B coefficiente di attrito
lct costante di coppia
/tu costante di forza controelettromotrice
u tensione di armatura
T1., coppia di carico

Assumendo nulla. la coppia di carico e tutti gli altri parametri unitari tranne L = l mH, si
ottiene il modello ·

( ±1
±2 ) = ( -10: )( )+( o )u
-10
-1
3
:z:1
:r2
103
(19.4)

y = ( o l )( :~) (19.5)

Assegnatele matrici A e B 1·elative a questo sistema, l'istruzione

Hcont•ctrb(A,B);

fornisce la matrice

103 106 )
M cont = ( O 103
,

362 CAPITOLO 19. !vIODELLINELLO SPAZIO DI STATO ·-


..,.
che costitu isce la matrice di controllabilità definita in (19.3) relativa al sistema (19.4)-(19.5}. Il
sistema risulta quindi controllabile come sì può verificare, in base alle considerazioni preceden-
temente fatte, dal rango della matrice Hcont ottenibile col comando rank(Mcont).
Si noti che il comando ctrb può anche essere utilizzato su un sistema rappresentato come
oggetto purché esso sia stato definito mediante una rappresentazione nello spazio di stato.
l sistemi caratterizzati da motrici non controllabili possono essere scomposti in una parte
controllabile ed In un'altra. non controllabile (forma di controllabilità di Kalman). In altri ter-
mini, dato un qualunque sistema LTI, esiste sempre una trasformazione T tale che le matrici
trasformate

1
At =TAT- , Bt =TB
assumano la forma di matrici a blocchi

A _ ( Anc
t - A:n
con llnc di dimensione non nulla se Il sistema non è controllabile, e dove la coppi a ( Ac, Be) è
contrullabile. Si osservi che solo le matrici Anc ed Ac saranno certamente matrici quadrate,
mentre i rimanenti blocchi potranno non esserlo. .... .
Per vedere come ottenere questa forma con i comandi di CONTROL consideriamo il circuito • f
elettrico rappresentato in Figura 19.2.

.I Ri R2
Ra
u

x, lI e,
y
x, l C2

• T
Figura 19.2: Ponte di resistenze e condensatori.

Un 11uomodello nello spazio di stato è

R1 +_.;,.~1--:i:2
Ra
.....;;_
l + --u1 {19.6)
C1R1Ra C1Ra R1C1
1 R2 + R3 1
--:i:1 - ---x2 + --u ( 19.7)
C2.Ra C2R2.Ra R2C2
Il = :c1 -:r:2 (19.8)
Aseumiamo ora. tutte le resistenze pari ad 1 k11e ciascuno dei due condensatori pari a.cl1 mF.
Tale eletema \isulta non controllabile come ai evince dal fatto che il comando ctrb restituisce In
queato caso la matrice

Mcont =( ! -l
-1
)

l
19.2. CONTROLLABILITÀ ED OSSERVABILIT.4. 363

che ha rango uno. Dopo aver assegnato le matr ici del modello del circuito considerato

A=[-2 1;1 -2): B=[l 1]': C=[l -1];


l'istruzione

[At,Bt,Ct,T,k)•ctrbf(A,8,C);

oltre a fornire le matrici relative al sistema. trasformato

( !~) = ( -~ -~ ) ( :~ ) + ( l.~ ) u

11 = ( -1.4 O ) ( :~ )
restituisce anche la matrice di trasforma~ione

-1
T=0.707 ( 1
ed il vettore k i cui elementi costituiscono il rango di ciascun blocco della matrice At.
Si noti che nell'us o del comando ctrbf le variabili di uscita T e k possono anche essere omesse.
Dal sistema trasformato risulta evidente che solo la variabile z 2 è controllabile.
PMSiamoora a considerare quali strumenti fornisce CONTROL relativa.mente a.Ila proprietà
di osservabilità. Una. coppia di matrici (A, C) si dice osservabile se la. matrice di osservabilità
definita come

ha rango mBBsimo,
La maggioranza dei risultati legati alla proprietà di osservabilità. delle matrici del siatemi •r
LTI può ricavarsi per dualità da quelle di controllabilità, Infatti uni\ coppia di matrici (A, C) è I
osservabile se la coppia ( A T, CT) è controllabile.
Anche nel caso di sistemi non osserv abili, è sempre possibile definire una trasformazione tale
da ottenere una rappresentazione che evidenzia la parte osserva.bile e quella non osservabile del
sistema (forma. di osservabilità di Kaiman) , 088ia.tale che

At = ( Aò° 1~ 2
) , Ct = ( O Co ) (19.9)
Con l'uso dei comandi di CONTROL possiamo subito verificare che il sistema (19.6)·{19. 7)-
(19.8) con i para.metri suddetti,
oltre a non essere controllabile non è nen.nche osservabile. In
particole.re l'istruzione

Mosa•obav(A,C);

restituisce la. matrice

i
che non è di rango pieno. Tramite li comando
. II
(At,Bt,Ct,T,k)sobsvf(A,B,C):

si ottiene la forma di osservabilità di Kaiman . !I


I I
Il
Ì I

iI I:I
364 CAPITOLO 19. NIODELLINELLO SPAZIO DI STATO

19.3 Conversioni tra le rappresentazioni


Uno dei notevoli vantaggi di CONTROL è quello di consentire li passaggio da un tipo di rap-
presentazione ad un'altra con estrema facilità, In questo paragrafo vedremo appunto come ~
possibile effettua.re que11titipi di trasformazioni, ·
I comandi relativi alle conversioni tra le varie forme di rappresentazione di un sistema LTI
coincidono per lo più con quelli descritti per la. definizione delle diverse rappresentazioni di
modello di un sistema LTI. In particolare:

canon Trasformazione nella forma canonica.


ss2ss Cambia.mento di base
ss Da tutte le forme allo spazio di stato
tf Da tutte le forme alla funzione di trasferimento
zpk Da tutte le forme a zeri-poli

Tutti questi comandi sono utilizzabili con la stessa sintassi anche per sistemi tempo-discreto.

19.3.1 Trasformazione di base


Spesso può essere utile effettuare un opportuno cambiamento di base su un modello del sistema
nella forma ingresso-stato-uscit~. Consideriamo il circuito elettrico rappresentato in Figura 19.3.

lOR e
u

IOR e

Figura 19.3: Ponte di resistenze e condensa.tori.

Considerando come variabili di stato le tensioni a.i ca.pi dei due condensatori e come uscita
la somma di tali tensioni, una possibile rappresentazione ingresso-stato-uscita del circuito è

I RC:i:1 = -l.l.x1-.x2+t1
I
ìj RC±2 = -::1 - 1.1 x2 +u
t
Il Y :z:1 + :z:2
~•i
Volendo far coincidere una delle variabili di stato con l'uscita possiamo operare il cambia-
mento di base
t,
I

i1

Scelto RC = I s, tale cambia.mento di base può essere ottenuto con la.successione di istruzioni
19.3. CONVERSIONI TRA LE RAPPRESENTAZIONI 365

A•(-1.1 -1;-1 •1,1]; 8•(1;1); C•(l 1);


T•[10;11];
1i1RCx•11(A,B,C,D);
1i1RCz•11211(1i1RCx
1 T);

di cui l'ultima fornisce le matrici relative al modello trasformato

i1 = -1.1 .r1 - z2 + u
-2.1 z2 + 2 u
'
·~
i:i =
i
i· y = z:2
Quindi più in generale il comando H2ss consente di effettuare un cambia.mento di b8.'le del
tipo

z: = T:1:
fornendo in uscita. una rappresentazione del sistema nello spazio di stato le cui matrici sono:

At = TAT- 1
, Bt = TB, Ce= cr- 1

Si noti che il numero 2 nel comando ss2ss è usato perché nella lingua inglese la sua pronun-
cia, ma non la sua scrittura., coincide con la pronuncia della preposizione "to", che in italiano
corrisponde alla preposizione "a.". Il senso quindi della scrittura. u2u è "da spazio di stato a
spazio di stato".

19.3.2 Forme canoniche


Una particolarizzazione dell'istruzione sa2ss è il comando canon che consente di ottenere due
diverse rappresentazioni del sistema a partire da una generica rappresentazione nello spazio di
stato. Considerando ancora l'esempio del ponte di resistenze e condensatori precedentemente
descritto, l'istruzione

aisRCt=canon(sisRCx);

fornisce le matrici

At = -0.1 O)
( O -2.1 '
e, = ( O -1.41 ), Dt = O
ciol! una. rappresentazione tale che la matrice dina.mica eia diagonale e quindi presenta gli auto-
valori sulla diagonale stessa. li risultato del comando canon perde di significato nel ca.so in cui
la matrice dinamica del sistema non riaultì die.gonalizza.bile.
Vediamo ora cosa accade nel caso dì autovalori complessi coniugati. Consideriamo ancora
il sistema idraulico di Figura 18.1. La funzione di trasferimento tra u1 ed z2 risulta l'elemento I
(2, 1) della matrice di trasferimento (18.9). Questa funzione di trasferimento, sostituendo al 1;
ritardo una sua approssimazione di Padé del secondo ordine, può essere riscritta come

.,2 - il.a- g.
W21(s) = R2 ,. ,. (19.10)
• (l + sR1C1)(l + sR2C2) (s2 + !s + !=f)
Scelto 1' = =
1sec, R1 R2 = 1 sec/m 2 , C 1 =
1 m 2 e C2 = 2 m 2 , la funzione di trasferimen-
to (19.10) avrà due poli reali in -1 e -0 .5 e due poli complessi coniugati -3 ± 1. 73j. In questo
ca.so, una rappresentazione del sistema nello spazio di stato con matrice dinamica. diagonale può
ottenersi con la sequenza di istruzioni
''¾
·~ ,~
.....
) ~
·,
CAPITOLO 19. !VIODELLI NELLO SPAZIO DI STATO ; i,\'!
366
;~
t '
.,. .
SISidraulicoctf([ 1 -6 -12],conv([2 3 1),(1 6 12))); •'f.l"')
canon(SISìdraulico) ,...

~Ji:
• ,l ••
J..;•:
-~
che forniscono le matrici trasformate in modo che la matrice dinamica assume la forma. '~è)
~~{f[·
:t:Jl,,
-·~
-3 1.73 o ...
·,i'1~
1 •~:

_j)
'(~

A t-
_ -1.13 -3 o r:~ ~
o o -1 . -~
(
o o o ...::::-
;~
.. ; • .-~
,J!.
,'/',)f.
cioè una matrice diTiamica diagonale a blocchi con elementi (blocchi) sulla diagonale pari ai poli 6 o. -,_n,.~
,
reali ( complessì coniugati) della funzione di trasferimento di partenza.
In realtà il comando ca.non prevede un Beeondo parametro di tipo stringa, che definisce Il
tipo dl forma canonica.; quella vista finora era quell& corrispondente &l valore di default 'modal'.
Un ulteriore modo di utllìzznre l'Istruzione canon li adoperare l'opzione 'co111panion' che forn isce
una coppia tli motrici (At, Bt) in fonn& canonica di controllabilità, ossia della. forma

o o o . ?~::.-
·
..~.;·,:e:
1 O o
At = O 1 o
l''
"!,,·
tJ
•'l!i-.'J
-r4 ...•r
o 1
,ft1t
;,;;,1 r:./'
Bt = (1 O O O )T -,1;~;,
: 11:.·

dove con ai si sono indicati i coefficienti del polinomio caratteristico ..

lsl - Al = a"+ a1_,n-l + a2sn-~ + •· · + Bn-18 + an


, • .,i ,.

È immediato verificare che la malrice di controllabilità di un sistema nella forma. canonica di ":*:
'f:'j
controllabilità è pa.ri alla matrice identità, mentre la. matrice di osservabilità, come sarà chiaro
tra poco, può essere impegata per ottenere la forma canonica di osservabilità. '
Nel caso di sistemi MIMO la matrice Ai mantiene la. stessa struttura mentre la matrice Bt . 't1J""ri
riportata precedentemente, cost ituisce la prima colonna della matrice degli ingressi del sistema
risultante. Al fine di mostrar· ciò consideriamo il circuito elettrico riportato in Figura 19.4.
:~f,1i
t~:~(~~ '
... ,s..,(.

L ·:..·~~l:--
r1~.;
e
_________
r(rì __________ ,.
~
---4

~- I

. ,
:...&{[\·~
•"<-:i,
.;,~~;:
.,.i
.....
.<f:.- •i' ....

R
il';è·J
!
~~~
tt-ll.
... _;!'':~
t~,
'r•~r:\.if J.!"
Figura. 19.4: Circuito RLC. ..... ,'1$f
~-~~i,·
~~~~ $,.i
Assumendo come variabili di stato la corrente nell 'induttanza e la tensione sul condensatore, .-'i
:;1y,
~
un suo possibile modello nello spazio di stato è t· ~ J,:
,J ; li
~,J;
19.3. CONVERSIONI TRA. LE RAPPRESENTAZIONI 367

1 1 1
= --::t2 + -u1 - -u2
L L L
l 1 1
= c:i:1 - nc~2 - Rcu 2 (19.11)

Yl = Xl
Y2 = X2
Assegnati i parametri C = 1 mF, R = 1kn, L = 100 mH la sequenza di istruzioni

A•[O -10;1000 -1]; B•[10 -10;0 -1];


C•eye(2); D•zeroa(2);
P.t.C•aa(A' B'e ID) ;
canon(RLC,1 companiob1 )

consente di ricavare la forma canonica di conlrollabllltà del aiatl'm& MIMO in esame:

Il ,e

x1 x2
x1 o -10000
x2 1 -1

b •
ul u2
xl
x2 o
1
-0.0001
-1 I

I
e e
x1 x2
y1 10 o
y2 o 10000

d •
111 u:Z
yl o o
y2 o o
Continuous-time model.

È interessante notare che, a partire dalla forma canonica di controllabilità è semplice ottenere
·1
anche quella di osservabilità. Nel caso di sistemi SISO, le matrici dinamica e di uscita della forma
canonica di osservabilità hanno la forma

o l o o
o o 1 o
At =
(19.12)
o o o 1 I,
-<11 -0.2 -03 -0.n

1:-
Ct = ( 1 o o o)
Tale rappresentazione può essere ottenuta a partire dalla forma. canonica di controllabilità
r
mediante una trasformazione di stato che utilizzi come matrice di trasformazione la matrice di !
I
osservabilità della stessa. forma canonica di controllabilità. Considerando ancora. l'esempio del
sistema idraulico presentato in precedenza, la forma canonica di osservabilità si può ricavare
l
mediante la sequenza. di istruzioni I:
I
, .---;..,-,.,
-i:,zt

368 CAPITOLO 19. !vIODELLINELLO SPAZIO DI STATO . ,__.


r_,;

SISidrC=canon(SISidraulico,'companion');
SISidrO•ss2ss(SISidrC,obsv(SISidrC));

È semplice verificare che, come è ben noto, la matrice di osservabilità della forma. canonica
di osservabilità è la matrice identità.
.:(::
-.~.
~,:;
t -;_'.;;:··
!•1
..-..
.·.~
.'J:,
19.3.3 Da e verso lo spazio di stato . ·\~J.;li>
t . 'r(. ~
Assegnato un sistema., il modo più semplice per ricavarne un modello è spesso operare nello
spazio di stato. Tanto per l'analisi quanto per la sintesi può essere molto utile aver~ anche
una rappresentazione ìn termini dì matrice di trasferimento o dì zeri e poli. Con CONTROL
la trasformazione da una rappresentazione nello spazio di stato ad una in termini di matrici di .
trasferimento ai ottiene mediante il comando tf.
Con riferimento al circuito di Figura 19.4 ed alla corrisponde nte rappresentazione RLCnèllo
spazio di stato, un modello del circuito In termini di matrice di trasferimento si pub ottenere con
l 1istruzione

RLCt!•t!(RLC);
RLCt!-minreal (RLCt!)

che fornisce

Tra.nst•r tunction trom input 1 to output ...


10 1 + 10
#1: --------------·
a·2 + s + 1e004

10000
#2; ---------------
1·2 +Il ♦ le004

Tran1t1r tunction trom input 2 to output .• ,


•10 Il
t1: ---------------
11·2 + s + 1e004

-s - le004
t2: ---------------
a*2 +a+ le004

Il modello in termini di zeri e polì si può invece ottenere con l'istruzione

RLCzp•zpk(RLC)

o, partendo dal modello mediante funzione di trasferimento, tramite l'istruzione

RLCzp~zpk(RLCtf)

Il passaggio dalla rappresentazione in termini di matrice di trasferimento a quella nello spazio


di stato si realizza con il comando sa. In particolare, partendo dall'oggetto RLCtf definito in
precedenza., l'istruzione

RLCss0 ss(RLCtt);
19.4. RIDUZIONE DEI MODELLI 369

fornisce una tra le possibili rappresentazioni del circuito nello spazio di stato. Ovviamente tale
rappresentazione non è detto che coincida con quella di partenza (neanche per l'ordine, a meno
che non si usi il comando minreal). Ciò è dovuto al fatto che per ottenere una rappresentazione
nello spazio di stato a partire dalla funzione di trasferimento bisogna effettuare la scelta di qoali
variabili di stato utilizzare. Queste, in generale, non coincidono con le variabili di stato scelte
inizialmente per ottenere un modello del circuito mediante equazioni differenziali e non hannu
necessariamente un preciso significato fisico.

19.4 Riduzione dei modelli


La lista delle istruzioni utilizzabili per la riduzione dei modelli è:

append Aggiunge ulteriori equazioni a.Isistema


aug1tat1 Allarga le uscite con lo stato
balrul Realizzazione bilanciata.
minreal Realizzazione minima e cancellazione poli-zeri
modred ruduzione dell'ordine del modello
sadelete Ca.ncella. Ingressi, stati e uscite dal modello
ssselect Sottosistema da un sistema di ordine superiore

Tutti i comamndi possono essere anche utilizzati per sistemi tempo-discreto.


La possibilità di costruire un modello ridotto a partire da uno assegnato risulta part icolar-
mente interessante per sistemi che sono caratterizzati da una netta separiuione dinamica Lra gli
stati. In questo esso, se ad esempio interessa esamina.re solo il comportamento delle variabili
di stato "veloci" del sistema si può operare una riduzione del modello in esame eliminando le
variabili di stato "lente" che saranno considerate costanti e pari al loro valore iniziale. Viceversa
se interessa eolo il comportamento del sistema su scala temporale "lenta" possiamo assumere le
variabili veloci come costanti e pari al loro valore di regime.
Consideriamo un sistema, costitui to dalla serie di un attuatore e di un processo, descritto
dalle equazioni

7'o:Ì:a = -:Z:a+ kau (19.13)


-rp:tp = -~p + kp:ta (19.14}
cui corrisponde lo schema a blocchi di Figura 19.5.

Figura 19.5: Sistema costituito dalla cascata di una attuatore e di un prpcesso 1


entrambi modellati come sistemi lineari tempo-invarianti del primo ordine.-..

Tipicamente, in un sistema. di controllo, gli attuatori presentano una dinamica molto più
pronta del processo, cioè r 0 << 'rp, 11comando modred consente di ottenere un modello dinamico
ridotto che assume istantanee le dinamiche dell'attuatore. In altri termini, assumendo 7a = O
dalla prima delle (19.13} si ricava :i:0 = kau e, sostituendo nella seconda delle (19.13} si ottiene
il modello ridotto

TpZp -Xp + kpkau (19.15)


y = Xp (19.16)
Tale modello può essere ottenu to con la sequenia di istruzioni
. _1
. I.
"
·t
!

.Ll
370 CAPITOLO 19. l\tIODELLI NELLO SPAZIO DI STATO

A2 (-l/taua O;kp/taup -1/taup); B•[ka/taua, O];


aiatema=aa(A,B,[O 1),0); ..,
elimina=! i
ridotto=modred(sistema,elimioa)

Si noti che ponendo elimina=2, l'uso del comando modred avrebbe consentito di ottenere il
modellu ridotto corrispondente alla posizione r,,
= O nelle (19.13). Ovviamente, avendo suppoeto
T4 << r,,,tale modello avnbbe uno scarso significato fisico. :--il,..,.,,,.
,,m; -.Y
Per meglio chiarire come opera il comando modrad possiamo considerare una generolizze.zioqe
del problema della riduzione di un modello del elatema in modo che sj mantenga inalterato ·11
...t \f,
~ \'
,l ;• ,:,

comportamento di regime Ingresso-uscita. A tale proposito si consideri il sistema partizionato . .•,:>I,


~
·~ !I• ..
( :~ ) = ( 1~~ !~~ ) ( :~)+ ( :~ ) u . V

y = ( G1 G2 ) ( :: ) + Du .
Supponiamo ora che il gruppo di variabili "veloci" sia xi; in tal ca.so possiamo pensare di
imporre :i:1 = O, in modo che le variabili veloci siano e. regime, e risolvere le relative equazioni • t , • ; ...;
·'. ~l/Jit:
rispetto ad .f1, supponendo che la matrice Au sie. Invertibile. Sostituendo poi il valore cosi ,1t,:,if
trovato nelle altre equazioni si ricava il modello ridotto ··U:-'
. , )': i;;
I ,,;,.;;~
••• .'f.,•
:i:2 = (,4.22- A21A1/ Au) x2 + (B2 - A21A~/Bi) u
• ._ . i.l~
.
= (C2-G1A 1
y 0 A12)x2+(D-G1Ai}B1)u
., ' .
.t,\

che preserva il legame ingresso-uscita di regime. È questo appunto il tipo di riduzione di modello . ,>/f,.t':
....
che si ottiene col comando caodnd. ~!",:-
,)~·
Tornando all'esempio del sistema attuatore-processo, potrebbe interessare ottenere un mod•
elio l'idotto del sistema che "catturi" le dina.miche veloci anzicché quelle lente. Ciò potrebbe
essere ottenuto assumendo Xp(t) identicamente nullo nel modello (19.13). L'opzione 'del' del
comando modred consente di ottenere questo tipo di modello. Le istruzioni

elimina::2;
ridotto1-modred(1i1tema,elimina,'del');

forniscono il modello

T4X4 : -:&4 + k4U


y = O,

dove logicamente come uscita. si continua a considerare la variabile Xp che, per la riduzione del
modello, è aasunta nulla.
Più in genera.le dato un sistema. nella forma

x = A:r+Du
y = Cx+Du
è possibile ridurre il numero di ingressi, di stati o di uscite tramite l'istruzione

(Ar,Br,Cr,Drl•11delete(A,B,C,D,inding,induac,ind1t);
l
19.4. RIDUZIONE DEI MODELLI 37,1 I
che produce le matrici del sistema ridotto ottenuto eliminando gli ingressi, le uscite e gli stati
i cui indici sono specificati nei vettori inding, indusc e indst rispettivamente. Sì osservi che
quest'ultima istruzione può anche essere impiegata senza specificare il vettore indst, mentre gli
altri due vanno sempre indicati {nel caso in cui si desideri eliminare solo degli stati in luogo dei
vettori inding e indusc nell'istruzione vanno posti due vettori vuoti, cioè ()).
Del tutto analoga all'istruzione ssdelete è l'istruzione ssselect che , con le stesae opzioni di
parametri, invece di eliminare consente di selezionare gli ingressi, le uscite e gli stati da conservare,
cioè nei vettori inding, indusc e indst vanno specificati gli indici relativi rispettivamente agli
ingressi, alle uscite ed agli stati che si desidera conservare,
Un altro modo per ottenere modelli ridotti è quello di eliminare gli stati che influenzano
11
meno" in termini di controllabilità ed osservabilità il sistema. complessivo. Per ottenere ciò si
possono usare congiuntamente le istruzioni balraal e modrad.
L'istruzione balreal consente di ottenere una. rappresentazione di un generico sistema nello apa.zio
di stato, nella cosidetta forma bilanciata. ossia in una forma tale che il gramia.no di osservabilità
e quello di controllabilità coincidono e sono diagonali. Ricordiamo che si definiscono gramiani di
controllabilità e di osservabilità rispettivamente

Gcont = lor eAI BBT e,tT 1dt (19.17)

Gou = 1"' eATtcTceA 1dt


(19.18)

e il comando gramconsente di valutare tali gramiani per .,. = oo. In particolare, partendo da un
sistema SIS con rappresentazione nello spazio di stato, l'istruzione

[SISbilaneiato,g,T,invT]=balreal(SIS);

oltre a fornire il sisema nella suddetta forma ed un vettore g contenente gli elementi della di•
agonale del gramiano, fornisce anche la matrice di trasformazione adottate. e la. sua inverse..
L'utilità di una rappresentazione di questo tipo è dovuta al fatto che, poiché Il vettore g rifletta
tanto la controllabilità quanto l'osaerve.bllltà dei elngoll stati, el può pensare di eliminnre quelli
caratterizza.ti da. una. piccola. g ( 1) poiché essi influenzano 11pot:0 11 Il com porte.mento ingreseo-
uscita. del sistema. origina.rio perché scarsamente controllabili ed osservabili. Dopo aver applicato
l'istruzione balreal, l'eliminazione suddetta può, ad esempio, effettuarsi con le istruzioni

indst•find(g<g(l)/10):
SlSridotto-modred(SISbilaneiato,indst.'del');

Un'ultima. istruzione inerente la riduzione di modelli che consente, a. partire da una. qualsia.ai I
ra.ppresenta.zione non minima del sistema., di ottenerne una equivalente minima, è minreal. La i
forma in cui utilizzare tale istruzione è: r
I
(SISmin)eminreal(SIS,tol}:
f
dove Il sistema SIS pub essere rappreeente.to In qualunque forina. e l'argomento opzione.le tol
re.ppreeenta la tolleranza. con cui sono considerati coincidenti poli e zeri e quindi cancellati per
ottenere la rappresentazione minima. ·1

19.4.1 Sistemi allargati


Con l'istruzione appendsi può allarga.re lo etato di un sistema. In particola.re

SISallargato•append(SIS1,SIS2):
..r;-
:,,

372 CAPITOLO 19, MODELLI NELLO SPAZIO DI STATO

tornisce il sistema "allargato" a partire da due sistemi assegnati, ovverossla costruisce il sistema.

o
( ;~) = ( A1o o
A2)( :r1
:t2 )+( B1o B2)( u1
u2 )
o
( !~) = ( C1o o
)(
C-1
J:1
:r2 ) +( o
Di
D2)( u1
u2 )
[I comando augatate è invece una particolarizzazione dell'istruzione append. In particolare
il comando ~ . ~

SISaumentato•augstate(SIS);
.. '
dove SIS è rappresentato nello spazio di stato, allarga il vettore di uscita considerandovi ancher
lo stato, cioè costruisce il sistema :!;

i ::: AJ: + Bu

( !~) = ( ~ ) :r + ( i) tJ

19.5 Esercizi
E11ercizlo 10.1 Si scrit1a la Junction cancont,m che date in ingresso le matrici relative all~.
rappresent,uione nello apazio di stato di un sistema LTI, resistuisca le matrici tali che il siBtema
sia nella forma canonica di controllo {19.12).
Esercizio 19.2 Si consideri il sistema descritto dal/e equazioni

Il sistema é controllabile? Assegnata la condizione iniziale :r1(0) = x2(0) = l si verifichi sir,


il punto (2, 1) é raggiungibile. L'origine e raggiungibile? ·· ,,

Eaerclzlo 10.S Dato il s11tema (J9.6)-(19.8), 1ceg/ìendo ad arbitrio i parametri purchi aia
verificata la condizione R1 C1 = R2C.2 (ponte equilibrato), si applichi una trasformazione di stato
tale da far coincidere una variabile di stato con l'uscita del sistema e verificare che qualsiasi sia
l'ingresso il ponte si porta all'equilibrio (tensione nulla su R3).
Suggerimento. Si verifichi che la parte non controllabiledel sistema
è asintoticamentestabile.
Esercizio 19.4 Si a,aegni in CONTROL il sittema descritto dalle equazioni

,I
z1
(x3)
:i2 =
( -45
-6.4; - 15.55
5

-~n
( ❖ )· ::Z:1
::z:2
:?:3
) +( I

1.::
:

~
tq y == ( -1.5 o 2 ) ( ) :i:1
x2
X3
...
Si determinino due nuove rappresentazioni nello spazio di stato, mediante il comando ss2u;
utilizzando come matrici di trasformazione, rispettivamente, l'int1ersa della matrice di control-
labilità e la matrice di osservabilità del sistema.

t,
19.5. ESERCIZI

E■e rcizlo 10.5 Si auegni in CONTROL il mtema de,critto dalle equa.noni

i)(::)+(Du
-0.5 l
= (
-1 - 0.5
o l

u = (o o 1)(::)
Il sistema é ossen,abile? Se non completamente osservabile,quale é la parte non oasen,abile?
Il sistema é controllabile? Se non completamente controllabile,quale é la parte non controllabileY
Esercizio 19.6 Si considerino le funzioni di tros/enmento

W (s) - s +l
l - (1 + }O}(t + 0,1) 1
e u ne ottengano due corriapondenti rappre1entazioninello spazio di atato nelle forme canoniche
di controllo. Utilizzando le rappre,entazioni nello apazio di ,tato ctul ottenute, ai uerifich1 che:
• la conneuione serie dei due siatemi, con il aecondo si1tema (quello corrispondente a
W2(s)J che segue il primo, é controllabile,·
• la conneuione parallelo dei due sistemi é non controllabilee non osaervabile;
• la connessione con il secondo sistema in retroazione negativo al primo é controllobileed
011eroabile.
Eaercizlo 19.7 Si consideri il sistema riportato in Figuro 19.6. Un pendolo inuertito di maSBa
m é vincolato al punto A . Una rondella con momento angolare h, é attaccata al pendolo, ma
é libera d, ruotare attorno all 'aue del pendolo. Una coppia di controllo u puc} e88ere applicata
dal pendolo alla rondella. Il sistema può essere descritto dalle equazioni

[8 = mgl8 - h~
J~ = hB+u
dove con I ai é indicato il momento d'inerzia del pendolo e della rondella ri1petto al punto A,
con J il momento d'iner.sia della rondella riapetto all'a11e del pendolo e con l In d11t11niadel
centro di ma11a C del 1iltema dal punto A. A11egnati a piac,mento i parametri del ai1tema.
si determinino le /unzioni di tro1/erimento tra u e <f,e tra u e e. Si verifichi cht il 1i1tema è
controllabilecon u, osser11(1bile
da <f,e non 01seN1abileda 8.
r
i Esercizio 10.8 li moto d, un pallone aerostatico roppreaentato in Figuro 19. 7 può tuere
descritto dalle equazioni

I
f
i h
8
iJ =
=
1
--8+u
'Tt
1
--tt+0"8+
1'2
l
-tu
1''2

= "
d01Je8 rappresenta la variazione di temperatura ri,petto al valore di riferimento, u l 'immiuìone
di calore nell'aria del pallone (controllo), h la vanazìone rispetto all'alteua di ri/enmento, v la
tJelocitd in direzione verticale e w il vento sempre in direzione verticale.
Si a.uuma 1'1 = =
2 s, 1'2 1 s e <1 = l m/ s. Possono essere stimate la variazione di
temperotura8 ed 1Jnvento costante w dalla conoscenza dell'altezza h f
Si determinino le funzioni di trasferimento tro u ed h e tra w ed h. Il sistem11é completa-
mente controllabileda u ? E da w f
.. ,
...
·-
.,.
374 CAPITOLO 19. lvI ODELLI NELLO SPAZIO DI STATO

...... -'1

.,. I

Figura 19.6: Pendolo invertito con rondella.

Suggerimento. Per valutare se un vento costante è osseroabileda "'


misure cli altezza si allarghilo stato con l'equazionew= O.
Esercizio 19.9 Il moto di un satellite sul piano equatoriale, in coordinate polari ed auum endo,
come variabili di stato posizioni e t1elocitd,pud essere modellato con il sistema lineari.uato ... :~
'\ :.
1' \)

I i1 = z2
2 Ut
!i:2 = 3w0 z1 + 2woro:z:4+ -
m
:i:3 = :Z:4
2wo u~
2!4 = - -:z:3
ro
+ - -
mro
doue m è la ma8sa del satellite, ro ed wo roggiae velocità angolare della 8Uaorbita ed u1 ed u~'
le forze di controllo radiale e tangenziale rispetti11amente. 1• , ,.

Assegnati a piacere i parometri, ,i verifichi se il 1istema è controllabilein presenza di uno1


aolo dei due ingressi di controllo e, nel caso di sistema non completamente controllabile.,e ..n~
ricaui una rappresentazione nella fonna di controllabilitd di Kaiman. ·.
• ',$U

Esercizio 19.10 Il modello cli un pendolo invertito Ju carrello in movimento riportato in Figu•
ro 19.8 è

1 o
o o
o o
o o ··,o
,,
doue :t1 ed :t2 = !i:1 sono rispettivamente la posizione e la uelocìtà angolare del pendolo, mentri;.
2:3 ed z,i = x 3 sono la posizione e la velocitd della massa M . Assegnati i parametri M = 10 kg,·
m = l kg, l = 1 m e g = 9.8 m/ a:l ai verifichi se il siatema riaultao meno controllabile. Supponen•,
do di disporre di una misuro della posizione o"golare del pendolo, il sistema riaulta osservabilef'
Quali variabili devono essere misurate per poter a"8icurare l'osservabilità del sistema ?

.I
19.5. ESERCIZI 375

' I
l I
l
t I
t I •

Figura. 19.7: Pallone aerostatico.

Figura 19.8: Schema di pendolo invertito su massa in movimento.

Esercizio 19,11 Dato il modello relativo all'Esercizio 18,5, a partire dalla rappresentazione
ottenuta considerando entrambe le uscite, si ricavino quelle corrispondenti alle singole uscite
usando i comandi aaaelect ed sadelete.

Esercizio 19.12 Dato il sistema descritto dalle equazioni

(
-10
0.1 -~ ) ( :! ) + ( ~ ) u
y = ( 1 l ) ( :~ )

dopo avere valutato l'opportunità dì determinare dei modelli di ordine ridotto, si ricavino i
modelli ridotti relativi alla parte "lenta" e a quella "veloce" del sistema usando ude lete o
1111elect e modred. Si valuti inoltre il modello ridotto a partire dalla rappresentazionebilanciata
del sistema steuo.
376 CAPITOLO 19. MODELLI NELLO SPAZIO DI STATO

Suggerimento. È interessante effettuare un confronto tra le risposte


nel tempo dei vari sistemi ad un gradino di ampiezza unitaria (vedi
pag. 379).

•.·l

• P. _\

' ,:t"
·· ·:\tn
:..,\l
Capitolo 20

Ri sposta nel doniinio del


terripo

In questo capitolo saranno esamina.te le istruzioni che consentono di analizzare la riapo111a nel
tempo di un sistema LTI. Le recenti versioni di CONTRO L consentono di visualizza.re in maniera.
semplice e compa.tt&. le risposte nel tempo di sistemi LTI in presenza di alcuni ingressi canonici.
Il comando da utilizzare a tal fine è ltiview e all'uso di questo comando sarà. dedicato l'ultimo
paragrafo di questo capitolo.
Ciononostante, riteniamo che, soprattutto per il lettore che per la prima volta eta affron1a.ndo
lo studio dei sistemi dinamici, sia particolarmente utile approfondire preventivamente l'uso dei
comandi che consentono di determinare le risposte nel tempo ed in frequenza . Ciò infatti consente
di acquisire familiarità. con i comandi di CONTROL, di manipolare i risultati della simula2ione
in maniera più diretta, di esercitarsi sui comandi MATLAB per la grafica.
Le istruzioni di CONTROL utilizzabili per ottenere la risposta nel tempo di un sistema LTI
sono:

impulse Risposta impulsiva


initìal Evoluzione libera
lsim Risposta ad ìngre3So qualsiasi
st:ep Risposta ad un gradino unitario

oltre, come detto, al comRndo ltivìev.


Nel prossimi paragrafi queste istruzioni saranno esaminate in dettaglio con l'ausilio di nu•
merosi esempi. È importante osservare inoltre che, spe&10,per simulare l'evoluzione nel tempo
di un sistema. dinamico, l'uso di uno schema SIMULINK è preferibile rispetto al comandi di
CONTROL.

20.1 Risposta in forma analitica


È interessante vedere come con l'ausilio di MATLAB sia possibile determinare in forma analitica.
la risposta di un sistema a partire dalla funzione di trasferimento del sistema. stessa e dalla
trasformata di La.piace del segnale di ingresso. In altri termini l'uscita y di un sistema dinamico
può essere ottenuta mediante la relazione
..
. ....
...,.
-·i
: -;
378 CAPITOLO 20. RISPOSTA NEL DOMINIO DEL TEfvIPO ~-r
,,..
·.,.
-,.1.;
!t..•
dove con {, si è indicato l'operatore trasformata. di Laplace e con c- 1 l'a.ntitrasformata..
Consideriamo un sistema. con funzione di trasferimento

G .,2 + 3.2 ., + 12
(s) = s3 + 1.2 s 2 + 9. 2 s + 9

che p088ia.mo assegnare in MATLAB mediante l'istruzione

1i1•tf([1 3.l 12],[1 1.2 9.2 9J)

Coosidera.ndo ora un ingresBo a gradino centrato nell'origine (la. cui trasformata di Laplace
è quindi 1/s), la trasformata. di Laplace dell'uscita sarà

1
Y(s) = G(.,)- .,
Usando it,comando

(rea,poli,kJ•re1idue(1i1.num{1,1},[1i1.den{1,1} OJ);

dove il secondo argomento del comando individua il prodotto tra il denominatore di G{a) ed s,
p088iamo scrivere la tresformata di La.piace della ri8posta del sistema. espansa in fratti semplici:

-0.166 ±:0.005j -1 1.333


Y( 8 ) =----~+--+--
.,+ 0.1 =F3j s+l s
dove ai numeratori compaiono gli clementi del vettore res e al denominatore i polinomi le cui
radici sono contenute nel vettore poli.
milizza.ndo ora le trasforma.te di La.piace delle funzioni elementari si ricava

y(t) = (0.332 e- 0· 11coa(3 t + 3,108) - e-t + 1.333) l(t)

dove con l(t) al è Indicata la funzione gradino di ampiezza unitaria.


Data une. funzione di tro.aferimento 4>(s),si ricorda che indicando con R< I residui e con ..\,
le radici del denominatore, supponendo che vi sia.no m radici reali ed n - m complesse coniugate
e trascurando la presenza dì poli multipli, l'antitrasformata della

è daLa da

,._.,.
m ,-
~ (t) = L~èi'+L 0
2e JtlR;lcoe(w;t+/R;)
imt j::l

dove si sono separa.ti gli autovalori complessi coniugati ),,J = o; ±:jw;.

.I
20.2. RISPOSTA. AL GRADINO 379

20.2 Risposta al gradino


L'istruzione step consente di ricavare le uscite e lo stato di un sistema. LTI sottoposto ad ingressi
unitari a gradino a. partire da uno stato iniziale nullo (la. cosiddetta. risposta. indiciate del sistema).
Consideriamo il sistema con funzione di trasferimento

G(s) = us + 10 (20.1)
s2 + 8s + 25
Per valutare In rispoeta. di questo sistema ad un gradino unitario, posto rr = 1, tra.mite i
comandi

sis~tf((1 10],(1 8 26));


(uscita,tempo]•1tep(aia);

si ottengono l'uscita ed il tempo memorizzati nei corrispondenti vettori e quindi successivamente


disegnabili con il comando
I
I !
plot(tempo,uacita}
11
. l
Supponiamo ora di voler ane.liizare come cambia la rispo6ta indiciate del sistema (20.1) al '
variare delle. posizione dello zero, senza. però cambiare il guadagno statico del sistema. Per
ottenere ciò possiamo costruire una opportuna matrice di tra..sferimento fittizia. Multi Output:
manteniamo lo stesso denominatore e variamo il coefficiente rr del polinomio al numeratore in
modo da non cambiare il guadagno statico, pur variando la posizione dello zero. L'uso poi del
comando 1tep fornirà il confronto richiesto. In particolare digitando

sigma•(-4 -2 -1 O 1 2 4]; den•(l 8 25];


sistemi=(];
tor i•1:7,
1iatemi•[1i1temi; tt((sigma(i) 10],den)];
end;
(uscite,tempo]•atep(eistemi);
me1h(aigma,tempo,uacite)

si ottiene Il grafico riportato in Figura 20. l. 379


Suggeriamo di fare un confronto tra le varie risposte e giustifico.re I diversi andamenti della
risposte nel tempo.
Nel ca.eo in cui l'oggetto ahtema corrisponda ad una. rappresentailone nello spazio dì eta.lo,
allora il comando

[uacita,tempo,stato]•etep(aiatema)

consente di ottenere e.nche l'evoluzione dello stato relativo a.Ila risposta. o.d un gradino di a.mpiezza
unitaria.
Si noti che l'istruzione step richiamata senza parametri di uscita, fornisce I ~ra.fici corrispon-
denti a tutte le possibili coppie ingresso-uscita del sistema considerato.
Nel caso di sistemi MIMO, la matrice tridimensionale uscite avrà dimensione pari a (LT x
NY x NU), dove LT è la lunghezza del vettore tempo, NY è il numero delle uscite ed NU è il
numero degli ingressi. Ad esempio, mediante i comandi

[uacite,tempoJ•atep(aistemi);
plot(tempo,uscite(:,:,j)
380 CAPITOLO 20. RISPOSTA NEL DOJvIINIODEL TEMPO

.... .
,, •• '•
:· ..

0.6

0.5 · · ···
0.4

0.3
0.2 ....

0.1
o .. ..
-O.I

-0 ,2

-0 .3
1.5
4

o -4

Figura 20.1: Confronto tra risposte indiciali.

si ottengono le rappresentazioni di tutte le risposte relative ad un gradino applica to sul j-esimo


ingresso.
Il vettore tempo può essere anche fornito corne parametro opzionale in ingresso.
Si noti che le proprietà appena. descritte valgono ovviamente anche per l'evoluzione dello
stato nel caso in cui si utilizzi il comando step con un sistema rappresentato nello spazio di
stato.
Quando Il grafico della rispoeta. al gradino è ottenuto utilizzando direttamente il comando
1tep 1 l'uso del mouse sul grafico consente di:
• col tasto einistro, evidenziare le coordinate del punto selezionato ed il sistema cui si riferisce
la risposta al gradino ;
• col tasto destro, selezionare un sistema, evidenziare alcuni parametri caratteristici (valore
m&Bsimo,tempo di assestamento, tempo di salita, valore di regime), inserire lo zoom e la
griglia.

20.3 Risposta all'impulso


L'istruzione impulse di CONTROL consente di ricavare la. risposta di un sistema. LTI con stato
inizia.le nullo ad un impulso di ampieiia unitaria.
Consideriamo il sistema con funzione di tra..9ferimento

0(3) = (T:J + tO
s2 + 2 s + 25
Per visualizzare la risposta di questo siste ma ad un impulso unitario, scelto u = 1, basta
digitare
20.4. RISPOSTA AD INGRESSO QUALSIASI 381

sistema•tf([t 10],[1 2 26]),


impulse(sistama);

Se invece vogliamo analizzare come cambia la risposta impulsiva del sistema. al variare della
posizione dello zero, senza perb cambiare il guadagno statico del sistema., seguendo lo stesso
approccio presentato nel precedente paragrafo, ba.sterà digita.re

sigma•(-4 -2 -1 O 1 2 4]; den•[1 2 26);


for i•1:7, 1i1teai(:,:,i)•tf((1ipa(i) 10),dan); end;
impul1e(1i1temi);
axie((O 2.6 -5 6))

che fornisce il grafico riportato in Figura 20.2.

s,--------------------------.-------
\

i o

-1

I
-2
I

_, I I
I
I
-4

--$
o o,
TimeINCI
1-5 25 i.
Figura 20.2: Confronto tra risposte impulsive.

Suggeriamo di trovare le risposte alle seguenti domande: perché le risposte Impulsive pa.rtono
da punti diversi? Come si possono determinare a priori questi puml? Perché le diverse risposta
impulsive si intersecano tutte tra loro negli stessi istanti di tempo? Pub certamente aiutare
riferirsi alla rappresentazi one analitica delle diverse risposte impulsive.
La sintassi del comando impulu è analoga a quella del comando ,tep visto nel precedente
paragrafo.

20.4 Risposta ad ingresso qualsiasi


Di interesse più generale è la possibilità di valutare la risposta di un sistema LTI 1:1.dun Ingresso
qualsiasi (definibile attraverso le istruzioni di ba.se di MATLAB). A titolo di esempio si consideri
il sistema con funzione di trasferimento

t
;
•~
i
'{
I
i
.
382 CAPITOLO 20. RISPOSTA NEL DO!vfINIO DEL TEMPO

1
G(s) = -
a+l ~
'J;,.,,
.,..
L'uscita di questo sistema per un ingresso sinusoidale a frequenza 1 Hz e per un intervallo di '1/i~i'
tempo pari a dieci periodi della sinusoide in ingresso, si può ottenere con le istruzioni
'{. ..
• ,'J• '
.
u'l -t ·,,

· pJ
~
freq•l; t-0:0.05:10/freq; sistema•t!(l,(1 1)); :,' t ,:t,
J
,:19•
u•sin(2•pi•!req•t): -;;~ 1.
l1im(1i1tema,u,t)
~i~
dove l'ultima fornisce il grafico riportato in Figura 20.3.
l
'!>ti
·~!

UMar 9'TlultllonRet<AI•
0.3

0.2S
·.i:.,
o.,
" ...
.... \
~

0,18 " " /1 /1 r ..!:


' "'
Jd
il:
.,:;.
.-~
O.I
_.,,1;

J 0.05

-OM . • .•!,11:t,.
'.-;1$tf.

\j .:,~~'. -~
;~'
-O. I ,JO :,.
,.•4 !li;·
: :A,'i-,
-O 15
\)
\J \J V V "?1,
i'fi'
- 02
o 2
.
'
\, Figura 20.3: Risposta ad un ingresso sinusoidale.
• r *."f .
Nel ca.soin cui si utilizzi una rapprese ntazione nello spazio di stato, l'istruzion e . ~l.J.
..~:~
[u1cita,tempo 1 1tato]•l1im(1i1t1ma,u,t,xO);
.., . '•~-,~
.,
.,,
't.:· ~li:
."

fornisce l'uscita, il vettore tempo {eventualmente più lungo di t se la simulazione rende nece88arlo
I
: \4'\.
',1, '
;.i

un campionamento più fiUo dell'Ingressou) e lo ata.tocon gli Ingressidefiniti nella matrice 11(tante
colonne quontl sono gli ingreBSIe tante righe quanti sono I campi oni del tempo), che corrispondono 'i,1~'....
agli istant i di tempo definiti nel vettore t, eventualmente a partire da una. desider ata. condizione
inizia.le 10.
!.
'"'"'"
.:;,-~
-"\

È evidente che l'uso dell'istruzione lsim è immediato, mentre spesso meno semplice è ia :y~ ~
"costruzione" di ingressi non canonici. A tal fine riportiamo qui di seguito un altro esempio.
Supponiamo di voler determinare la risp08ta dello stesso sietema ad un ingresso con un impulso
nell'origine di ampiezza. 3 1 nullo per 2 a, onda triangolare di ampiezza amp= 10 e di periodo T= la
per 6 s e poi costante e pari ad amp. La successione di istruzioni
20.5. EVOLUZIONE LIBERA 383

uip•10; T•1; daltat•T/10; t•O:deltat:12;


hrfind(t>D2); p•tind(t>•T+2);
ul•zero1(1,b(1));
u~•amp/(T•daltat)•{t(b(1):p(1}-1)-t(h(1)));
u3•amp•onea(1,langtb(t)-langtb(u1)•6•length(u2));
u•[u1 u2.u2 u2 u2 u2 u2 u3];
(y,t]•lsim(sistema,u,t);
plot(t,[u' y+3•impulse(aistema,t)J);

fornisce il grafico riportato in Figuro 20.4 che oltre a mostrare l'uscita del sistema, ne mostra
anche l'Ingresso.

12-----------------~-----.------.-----.

10

o.._ ___ ....____ __._


_ __.__ .___...._ __ _ __ __._
__ _ ___,
o 2 4 e s 10 12

Figura 20.4: Ingresso e uscita del sistema.


'I

20.5 Evoluzione libera


La funzione di trasferimento consente di determinare la cosiddetta. evoluzione forzata dell'uscita
,' I
di un sistema LTI, cioè l'andamento dell'uscita del sistemaquando questo, a partire da condizioni
lnizieJI nulle, è eoUopostoad un Ingressonoto. L'uscita di un 11latemapub perè essere dlvere&
da zero anche se il slatoma non è forzato da alcun ingresso: In questo caso si parla di evoluzione
libera del sistema. Per capire da cosa è determinata. l'evoluzione libera di un sistema bleogna
fa.re uso della rappresentazione nello spazio di stato:

:i:(t) = Ax(t) + Bu(t), x(O) = xo


y(t) = Cx(t) + Du(t)
L'evoluzione nel tempo dell'uscita del sistema può essere espressa mediante 111formula
·1 •

t
.'
384 CAPITOLO 20. RISPOSTA NEL DO!vIINIODEL TEMPO

(20,2)

dove con x 0 al è indicato lo stato inizia.le e con u l'ingresso. Nella {20.2) il primo termine si dice
evoluzione libera. mentre il secondo si dice evoluzione forzata.
L'evoluzione libera di un sistema LTI a partire da un qualunque stato noto xo,si può ottenere
tramite l'istruz ione iuitial. A tal fine consideriamo il sistema del secondo ordine

-4
= ( -3
y (o
Definite le matrici di questo sistema

tramite le Istruzioni

ai1t1ma•s1(A,B,C,D),
initial(sistema,(2;0)):

verrà. visualizzato il diagramma di Figura 20.5 relativo ali 'evoluzione libera dell'uscita. (la seconda
variabile di sta.to) a partire dalla condizione iniziale :to = (2, o)T.

O.I,-------------------..-----------.

o ... ... .... . . .. .... ............. ...... .. ........... . ....... ... --~-~ ..:-:'.
~
- .-:-:
••-:-:
..:-:-
..:-:-.
:-:
.. -:-:
..~..:-:'
....,.,,J

-O.I

-02

i -0 .)

-0~,__ ________ ....._________ _._ _______ --J

o 0.5 1.$
Tima(sec)

Figura 20.5: Evoluzione libera.

Relativamente allo stesso sistema.. volendo visualizzare entrambe le variabili di stato su uno
stesso disegno potremo digitare
20.6. IL CO!vIANDO LTIVIEW 385

si1tema=ss{A,B 1 oyo(2),zeros(2,1));
initial(aistema,(2:0J);

cioè assumiamo come variabili di uscita entrambe le variabili di stato {la matrice C va scelta
uguale alla matrice identità di ordine pari all'ordine del sistema rendendo poi dimensionalmente
coerente la matrice D),
Più in generiùe tramite l'istruzione

(uscita,temp0,1tato)•initial(1i1tema,xO);

i valori dell'uscita, dello stato e degli istanti cJItempo in cui questi vengono valuta.ti, vengono
memorizzati in opportune variabili e possono poi essere disegnate con l'istruzione plot,
Così come per i comandi precedentemente descritti, come ulteriore argomento del comando
initial, si può specificare un vettore t contenente gli istanti di tempo in cui si desidera siano
valutati lo stato e l'uscita del sistema; ciò si ottiene digitando

(usc:ita,temp0 1 atato )•initial(1i1tema,10,t);

È importante ricordare che le matrici u1c:ita e atato conterranno tante colonne quante sono
le uscite e gli stati rispettivamente, mentre ad ogni riga corrisponderli. un diverso [stante di
integrazione.

20.6 Il comando 1ti view


Il come.ndo l ti view consente di visualizzare in maniera rapida la risposta a.I gradino e quella
impulsiva. di un sistema LTI (come ai vedrà nel prossimo capitolo, lo stesso comando consente

l
anche di visualizza.re la risposta in frequenza).
Per utilizzare il comando ltivia11 bisogna innanzitutto definire in MATLAB i sistemi di
interesse; a.d esempio:

A=(l,-2,0;3 -4 O; 0,0 -1) ; B=[1i1;1]; C•[l 1 O]; D=Oi


SISatato•aa(A,B,C,D);

Digitando ora li comando ltiview senza alcun ulteriore argomento, comparirà una interfaccia
grafica, Dal menu "File" scegliendo "Import" è possibile scegliere uno dei sistemi precedente-
mente rappresentati in MATLAB. Del sistema scelto comparirà subito la. risposta al gradino.
Premendo il tasto di sinistra del mouse in un punto della risposta al gradino, compariranno il
ve.lare del tempo e dell'uscita {cioè le coordinate) del punto selezionato. Ad esempio, importan-
do SlSstato e premendo due volte il tasto di sinistra del mouse, si ottiene la rappresentazione
riportata in Figura 20.6.
i
Se ora vogliamo visualizzare alcune caratteristiche della risposta, come ad esempio il tempo
di aasest&mento, bisogna utilizzare il tasto di destra del mouse e dalla voce "Chara.cterlstics 11
selezionare 11Settli ng tìme 11• Ad esempio, con riferimento a.Ilostesso sistema coneiderato in prece-
denia, la visualizzazione di tutte le proprietà disponibili sulla risposta al gradino forniscono la
I
rappresentazione riportata in Figura 20.7,
Mediante il tool ltiviev è possibile anche visualizzare la risposta impulsiva di un sistema.
Ad esempio, partendo dalla precedente figura, usando il tasto di destra del mouse e selezionando
la voce "Impulse" dal campo "Plot type", si ottiene la Figura 20.8.
Supponiamo ora di volere confrontare le risposte impulsive e quelle al gradino del sistema
SISstato e del sistema

SISft=tt(SISstato}•tf(1,(1 1]):
.-:;,~
7r~
1
\.". ,:U:1
J:-;: ;.~
:...
··•·~
.!~f::
386 CAPITOLO 20. RISPOST1l NEL DO!vIINIODEL TE!vIPO

It

I I
;''(§
,(,;.r,,i
u / :":.
~~
'·t "Yi
··•'!I
l-1 '.
1.2

=..:,~:.:,
:o;~a
J
o.e ~~. :·\,~.
_,.:.1. :J,
_l'.='•J~
• .f.1"•~ .
o.e . . -~.i~.
~;l•t
-~~1:.it • ..r •.

...

oL-----'-----..L..-----L----..L...------1----...J
o ·y;:;_~f.)
~,,.~
;•
~ '~.Jt!:•
.. i"f'--
·.~ ( 'I"":.

Figura 20.6: Risposta al gradino ottenuta col comando ltiview. ·~


ti
-~ ·2\.i
~1· ~·~
. ;l;]~~
\ .l.~:.i
lnnaziLu\to bisogna importare anche il sistema SISft selezionando dal menu 11Flle 11 la voce ·-··~
.!~;/J~
"· ·".'-~f

l "Import''. Succeseivnmente dalla vode "Edit" del menu princlpl\le, 8elezlonando 11Plot config-
uratlons" è posseibile selezionare la visualizzazione sia delle risposte impulsive che di quelle al
gradino, ottenendo il gre.fìco riportato In Figura 20.9.
•i·';.
.,..,-~~,,
!.f; . ·t'f
. .. .,
• 'i.ti; -~·
Più in generale, le principali funzionalità del tool "LTI viewer" possono essere cosi riassunte: liit'r•
.. :..,i.
• Scelta della risposta. ~~~~­
Col tasto di destra del mouse con l'indicatore posizionato sulla finestra grafica, dalla voce .10>~
·.i!~;
"!-·~
~'>'t; .
"Plot type" è possibile selezionare il tipo di grafico da rappresentare: risposta impulsiva, c-;:1~'!-,
risposta al gradino, diagramma di Bode, diagramma di Nyquist, diagramma di Nichols. ·r;~
-~:1
ù'/
·-11;
·
• Parametri caratteristici della rispoata. i:/!',~f:~
Col tasto di destra del mouse, selezionare la voce "Chara.cteristics" (ovviamente i parametri ,,\
caratteristici dipendono dal tipo di risposta rappresentata).
\ =f
,
,:,.

• Risposte diverse dello stesso sistemo nella stessa fineatra. . .\':,_•t·~


l

Dal Menu principale andare in "Edlt" e poi in "Plot Configurations". Sarà. possibile
selezionare il numero (dal a 6) ed ìl tipo di grafico (rieposta impulsiva, risposta al gradino,
·"t~
-.f1;
if•
diagramma di Bode, diagramma di Nyquist, diagramma di Nichols) da visualizzare sulla \'-:
:~!,;
stessa finestra grafica.
-.~- r
• Nuovo Bìatema.
Bisogna ripetere la procedura cli Importazione: dal menu "File", scegliendo "Import" ~
it~
ti!~..(
p088ibile scegliere uno dei sistemi preventivamente rapppre6entati in MATLAB. l~•·. }.
..~)·
• Stes,o tipo di risposta per sistemi diversi nella stesso finestra.
Col tasto di destra del mouse, dalla. voce "Systems" selezionare l'ulteriore sistema. di cui
si vuole visualizzare quel tipo di risposta. Se il sistema non è presente nell'elenco che
compare bisogna. innanzitutto importarlo (vedi Nuavo sistema).
• Steaso tipo di risposta per siatemi diversi ~u diverse fineatf'e.
Selezionare il numero di finestre secondo quanto riportato nel punto Riapoate diuerse

I
20.7. ESERCIZI 387

i-·-·-·-·- · ·-·-·-·- ·-·-·-·-·-·-·-·-·-·-

Il

1.4

\l
~1i.~1~'=
e: 1.07

I
I
I
I

08

O.G

Figura 20.7: Risposta al gradino con indicazione dei parametri caratteristici.

dello stesso sistema nella stessa finestra. Per cla.scuna risposta selezionare un diverso
sistema, seguendo la procedura indicata al punto precedente, me. deselezlonado, anzicché
selezionando, il sistema.non desiderato.
• Proprietà del grafico.
Dal menu "Edit" scegliendo "Viewer Prefernces" è possibile selezionare le seguenti prorietà
della rappresentazione: unità di misura della risposta io frequenza, griglia, fonts delle
did;u;calie, colore assi, lunghezza assi e parametri caratteristici. Alcune dì queste proprietà
possono anche essere selezionate con il t;u;to di destra del mouse, selezionando la voce

l
"Properties".

20.7 Esercizi
Esercizio 20.1 Dato il sistema con funzione di tros/erimento

1
G(.,) = (a+ l)i
,i confrontino1 giuatijicandone gli ond<1menti,la riapoataal gmdino del si,tema a ciclo aperto e
del aiatema a ciclo chiuao con retroa1ione unitaria negati110,
Esercizio 20.2 Si rappresentino le risposte al grodino dei siatemi con fun:iioni di trasferimento

1
.,+2'
1
a2 + 10 s + 1'
e se ne giustifichino gli andamenti.
388 CAPITOLO 20. RJSPOSTA NEL DOMINIO DEL TEMPO

Ot

oL:-
....:-
:__-::...:_- -=.-
_:- _:-r...:..- .:..:
-:.:.: ·::::::!I::~=
·-:....::..-i:_-_:-_:-:_-::...:_--=-
-~-=-====- -=-
====
- .-.;-:..;-:..:.-=-:I
o a • •

Figura 20.8: llisposta impulsiva con indicazione dei parametri caratteristici.

Esercizio 20.S Si determini usando il comando step la risposta alla rompa, a ciclo aperto e a
ciclo chiuso, dei sistemi con funzioni di tmsferimento

l 1
G1(s} = -- G2(s)= --
s(8 + 2)
1
a+l

Suggerimento. Si tenga conto che la rampa si può ottenere come


integrale del gradino e che un integratoreha funzione di trasferimento
1/s.
Eaerclzio 20,4 Si determinino le risposte del sistema

1
G(s) = -
.,+ 1
considenindo come ingresso delle sinusoidi di ampiezza unitaria e di pulsazioni w = 0.1, 1,2, 10
rad/s.

Esercizio 20.~ Si determinino e ,i confrontino le risposte al gradino di un sistema ottenuto


connettendo in serie ed in pamtle/o lo steuo sistema, con funzione dì trasferimento

1
G(s) = - 2-
s +1
e si giustifichino i risultati ottenuti .
20.7. ESERCIZI 389

~,--
Tlfflo(HC~ 0.11,
~IN

i
3

Tlml(UCI

~l\a---
,,---ir-------r--~:....,.:~==::::c::::::;:-----;::c::==::::::;i

l
Figura 20.9: Confronto di risposte impulsive e al gradino con indicazione dei
parametri caratteristici.

Esercizio 20.6 Dato il sistema dinamico descritto dalle equazioni

si vafoti l'andamento dello stato sul piano delle fasi {:t1 come asciua ed ::t2 come ordinata) a
partire dalla condizione iniziale ( 1, 1).

Esercizio 20. 7 Dato il sistema SJSO del primo ordine descritto dalle equazioni

y=::t
si ricavino, usando i comandi step ed initial, le ri&postedel sistema ad un ingresso del tipo
"impulso rettangolare" variandone la durata e l'altezza in modo da menterne costante e pari a
l il prodotto.

Esercizio 20.8 Dato il modello del motore a corrente continua riportato nel Paragrafo J g,s,
assumendo come uscite entrambe le variabili di stato (corrente e velocità), e, considerando i
seguenti paramteri: R :: l n, L = 10 mH, J = 0.02 kgm 2 , B = 0.2 Ns, kt = kv = 0.03,
si determini la risposta del s;stema a partfre da condizioni iniziali tutte nulle e con coppia di
carico nulla per un ingresso di tensione a gradino di ampiezza 1 V e 6 V. A partire da condizioni
di regime relatitJeal secondo valore di tensione, si 11alutisuccessivamente la rispodo del sistema
ad un disturbo di coppia di corico di ampiezza pori a 0.1 Nm.

Esercizio 20.9 Sì valuti la risposta impulsiva del circuito elettrico rappresentato m Figu•
ra 18.11.
390 CAPITOLO 20. RISPOSTA NEL DO.MINIODEL TEMPO

Ese r cizio 20. 10 Si rappresenti l'andamento delle variabili di dato del circuito elettrico ripor-
tato in Figuro 18.9, assegnando i parametri R = 100 mn, L = 400 mH, C = 0.1 F, Re= 10n e
considemndo prima un ingresso costante di ampiezza unitaria e quindi un ingresso sinuaoidale
dì ampiezza unitaria e di pulsazione w = 1, 3, 4, 10 rad/ s. Si interpretino infine i riaultati
ottenuti.

Esercizio l0.11 Dato il sistema con /unzione di trasferimento

G(s) _ s + 24
- (s + l){s + 2)(s + 10 ± lOj)
si determinino, tramite if tracciamento della rispoata indiciale, i parametri dei diversi regolatori
standard (Proporzionale, Integrale, Proporzionale Integrale, Proporzionale Derivativo Integrale)
mediante l'impiego dei due metodi di Zieyler e Nichols.
Suggerimento. Si ricorda che la selezione dei parametri dei control-
lori standard mediante il metodo di Ziegler e Nichols è basato sulle
seguenti relazioni:
• C (s) = Kp con I<p= 0.5Ko;
.{~i~
• C(s) = J('P ( 1 + t,) con Kp = 0.45Ko e Ti = 0.85To; ~)(~
·--.
;~
• C(s) = Kp(l + Tds) con Kp = 0.5J(o e Ta :=0.2To; .. '
'-.Jt:\
~~:•
C(B}= K,, ( 1 + Tds + t;) con K,, = 0.61(0, Td = 0.12To e T, =
% \'
• ;wl .
. •~
0.5To; 1;1
~11
.: "'/I'
~tf;'.J' :~
:
dove C(s) è la funzione di trasferimento del controllorn,Ko = KG(O), .,,...\.~..:
-l~ ~
con I( pari all'azione proporzionaleche porta i poli del sistema a ci- - ìT,ii~
1 '1.;.-11-l

clo chiuso sull'asse immaginario e To il corrispondente periodo del-


l'oscillazione permanente. Si usino i comandi step e rlocus (vedi
Paragrafo22.1) per determinare le costanti /( o e T0 • ,11~·.
il\~
_,.• i~
12 Si valuti la risposta ,lei .9istema
Esercizio :.IO. .\,,Cf;
'i~ff{,f!
.-)•,-~

x ( -~ -! ) x +( ~ ) u ~;~
t ~";r;!
>~·
, .. , ili,.

y = ( 12 O ) :r
;~:~
ps
~it.;·
::-.:,
~~-
,é., f. ~ .
.-:!~1 -~
.-.·1,•t.-
I '{

1 -
'/;4,
. ·:..•;fi
.
'


,:;-:.
..~N'
!\.•>,•t ~
l•"\:•l'
- - ; •'°r•
i.,~'}·i:
o t .....
ti~•/;',
T 2T 3T 4T 6T
Figura 20.10: Onda. quadra di periodo 2T. .
l

all'onda quadra rappresentata in Figuro 20. 1O con T = 10 1, 0.5 s .


1
:',(
, ,.
.~ r.-,
Capitolo 21

Risposta nel dominio della


frequenza

In questo capitolo sara.nno esaminate le istruzioni che consentono di analizzal'e le. risposta in fre-
quenza di uo sistema LTI. Prima di addentrarci nell'anallel dei comandi, è opportuno richiamare
alcune definizioni. Innanzitutto ricordiamo che, nell'lpoteai che I segnali cli lngreaao e di uscito.
di un sletem& siano \rasformablll secondo Fourler, allora al dico rlepoete. armonica.del ttletemnla
funzione complesH di variabile complessa G(jw) tale che

l'(jw) = G(jw)U(jw} (21.1)


dove U(jw) e Y(jw) sono le tra.sformate di Fourier dei segnali di ingresso e di uscila rispeUiv~
mente.
Come ben noto, nel caso in cui tutti i poli del sistema LTI abbiano parte reale negativa (sis-
tema asintoticamente sta.bile}, allora la matrice delle risposte armoniche coincide con la matrice
di trasferimento valutata sull'aeee immoglno.rlo (a = jw). Per siutemi SISO la rlepoete. o.rmonlca
~ quindi una funzione complessa la cui lnterprotazlone risulta lmmeuio.to.: considerando cotne
Ingresso di un sistema LTI una sinusoide di ampiezza unitaria e pulsazione wo, a. regime l'uscita
del sistema sarà una sinusoide con pulsazione wo di ampiezza. pari nl modulo della risposta ar-
monica valutato in wo e sfasata rispetto all'ingresso di una quantità pari alla fase della risposta.
armonica valutata in wo.
La lista delle istruzioni di CONTROL utili al calcolo della risposta in frequenza di un sistema
LTI è:

bode Diagrammi di Bode


nichola Diagrammi di Nichols
ngrid Griglia per diagrammi di Nichols
nyquht Diagrammi di Nyquist
sipa Valori singolari

21.1 Diagrammi di Bode


I dia.grammi di Bode {modulo e fMe della risposta armonica di un sistema LTI In funzione
della frequenH su scala Ioga.ritmica) posaono eeaere Impiegati per analizza.re alcune proprietà del
sistema quali guadagno statico, banda p888ante, reiezione al disturbi.
Consideriamo il sistema meccanico SISO del secondo ordine riportato in Figura 18.3 cui .'
corrisponde la funzione di trasferimento coppia-posizione
::i
392 CAPITOLO 21. RISPOSTA NEL DOMINIO DELLA FREQUENZA

1
G(s) -- ------ (21.2)
h 2 +ba +k
Tramite le istruzioni

J•0.01; b•6e-4: k•2e-3; sis•tf(1,[J b k]);


bode(ah)
:~
si ottiene la rappresentazione dei diagrammi di Bode del sistema considerato, Questi diagrammi
sono riportati in Figura 21,l.

IOdtOilQIIIII .....
eo
70

eo
! 50

I 40

30

20

IO

o
o

-45

i -90
J
- 135

-180
10
-1
,o• ,01
f•l'l'J•ncy(racl'uç)

Figura 21.l; Diagrammi di Bode.

Più in generale ciascuna delle istruzioni

(mod,tase,pula)=bode(sis);
(mod,taae]=bode(sis,w);
[mod,tase]=bode(sis,{lllllin,vmax});

fornisce il modulo in valori naturali (la. conversione in decibel può ottenersi con l'istruzione
moddb•:20•log10(mod} ), la fa.se in gradi ed il vettore corrispondente ai va.lori di pulsazione (in ra-
dianti a.Isecondo) in cui si è valutata la risposta. armonica. Dalla struttura stessa. delle istruzioni
risulta evidente che è possibile specificare i punti in frequenza (il vettore 111 o gli estremi dell;in-
in radianti al secondo) in cui si vuole valutare i diagrammi di Bode. Tipi-
tervallo vmin ed 11m.a.x)
camente il vettore delle pulsazioni è assegnato in scala logaritmica usando l'istruzione logspace.
Come nel caso dei comandi utili a. ricava.re la risposta nel dominio del tempo, l'istruzione usata
senza variabili di uscita, così come nell'esempio riportato, fornisce direttamente il disegno dei
diagrammi di Bode desiderati. Si noti che in questo ca.so il diagramma. dei moduli è riportato in
decibel.
21.1. DIAGRAMMI DI BODE 393

È importante osservare che nel CaBosi consideri una funzione di traBferimento con guadagno
statico negativo, il comando bodo fornisce un diagramma delle fa.si che parte da +180° e non,
come più comune, da -180°.
Inoltre nel CMO di funzioni di trasferimento con poli sull'asse immaginarlo, se tali punti rien-
trano nel vettore di pulsazioni definito da MATLAB o assegnato come argomento (si vedano le
opzioni del comando bode), MATLAB fornirà un messaggio di errore. Ciononostante il diagram-
ma di Bode sarà rappresentato, ma in corrispondenza del picco di risonanza tale diagramma
risulterà. troncato e quindi non esatto (il valore teoricamente assunto sarebbe infinito) (si veda
l'Esercizio 21.4).
Il comando bode, analogamente al precedenti comandi per la rappresentazione della. risposta.
di un alterna nel dominio del tempo, consente anche di rappresentare plò dia.grammi sulla 11tesaa
finestra grafica . Supponiamo, ad eaemplo 1 di volere valuu ,re come cambia la risposta. In frequenza.
del sistema {21.2) al variare del coefficiente dl attrito b. La. sequenza di istruzioni

J•0,01; b•(l 6 20 50 100J•1e-4; k=2e-3;


for i=l:5, eval(('ais' num2atr(i) •=~t{l,[J b(i) k))'))j end
bode(sie1,sia2 1 ai13,1i14,sis6)

fornisce i diagrammi di Bode sovrapposti sulla stessa finestra cosi come riportato in Figura 21.2.

8ode0a\ltam
100

eo

i
i
1
60

40
l
J 20

o
-20
o

-'15

I -90

l
-135

-180
IO~ ,o-• ,oo 10
1

Ftequency {rad/MC)

Figura 21.2: Confronto dei diagrammi di Bode del sistema meccanico al variare
dell'attrito rotazionale.

Va.osservato che è possibile ottenere informazioni puntuali sulla risposta armonica usando
il mouse sulla finestra grafica che compare con l'uso del comando bode. In particolare, il tasto
di sinistra del mouse, cliccato in un certo punto del di11.gramma1 fornisce le coordinate del punto
e il sistema cui ai riferisce, mentre ìl tasto di destra consente di: selezionare una risposte., rap.,
presentare il valore di picco, effettuare uno zoom, inserire la griglia, selezionare le proprietà del
grafico.
I
I:
I.

l
'
5t
.
394 CAPITOLO 21. RISPOSTA NEL DOJ,.,IJNIODELLA FREQUENZA

[I comando bode può anche essere utìlizzato avendo come argomento un sistema con rappre-
sentaz ione diversa dalla funzione di trasferimento (zeri/poli o spazio di stato). Inoltre il sistema
può anche e88ere MIMO con NU ingressi ed NY uscite, nel qual caso gli argomenti di uscita 1110d
e fau saranno array multi<limeneionali di dimensioni pari a [NY x NU x LW), dove LW è la
lunghezza del vettore delle pulsazioni in corrispondenza delle quali è stata valutata la risposta
armonica., 1
Primi di concludere il paragrafo descriviamo brevemente l'istruzione sigma. Questa consente
di calcolare i valori singolari della matrice complessa G(jw} al variare di w (si ·ricord i che al
definiscon o valori singolari di una matrice complessa G(jw) i numeri J>.(G(jw)•G(jw}) dove
l'asterisco indica la coniugata traaposta. e >.gli autovalori della matrice). Se G(jw) è la risposta
in frequenza di on sistema MIMO, i corrispondenti valori singolari, al variare della frequenza,
rappresentano una estensione al caso di sistemi MIMO del diagramma di Bode dell'ampiezza
della risp08ta armoni ca di un sistema SISO. I vari modi in cui poter utilizzare tale istruzione
sono:

(val1ing,puls]•aigma(si1 );
(val1ing]•1igma(si1,w);
(valsing)•aigma(si1,{W1in,vmax}):
(val1ing]=sigma(si1,w,tipo);
l dove ome~ten<lo le variabili di uscita si ottiene direttamente il grafico come precedentemente
descritto. Oltre all'eventualità di specificare i valori di pulsazione (in radianti al secondo) in
cui calcolare la G(jw) nel vettore pult, è possibile, utilizzando Il parametro tipo come ulteriore
Mgomento dell'letru81one, ottonare I valori slnsolorl di G(jw}- 1 {tipo•i), di/ +G(jw) (tipo•2),
o <li / + O(jw)- 1 (tipo•a).

21.2 Diagrammi di Nyquist


Per la rappresentazione delle funzioni di risposta. armonica, oltre ai diagrammi <li Bode , si p088ono
anche Impiegare i diagrammi di Nyquiet che rappresentano sull'88se delle ascisse la parte reale
e su quello delle ordinate la parte immaginarla del numero complesso G(jw) al variare della
frequenza.,
Coneideriamo il sistema con funzione <li trasferimento

k
G(3)= ( )
s+l 3
Digitando

den•poly([-1 -1 ~1])j 1i1•tf(4,den) ;


ny~ui•t(1i1 1 3•1i1)

si ottengono i due diagrammi rappresentati in Figura 21.3 corrispondenti ai valori k = 4 e


k = 3 x 4 = 12. Nella rappresentazione del diagramma di Nyquist, se nelle vicinanze del
diagramma. stesso, viene rappresentato anche il cosiddetto "punto critico" -1 + jO. Come si
vedrà nel prossimo capitolo, il diagramma di Nyquist può essere utile per valutare la stabilità
del sistema a ciclo chiuso con feedback unitario.
Più in generale le istruzioni equivalenti

(re,i1,pul1]•nyquiat(1is);
[re,ia)-nyqui1t '(1i ■ ,v);
(re,im)"'t\yqui1t(si1,{vmin,1111ax});
t 1 Per ridurre questi array moltidimensiouali in vettori si può utilizzare il comand o squeeze,
vedi pag. 25).
21.3. DIAGRAMMI DI NICHOLS 395

Nyquill O,ag,11m


"

-2

-e

o a
• IO ti

Figura 21.3: Diagrammi di Nyquist.

dì immediata comprensione se confrontate con quelle corrispondenti relative al diagrammi di


Dode1 forniscono parte reale e coefficiente dell'immaginario della risposta armonica., Come nel
C880 del comando bode, l'Istruzione ny~uiat usata senzl\ variabili di uscita forulsce diretta.mente
il disegno del diagramma di Nyqulat dealclerato.
Per quanto concerne l'uso del mouse sulla finestra. grafica che compare mediante l'uso del
comando nyquillt si veda quanto riportato alla. fine del precedente paragrafo con riferimento
all'uso del comando bode.

21.3 Diagrammi di Nichols


I diagrammi di Nichols riportano in MciSBe.la faae ed in ordinata il modulo In decibel della
run:aionedi risposta a.rmonlcaicome i diagrnmml di Nyquist, sono costituiti da una curva grndua.ta
al va.ri&.re
della pulsazione. Consider&.ndola funzione di tra.sferltnento

tramite Ja sequenza di istruzioni

num•30•(1 7 1); den•(poly((·1 -1 -1)) O]; sis•tt(nWl,den);


nichols(ais);
hold on, plot(•180,0,'•k'), hold off;

si ricava il diagramma di Nichols e la rappresentazione del punto critico sul pia.noconsiderato,


come riportato in Figura 21.4. ·
Più in generale le istruzioni
396 CAPITOLO 21. RISPOSTA NEL DO.MINIODELLA FREQUENZA

BO.---------,,--------.- ---- ---.-- --- ---,

40

-eo._ ____ _ __.,...._


_____ _._______ ....._
_____ __,
•22& •UIO -IIO

Figura 21.4: Diagramma di Nichols.

(mod,fa1e,pul1]•niehol1(1i1);
[mod,fa1eJ•nichol1(1i1,w);
(mod,fa1•J•nichol1(1i1,{V111in,W111&X})j

forniscono' il modulo In decibel, la (Me In gradi ed il vettore corrispondente si valori di pulsuione


(In radianti aJ secondo) Jn cui si è valutata la risposta armonica.
Dalla. struttura stessa delle istruzioni risulta evidente che si possono specificare anche i punti
in frequenza (il vettore v) in cui ai vuole valut are il diagramma di Nichols.
Anche. in questo ca.so, l'istruzione usata senza variabili di uscita fornisce direttamente il
disegno del diagramma di Nichols. ·
Nel prossimo capitolo mostreremo come i diagrammi di Nichols possono essere impiega.ti per
il progetto di cootrollori In schemi di controllo con retroazione di uscita.

21.4 Il comando 1ti view per la risposta in fre-


quenza
Come visto nel Paragrafo 20.6, Il comando ltiview può essere usato per visualizza.re la risposta
al gradino e quella impulsiva di un sistema LTI. Lo stesso comando può anche esssere Impiegato
per visualizzare la risposta in frequenza. Consideriamo il sistema con funzione di trasferimento

G s _ 3/a + 1 (21.3)
( )- (.,+l)(s+lO)
e proponiamoci di investigare la risposta in frequenza del sistema al variare della posizione dello
zero. Digitando le istruzioni
21.5. ESERCIZI 397

alta=[-0.1,0.1,1,100];
B"'t:t{'s');
gsl=(a/alfa(1)+1)/((a+1)•(s+10));
ga2•(a/alfa{2)+1)/((a+l}•(a+10});
gs3•tf((l/alfa(3} 1],conv((l 1],[1 10]));
gs4•(a/alta(4)+1)/((s+l)•(a+10));
ltìvie11(gsl)

comparirà la. risposta al gradino della prima funzione di tra.sferimento. Importiamo ora le diverse
l
funzioni di trasferimento definite, selezionando l'opzione "Import" da.I menu "File". Selezioua.ndo
poi l'opzione "Plot Conflgurations" dal menu "Edit" comparirb. la. schermata riportata in Figu-
ra 21.5, da cui, scegliendo boda come unico grafico da. rappresentare sulla finestra, ai ottiene sullo
stesso grafico la rappresentazione dei diagrammi di Bode corrispondenti alle diverse funzioni di
trasferimento. Successivamente, tale grafico pub essere reso una. figura MATLAB sele1ionando
la voce "Print to Figure" dal menu "File", ottenendo cosl dopo semplici integrazioni, il grafico
riportato in Figura 21.6.

•J Plot Conf1gurntions l!lliJEl


'1., SAIAr.t R rnsnnnsA nlnt . Resoonse ~~
'

..
'-~
. □r[t:ra
1: Jbode
I
.:]:
. I I·::~ 2 3.
. .1 I:
.;2l Jstep

.r
. ..
1001
0~
r.
WGJ-·.00 s ,; GJ~~ ,
~l

3.
'

: 4:jbodema!.:'.::):
r [,.]00,
:~r
.
J


3: Jirnpulse

• !-;

5: jnyquist
eljnichols
I

r,

.
.,
•.
~- . :'1'!/'·,,.,
J!,-1 ...

Figura 21.5: Il comando ltiview : scherma ta di selezione del tipo di risposta.


l,
,I
I
Operando analogamente è possibile visualizza.re i diagrammi di Nichols (Figura 21. 7) e quelli
di Nyquist (Figura 21.8, dove, per leggibilità, è stata eliminata. la parte corrispondente a.Ile
frequenze negative).
In sintesi, possiamo concludere che il comando ltiview risulta. particolarmente utile per
I
confrontare le diverse risposte in frequenza di uno o più sistemi LTI e per confrontare le risposte :•'

nel tempo con quelle in frequenza.


Per la descrizione delle altre funzionalità del tool L'l'I viewer" si rimanda al Para.grafo 20.6.
11

21.5 Esercizi
Esercizio 21.l Si rappresentino i diagrammi di Bode, di Nyquist e di Ni chols relativi alle
seguenti /unzioni di trasferimento

l
G1(s) = -,
., Ga(s) = s, G4(s) = -10 s
e se ne giustifichino gli andamenti.
398 CAPITOLO 21. RISPOSTA. NEL DOMINIO DELLA FREQUENZA

o
.,o

i
-
-10
-40

f -IIG ·, .
t \.,o

-
.70

. ,o
.,oo
,o

l · IO

J
•IIIO

ì -170
,o..

Figura. 21.6: Diagrammi di Bode al varia.re dello zero.

Esercizio 21.2 Si rappresentino i diagrammi di Bode, dì Nvquist e di NicholB relativi alle


Jeguenti /uruioni di tras/erimento

10
G:i(s) = -
B- l
e di quelle ottenute con il numeratore d' segno opposto, e se ne giustificl&inogli cmdamenti.

Esercizio 21.3 Si rappresentino i diagrammi di Bode, di Nyquìst e di Nichols relativi alla


seguente funzione di trasferimento

G(.t) = 10, s + 1
s+l
con -r = 104,10 1 1,0.1, 10- 4 e se ne giustifichino gli andamenti.

Esercizio :n ,4 Si rapp,-esentino i diagrammi di Bode, di Nyquifft e di Nicliols relativi alla


seguente funzione di trasferimento
ì G(.,) = 10
.t2 +o s + l
con a= 101 l, 0.1, O e se ne giustifichino gli andamenti. Successivamente si traccino i diagrammi
di Bode aaintotici.

Esercizio 21.5 Si scriva una MATLAB Junction che data una funzfone di trasferimento del
secondo online ne tmcci i diagrammi di Bode asintotici.

Esercizio 21.6 Si scriva una MA 1'LA B function che rappresenti i diagrammi di Bode in /un•
zione della frequenza in Hertz anzicché in rodianti al secondo,
21.5. ESERCIZI 399

-°""'

Cl.0 . 1

.A()

i
J ..$)

I -to 11•100

-100

-t1'0
_,.,
-tlQL-----'------'------'-----''----.&._.---'------'-----'
-135 ..., o IIO

Figura 21.7: Diagrammi di Nicholaal variare dello zero.

Eserd-alo 21. 7 Si rappresentino i diagrammi di Bode, di Nyquist e di Nichols del sistema

( :i:2 )!Ì:1
= ( -20o -31 ) ( Xl
:t:2
) +( 1
0 ~ ) ( :~)
( ) 1/1
1/2
= ( o1 o1 ) ( :~)
Esercizio 21.8 Si rappresentino i diagrammi di Bode relatiui alla /tmziorte di tm11/erimento

G(s) _ 100
- (s + l)(s + 7)
Si confrontino quindi le risposte del sistema considerando come ingresso delte sinusoidi di
ampieua unitaria e di frequenze w = 1, 10, l00rad/a. Si ripei.a poi l'eaercizio con riferimento
alla /-unzione dì trasferimento a ciclo chiuso ottenuta mediante retroazione negatfoa unilorfo
della G(s).

Esercizio 21.9 Si mppresentino i diagrammi dì Nyquist relativi alle funzioni di trasferimento

10
Gi(a) = -,
s+l
G 2 (s) -
-
10
s 2 + s + 1'
G3 (s) -
- a(s2
10
+ s + I)
Esercizio 21.10 Date le funzioni di trasferimento

G (s) - "+ l G2 ( ) 10
+0.1 s + l
l - a2 + O.I s + 1 ' s =- s'l
ai confrontino i corrispondenti diagrammi di Bode e di Nichols.
r.

400 CAPITOLO 21. RISPOSTA NEL DOlvIINIODELLA FREQUENZA

o.s ...
0.4

O,l

0.2

OI
3
..... ····························....................... ...·····················
·............······r···
J ,O,I
11-1
, 100 I
I
I

I
..o, I
\
-0 .3
''
''
""·' ' .. ..._ __.,-
-os
•I 02 0.4 u o.e

Figura 21.8: Diagrammi di Nyquist al vw:iare dello zero.

Esercizio 21.11 Con riferimento alla /unzione di trasferimento {f1 .3), usando il comando
ltiviev e seguendo un procedimento analogo a quello indicato per ottenere le r1sposte in fre-
quen:a, ai rappre,entmo la diver,e rispo,te impulsive e al gradinoal 11ariaredello ,ero. Successi-
vamente si con/ontino le riapo1teottenute con quelle in frequenza riportate in Figura BJ,61 BI.1,
e Bl.8.
\
l

Capitolo 22

Controllo con retroazione di


uscita

La maggioranza degli schemi di controllo è basata sul concetto di retroiuione: l'ingre68o del
\
sistema viene aggiornato in modo da rendere l'uscita del sistema quanto più simile ad un valore
di riferimento, soddisfacendo al contempo ulteriori specifiche di tipo statico e dinamico. Per fare
ciò sono necessari tre passi: misurare l'uscita, confrontarla con un valore di riferimento, elaborare
il segnale di errore in modo da ottenere l'ingresso da applicare al sistema. Un tipico schema di
controllo a ciclo chiuso con retroazione di uscita è riportato in Figura 22. l: G(s) è la funzione
l
di trasferimento del sistema da controllare, H(s) è la funzione di trasferimento del trasduttore

l
(in questo capitolo supposta unitaria), C(a) è la funzione di trasferimento del controllore , La
funzione di tr88ferlmento del sistema a ciclo chiuso è data da

W ., _ G(s)C{s)
( ) - 1 + G(s)C(s)H(s)

R y
l
C(s) G(s)

.___ __ ~

Figura 22.1: Schema a blocchi di un sistema retroazionato.

Il controllore più semplice cui si può pensare è costituito da un semplice guadagno: C($) = k.
È quindi interessante porsi il problema di come variano i poli del sistema a ciclo chiuso al
variare di k; in tale modo potremo verificare se con un semplice controllore di tipo proporzionale
riusciamo a sodd isfare le specifiche richieste. Data una funzione di trasferimento G(s), il luogo
delle radici è una rappresentazione sul piano complesso degli zeri della funzione l + kG(s) a.I
variare de l parametro k. Il luogo delle radici può quindi essere impiegato per studia.re gli effetti
della variazione del guadagno di retroazione sulla posizione dei poli a. ciclo chiuso, fornendo,
indirettamente, delle informa2ioni sulla risposta nel tempo ed in frequenza.
tj:J.
1

!.
1
...1l-
402 CAPITOL O 22. CONTROLLO CON RETROAZIONE DI USCITA ,,·
'!.
' ..
-~ -

Se il semplice controllore proporiiooale non riesce a soddisfare le specifiche richieste, bisogn -


erà costruire un contro llore più complesso, un controllore dinamico. Per fare ciò possono essere
di notevole aiuto le diverse rappresentazioni delle risposte in frequenza {diagrammi di Bode, di
Nyquist e di Nichols) dei sistemi a ciclo aperto e a ciclo chiuso.
In questo capitolo presenteremo innanzitutto i comandi di CONTROL utili al tracciamento
del luogo delle radici . Successivamente riconsidereremo l'uso dei comandi per la rappresentazione
della risposta in frequenza dei sistemi LTl, focalizzando l'attenzione sul loro utilizzo per l'analsi di
stabilità e per il progetto di controllori. L'ultimo paragrafo del capit olo è dedicato alla descrizione
del comando 9ilotool, un tool di CONTROL per il progetto di controllori in schemi di cont rollo
a retroazione di uscita.
La lista delle istruzioni di CONTROL considerate in questo capitolo e non ancora presentate
nei precedenti li:

margin Margini di ampiezza e di fose


pzmap Posizione zeri e poli
rlocfind Determ inazione interattiva del guadagno
rlocus Luogo delle radici
rltool Tuoi grafico per il luogo delle radici
sgrìd Griglia di ( ed Wn
( sisotool Tool grafico per il progetto di contro llori
I 'Tranne il comando sgrid (sostituito <lai comando zgrid), tutti gli altri comandi sono utiliz-
za.bili anche per sistemi tempo-discreto.

'-
22.1 Tracciamento del luogo
Vedi31Tloinnanzitutto come è possibile visualizzare la posizione di poli e zeri sul piano complesso.
Consideriamo la funzione di traferimento

G s - s+ l
( ) - .,.i+5s + 6 • I

Tramit e l'istruzione '


. ·..
sis•tf((1 1),(1 5 6]);
pzmap(sis);

si ottiene una rappresentazione sul pìa._uocomplesso dello zero -1 e dei poli (-3, -2). l ,, .

Piò in generale è possibile usa.re l'istruzione pzmapnella forma . ' •·


' ..!.~:
. ~-~~
:-~e}
(poli,zeri)•pzmap(1i1); , ..
dove, se si omettono le variabili di uscita (i primi membri delle istruzioni), si a.vrà direttamente
la rappresen tazione dei poli e degli zeri {i primi rappresentati con delle croci mentre i secondi
con dei cerchi), altrimenti ei avrà una loro assegnaziooe ai vettori poli e zeri.
Nel caso in cui il sistema di partenza sia Multi Input, sul piano complesso saranno rappre•
seniati i poli del sistema e gli zeri di trasmissione,
Per vedere come si "muovono" sul plano complesso i poli del sistema a. ciclo chiuso a.I variare
del guadagno a ciclo aperto possiamo usare il luogo delle radici. Conaiderla.mo ad esempio la
funzione di trasferimento a ciclo aperto

I Digita.udo le istruzioni
G(s) - s+4
- (s + 1)(-' + 2)
22.1. TRACCIAMENTO DEL LUOGO 403

num=[1 4];
deo•conv([1 1],[1 2));
lli1•tt(num,den);
rlocu1(1is);

si ottiene il luogo delle radici mostrato in Figura 22.2.

l.oaM
RooC
2.S
...
'
I

u 1
I I
1 I
I

0.5

r o-------------,-
.I

--·- ·--- -E>

_,

-u.__ ___ ~ ___ _,____ ___,


____ ,___ __ ....__
___ _.__,
• 12 .... o

Figura 22.2: Luogo delle radici.

L'istruzione rlocus può anche essere impiegata nella forma più genera.le

(ra.dici,guad] 2 rlocua(ais);

dove 1i1 è un sistema SISO. La precedente istruzione consente di ottenere le radici del polinomio
1 + kG(a) 0 1 nel vettore guad, I valori corrispondenti del guadagno k. Nell'uso dell'Istruzione
rlocu1, si può omettere la variabile di uscita guad oppure si p088ono completamente otneUere
le variabili di uscita, come fatto nell'esempio presentato, oUenendo direttamente il disegno del
luogo delle radici per k > O. Ve. notato che nel disegno del luogo delle radici viene Impiegato un
colore diverso per ogni polo del sistema. ·
È ben noto che , nel caso in cui il sistema LTI abbia due poli dominanti , è possibile ricondurre
le specifiche relative alla risposta nel tempo alla posizione dei poli della funzione di trn.sferimento
a ciclo chiuso. Può essere quindi molto utile avere sul piano complesso la rappresentazione
del luoghi a coefficiente di smorzamento ( costante (semirette che partono dall'origine vereo Il I !
semipiano reale negativo con diverse pendenze CÌ88cuna corrispondente ad un diverso valore di
() e a puleazione naturale Wn coatante (circonferenze con centro nell'origine e con diversi raggi
ciascuno corrispondente ad un diverso vaJore di wn)• Consideriamo la funzione di trasferimento
,.
·•·
G(s) - s +4 I
- .s(s + l)(s + 2)
404 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA

ottenuta dall'ultima considerata aggiungendo un polo nell'origine. Digitando in successione le


seguenti istruzioni

n•(l 4]; dapoly((O -1 ◄2)); sia•tf(n,d)j


rlocu1(1i1)j ■ grid;

si ottiene il luogo riportato in Figura 22.3 dove, grazie all'istruzione sgrid appaiono anche le
curve relative a coefficienti di smorzamento e pulsazioni naturali costanti.
:\~;
AGOIL4Cla 1· ~
15,-r----.-----,----,----,"""T'"---.----.---,-----,,---,...
OOI! O.ll55 0.02$

10 030 •• 10

.S 0 .65 ,t I
• • I
....... _; . ., ~
J o
r
-5 o.a.,

• : • •••• ♦ ♦

•10 038
10
,.
.
12
-15 ,_._ __ oaa __., __ __,___ O.li__. __ 0.11$
__,___ __. __ oou__. __o.ou __. __
00,1 __.....___.i-,
-3 .S -2.5 -15 -4.5 o

Figura 22.3: Luogo delle radici con curve a ( ed Wn costanti.

L'istruzione ,grid(zi ta, wn) consente di tracciare sul piano complesao le curve corrispondenti
11.dei valori desiderati di coefficiente di smorzamento e di frequenza naturale specificai! nei vettori
zita e wn.
È importante osservare che esiste un equivalente discreto del comando 1grid; esso è zgrid e

I sarà. descritto nel Paragrafo 24. 7.


Nell'uso del luogo delle radici per il progetto di un controllore è fonda.mentale poter con08cere
il valore del guadagno a ciclo aperto che consente di collocare i poli a ciclo chiuso dove sì desidera.
Ciò si può ottenere graficamente con l'istruzione

(guad,poli)•rloctind(sis);

tramite la quale, avendo preventivamente tracciato il luogo delle radici, comparirà sul disegno il
cursore e cliccando dopo essersi posizionati sul punto del luogo dove si desidera vengano piazzati
i poli, si assegnano i vettori guade poli. Se il posizionamento del mouse non avviene esattamente
su un punto del luogo , i valori in uscita saranno riferiti a1 punto del luogo più vicino a quello
indicato . 1 Lo stesso risultato si pub ottenere analiticamente con la seguente istruzione:
l Per terminare l'immissione di dati si usa il tasto RETUR.N .
22.2. IL CONIANDORLTOOL 405

(guad,poli)arloctind(sis,polides);

Anche in questo caso, se nel vettore polides sono riportati dei poli non appartenenti al luogo ,
i valori in uscita sa.ranno riferiti a.I punto del luogo più prossimo a quello desiderato.

22.2 Il comando rl tool


Nelle recenti versioni di CON'T'ROL è stata introdotta un'interfaccia grafica particolarmente utile
per la. rappresentazione del luogo delle radi ci e per il suo impiego nel progetto di controllori.
Digitando il comando rltool compare un' interfaccia grafica in cui sul lato destro è riportato
un s istema SISO a ciclo chiuso . Per selezionare le funzioni di trasferimento da inseririe nello
schema bisogna innanzitutto importarle dal workspace di MATLAB {dopo averle ovviamente
detìnite in una delle possibili rappresentazion i). Dal menu principale, scegliendo "File" e poi
"Import" è possib ile assegnare a ciascun blocco dello schema. a. blocchi rappresentato, una diversa
funzione di trasferimento . Appena confermata l'operazione col tasto "OI<" comparirà. il luogo
delle radici con evidenziata la posizione dei poli a ciclo chiuso in corrispondenza del contr ollore
l.
assegnato. È quindi semplice modificare il guadagno del controllore e/ o il tipo di retroaz ione (da
negativa a positiva).
Supponiamo di assegnare in MATLAI3 le seguenti funzioni di trasferimento :

1•tf( 1 1 1 );
111•1/(1+1•3);
112•2/(1+6);
113•1/(au+s+1);

Ora., con riferimento alle denomìnazìoni usate per default nell'interfaccia. rltool, importiam o
111come processo G(s) , "2 come prefiltro F(s) e w3 come controllore C(s), la.sciando H(s) = l.
Comparirà la Figura 22,4 con il corr ispondente luogo delle radici per retroazione negativa. Risulta
evidente che modificando il guadagno a ciclo aperto, i poli a ciclo chiuso attraverseranno l'a.sse
Immagine.rio rendendo instabile Il sistema a ciclo chiuso, Ciò si può semplicemente evidenziare
cliccando col tasto di sinsitra del mouse sulla posizione dei poli e spostandoli lungo il luogo {il
corrispondente valore del guadagno a ciclo aperto comparirà nella linea riservata. a C{s)).
Volend o evita re il problema dell'instabilità. al crescere del guadagno a ciclo ap erto, si rende
necessario aggiungere uno zer o nel controllore . A t ale fine, digitando col mouse in corrispondenza
del pallino che compare sull'interfaccia di rl tool à possibile aggiungere uno zero reale ottenendu
in tale modo li luogo riportato in Figura 22.5,
Se ora vogliamo esportare il nuovo controllore progettato nel workspace di MATLAB, basta
selezionare "Export" dal menu "File" e dalla lieta che compare modificare il nome aasegn&to alla
funzione di trasferimento del controllore da. v3 a. v3nev. Quindi , d'ora in poi sarà disponibile ln
MATLAB anche la funzione di trasferimento w3nev.
I
Da.i diversi pulsanti presenti sull'interfaccia grafica risulta immediato verificare la possibilità
di inserire poli reali, inserire zeri e poli complessi coniugati, cancella.re poli e zeri del controllore ,
fare lo zoom, eliminare lo zoom.
Da.I menu principale, selezionando la voce "View", è possibile visualizzare i diagrammi di
• I
Bode delle diverse funzioni di trasferimento coinvolte nello schema di controllo, nonché della
funzione di trasferimento a ciclo chiuso.
Sempre dal menu principale, selezionando la voce "Tools", è possibile invece visua..lizza.re
risposte nel tempo , diagrammi di Bode, di Nyquist e di Nichols. In altri termini è possibile
lanciare il comando ltivie11 le cui potenzialità sono state dettagliate nel Paragrafo 20.6. Sempre
dalla. voce "Tools" è possibile infine ottenere una versione discretizzata . delle singole funzioni di
l
trasfer imento e uno schema Simulink corrispondente al sistema a ciclo chiuso.
Volendo progettare un controll ore mediante il luogo delle radici, visualizzando anche i cor- '
, .'.
i!
rispondenti diagrammi di Bode è possibile utilizzare il comando siaotool. ,.
..,

406 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA


\

---------------- ,
.... .........
.............
....................
.
~1----..,,
i ,......_
i ",
1 .............

Figura 22.4: Interfaccia relativa al comando rltool.

22.3 Analisi di stabilità con diagrammi d~ Nyquist


I diagrammi di Nyqulst (vedi Paragrafo 21.2) possono risulta.re particolarmente utili per l'anallal
di stabilità del eletema a ciclo chiuso. Consideriamo il sistema con funzione cli trBBferimento

le
G(s) = (s + 1)3
Come è semplice verificare attraverso il tracciamento del luogo delle radici, questo sistema è~-
stabiUtà regolare, cioè la stabilità del sistema a ciclo chiuso con retroazione unitaria neg&tlva non
è Mslcurata per ve.lori "troppo elevati" del guadagno k. Vedl11mocome è possibile evidenziare
clb con l'e.uslllo dei diagrammi di Nyquiet e del comandi di CON'I'ROL. Digitando --•,I;\,:
t •;._-•
. .)&.
denepoly([-1 -1 -1]); aia•tf(4,den);
nyqui1t(~i1,3•1is)
·,
si ottengono i due diagrammi rappresentati in Figura 22.6 corrispondenti a.i valori k = 4 e
k = 3x 4 = 12. Nella rappresentazione del diagramma di Nyquist, se nelle vicinanze del
diagramma stesso, viene rappresentato anche il cosiddetto "punto critico" -1+ jO. Esao consente I ~;i
di determinare la stabilità del sistema a ciclo chiuso con feedback unita.rio. · w'',::-' =
... . ,,./f.,JS.-
Infatti, in ba.se a.I criterio di stabilità. di Nyquist, il sistema a ciclo chiuso è si.abile ae il
diagramma di Nyquiat della risposta armonica. a ciclo aperto G(jw) circonda. il punto critico
-1 + jO in senso antiorario esattamente un numero di volt e pari al numero dei poli a parte reale .w-:,:~}
... ~

positiva di G(s). •J;i:--i


Dalla. Figura. 22.6 si evince che nel caso considerato un aumento eccessivo del guadagno a ..J, .n;'i..-
-'\'
ciclo aperto rende il sistema. a ciclo chiuso instabile. l ., ~•'"t
:\.r,
!
•-11·.,.
22.4. MARGINI DI AMPIEZZA E DI FASE 407

Roollowt

I
! o Ii
f
-1

-2
I
I(

-3

-4

., •O.t -o.a -0,1 -o• •0.9 -tu ~ .:i •0 I - 0,1


R111i
Alilt

Figura 22.5: Luogo delle radici con un controllore con due poli ed uno zero.
i
22.4 Margini di ampiezza e di fase
I margini di ampiezza e di fase consentono un 'ana.llel delle caratteristiche di stabilità di un sistema
I
LTI chiuso In controreazione. Il margine di ampiezza 11Idefinisce come l'inverso del guaclngno fl1l11
pulsazione cui corrisponde l'angolo di fase -1r . In altri termini indicatn. con w,, la pulsazione In
corrispondenia della quale la fase della. risposta. armonica G(w) va.le -,r, li margine di ampiezza
in valori natutl\li ed in decibel si definisce rispettivamente come :

1
Ma = jG(jw,, )I
Per alatemi eta.bili il margine di ampiezza rappreeenta Bnch1•l'inverso della quantità di cui
el deve aumentaro il guadagno in continua. per portare Il siateml\ e, ciclo chiuso con retroai ione
unitaria al limite di stabili tà .
' Il margine di fase si definisce invece come l'angolo che occorre sot trarre a.Ila fase, alla pul-

! sazione corrispondente a.I valore unitario (aullo in decibel) del mo dulo, per ottenere il valore - 1r.
Indicata con Wt la pulsaz ione in corrispondenza. della qual e il modulo della risposta armonica
vale uno (è nullo in decibel), il margine di fase si può scrivere

+ lG(jw1)

I
M; = 1r

Per sistemi stabili il margine di fase rappresenta il massimo ritardo accettabile nel sistema
a ciclo aperto in corrispondenza delle. pulsazione Wt tale che il sistema. a ciclo chiuso si man-
i'
I tenga. stabile. Cosi come per il margine di ampiezza, un margine di fase negntivo corrispo nde
all'instabilità..
Consideriamo il sistema S1S0 del terzo ordi ne con funzione di trasferimento
i.
r
j
408 CAPITOLO 22, CONTROLLO CON RETROAZIONE DI USCITA

Nyqul11l)j•g,am


4

2
;I
<
~ o ········ ·
f. .'
I
-a

-4

-6

-8

.a o a 10 12

Figura 22.6: Diagrammi di Nyquist . .

4
G(s)=(
.t + 1)S I '

Tramite l'istruzione

margin(tt(4,[1 3 3 1]));

si ottiene la. rappresentazione dei diagrammi di Bode e dei relativi margini di ampiez za {Ga.in
ma.rgin) e di fase (Pha.se margin), così come riportato in Figura 22. 7. ; ..,
Più in generale i margini si possono ottenere tramite una delle seguenti istruzioni •..
• ,i .;.
,}({'_
: .;:z;
~
[ma,mt,wma,vmt]=margin(sis ); ·.:•"•·
(ma,mt,wma,vm1]"'1Dargìn(aìs,w); :.a,·.
dove wma coincide con la w,. precedentamente definita e wmt coincide con w,. Come visto
nell'esempio, una qualsiasi di qoeste istruzioni imposte senza variabili di uscita fornisce una
rappresentazione dei margini sui diagrammi di Bode.
I margini ora definiti possono essere anche visualizzati sui diagrammi di Nyquiet e su quelli
di Nichols. L'individuazione dei margini di ampiezza e di fase sul diagramma di Nyquist discende
in modo immediato dalla loro stessa definizi one. Il margine di ampiezza. sarà pari a.Ireciproco del
modulo corrispondente al punto in cui il diagramma interseca il semiasse rea.le negativo, mentre
il margine di fa.se sarà. l'angolo individuato dal semiasse reale negativo e dalla semiretta che
parte dall'origine e passa per l'intersezi one del diagramma con il cerchio di raggio unitario. Se
ad esempio vogliamo rappresentare sul diagramma di Nyquist rìporato in Figura 22.6 i margini
di ampiezza e di fase possiamo digita.re le seguenti istruzioni
22.4. MARGINI DI AMPIEZZA E DI FASE 400 l
8-0IIQ,1111
Gm • 6.02l8d8 (111 73~,-~ Pm • 27.142dtg(II I 23281-1
20

10

I
J
•IO
•liii

--30
I
...o
.50

..tQ

...s
.90

lI -li5

-180

-m
-270
10· 1

Figura 22.7: Margini di ampiezza e di fase.

v•logspace{·0.1,2.3,300);
[re,im]•nyquist(tt(4,poly((-1
re•squeeze(re); im•aqueeze(im);
-1 -1])),v); l
p1•tind(ira>0)-1; p2atiod((re.~2+im.·2)<1)-l;
p11•pl(1); p21"'])2(1);
Y. Diagramma di Nyquist )
plot(re,im): axis((-1.5,1.5,-1.5,1.5)): hold on
Y. Disegna il reciproco del margine di ampiezza
plot{O,O,'•',xe(p11),im(p11),•••);
plot((re(p11) O],(im(p11) O));
Y. Disegna il cerchio di raggio unitario
x•-1:0.01:1; y•sqrt(1-x."2);
plot(x,(y• -y'));
¼ Disegna il margine di fase
xm:t•-1:0.01:1; ymt•-sqrt(l-xmt.·2);
p3•tind(xmf>re(p21)); p31•p3(1);
plot(xmf(l:p31),ymt(l:p31));
plot{-1,0,'•',xm!(p31),ymf(p31),'• 1 );

exis('square;): hold off

che complessivamente forniscono la Figura 22.8.


Per ottenere invece i margini di ampiezia e di fase sul diagramma di Nichols basta considerare
le intersezioni del diagramma con la retta verticale corrispondente all'ascissa -180 (margine di
ampiezza) e con la retta orizz ontale corrìspondente all'ordinata. nulla (margine di fase).
Un modo più semplice per visualizzare i marg ini sui diagrammi dì Nyquist e di Nichols è
410 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA

1.5-----------~----..-----.-------.-----,

I ,, ...........

0.5

? -0.5
I

-1

-1.5 L----.1...l.----'-----L-----L------1------1
-1.5 -1 -0.5 O 0.5 1.5

Figura 22.8: Margini sul diagramma di Nyquiat.

f utilizzal'e il comando ltiview. Dopo avere digitato tale comando, dal meou "File" è p088ibile
importare il sistema aia precedentemente definito in MATLAB mediante il comando

ais=tf(4,poly(-1 -1 -1]);

Col tasto destro del mouse, dalla finestra grafica che appare, è possibile selezionare il diagro.m•
ma desiderato e quindi, sempre col tasto destro del mouse, dalle "Cbaracteristics" seleziona.re
appunto la rappresentazione dei margini.

22.5 Reti correttrici con diagrammi di Nichols


I diagrammi di Nichola (vedi Paragrafo 21.3) sono particolarmente uUli per il progetto di reti
corretricì, cioè di opportuni controllori che consentono di "correggere" la risposta in frequenza
del sistema a ciclo aperto al fine di soddisfare determinate specifiche per il sistem& &ciclo chiuso.
Ciò è particolarmente semplificato dall'istruzione ngrid che, digitata dopo aver rappresentato
un diagramma di Nichols, rappresenta. i luoghi a modulo e a fase costante della funzione di
irMferimento a ciclo chiuso con feedback unitario negativo. L'Istruzione ngrid('new') pulisce

.l invece la. tineetra. grafica e eetta hold su on in modo che eucceseivamenLe si può rappresentare il
corrispondente diagramma di Nichols.
Vediamo ora come è possibile progettare una rete ritardatrice con l'ausilio del comando
·

nichola. Si consideri la funzione di trasferimento


22.5. RETI CORRETTRICI CON DIAGRA/vflvIIDI NICHOLS 411

40
(22. i)
G(s) = (1 +0.013)(1 + 0.00ls) 1
definibile in MATLAB attraverso le istruzioni

nwn=-40;
denaconv((0 .0 1 1],conv((0.001 1],(0 .00 1 1]));
proce11o•tt(num,den);

.; Stante l'elevato guadagno Il sistema a ciclo chiuso risulta instabile, come si può evincere
anche dal diagramma di Nyquist o dal fatto che il diagramma di Nichols, rappresentab ile con
l'istruzione

nichol1(proc1110)

passa l\lla sinistra del punto (-180, O). SI vuole progeUare una rete ritardatrice (cioè un control-
lore costituito da una coppia zero-polo} In grado di stabilizzare il sistema a ciclo chiuso in modo
da avere margine di fase 45° (vedi Paragrafo 22.4) con pulso.zione di attraversamento wc = 300
rad/e (si ricorda che si definisce pulee.zione di attraversamento quella alla quale si annulla il
modulo in decibel della risposta armonica). Una rete ritardatrice come ben noto presenta una
funzione di trasferimento del tipo

C(s)= l+a-rs (22.2)


1 + .,,
con T > Oed O < a < 1. I diagrammi di Bode di C(a) danno ragione del nome "ritardatrice". li
progetto di questo controllore può svolgersi nei seguenti passi:
• Con I comandi

v•logipac ■ (-1,4);
(JD,tJ•nichol1(proc1110,v );
mdB•l0•log1O(11); I
assegna.mo modulo (in decibel), fase (in gradi) e valori corrispondenti di pulsazione rela~
tivamente alla funzione di trasferimento definita in precedenza. I valori di modulo e fase ~
in corrispondenza della desiderata Wt poesono ottenersi con l'Istruzione
(mvt,tvtJ•bode(proc11eo,300);
mvtd8•20•log10(mvt);

Al posto del comando boda in questo caso si poteva naturalmente anche usare Il comando
nichol ■ • La. specifica. ai traduce quindi nel progett o di una rete ritardatrice che attenui
di 1/mwt = 1/11.6 e che, easendo Il margine di fase richiesto pari a 45° 1 ritardi di -180+
45 - /w1 = -30 gradi, alla pulsazione Wt = 300 rad/a.
• Dobbiamo ora trovare la rete ritardatrice (cioè selezlo11are a e -r nella {22.2)) in modo
che il modulo di C(iw) per w = w, sia pari a mvtdB e la fase a -30°. Si tratta quindi di
risolvere un sistema di equazioni nonlineari nelle incognite o e T del tipo

1 +a 2 T 1 wf
ICCiwt)I = (22.3)
wl
1 + -r2

l(C(iwt)) = L (l+i~1-ra) (22.4)


1 + '"''"
La 90luzlone di questo sistema può ottenersi analiticamente . Infl\tti, razlonalizzaudo il
secondo membro della condizione sulla fase si ha:
!'
412 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA

da cui si ricava.

WtT(l - o)
tan [L ( C(jwt))) =
1 + W~T'lCI!

Risolvendo quest'ultima equazione rispetto ad 0: e sostituendo la soluzione nella {22.3)


ai ottiene un 'equazione quadratica in T la cui solu2ione, nel caso particolare in esame,
fornisce i valori a = 0.0726 e T = 0.0716 relativi alla rete ritardatrice desiderata.
• Una rappresentazione del diagramma di Nichols di G (s), della correzione dl!Biderata. e del
diagramma. di Nichols del sistema. controllaio a ciclo aperto si può ottenere con le istruzioni

alfa•0.00726; tau•0.0716;
f•aquee2e(f); mdB• ■queeze(mdB);
plot(f,mdB,[fvt -136),(mvtdB O)); hold on;
plot{fwt,mwtdB,'•',-136,0,'•');
nc•(alfa•~au 1); dc•(tau 1]: controllore•tf(nc,dc};
[lll!ll,tt] •nicholl (procHao•cootrollore, v); mmd8•20•log10(mm);
ff•aquee2e(ff); mmdB•squeoze(111111dB);
plot(ff,ll',llldB,'--')i hold off;
che forniscono Il disegno riportato In Figura 22.9. SI not i l'uso del comando 1quuze per
ridurre in vettori gli array tridimensionali ottenuti col comando nichola. In particola.re,
tale riduzione si rende necessaria per potere poi utilizzare questi vettori come argomenti
del comando plot.

22.6 Il comando sisotool


Talvolta nel progetto di un controllore può risultare utile impiega.re in manlern combinata sia Il
luogo delle radici che i diagrammi di Bode. Per fare ciò un valido aiuto è offerto dal comando
sillotool . Consideriamo la funzione di trasferimento

2
G( s) - -,,----
- s2 + 14s + 40
Digitando in MATLAB le istruzioni

n11111•2;den•[l 14 40);
gs•t:t ( n11111,
den) : ,
eìsotool(gs)

comparirà la schermata riporta.ta in Figura 22.10. In alto a destra compare lo schema a ciclo
chiuso corrispondente a quello ripor\ato in Figura 22.1: G è il processo da controllare, H ìl
trasduttore, C il controllore ed F l'eventuale pre-compensatore.
Per esaminare come cambia il comportamento del sistema ai variare del guadagno si può
cliccare su uno dei due quadratini che indica.no sul luogo la posizione dei poli a ciclo chiuso e
trascinare il polo tenendo premuto il tasto sinistro del mouse. I diagrammi di Bode cambieranno
di conseguenza.. Variando la posizione dei poli lungo il luogo, l'unica. cosa che acca.de ai diagrammi
di Bode a ciclo aperto, ovviamente, è una traslazione verso l'alto del diagramma dei moduli.
Supponiamo ora di volere progettare un controllore che assicuri un errore di uscita nullo
in presenza di un riferimento a gradino di ampiezza unitaria. Il più semplice controllore che
22.6. IL COMANDO SIS0T0OL 413 l
~0-------,----- .-------,-----.-- ----r--- ---,

20

o
.,..,..,.
, ,,
.,.,
-20 ;
;
,,
;

, ,,
I
-40 I
I
I

-60 I
I
I

60'---------'-----_..__ _____ .__ ___ _._ ___ ___. ··'


•I
-300 -250 -200 -150 -100 -60 o '.

Figura 22.9: Diagrammi di Nichols con rete correttrice. l


soddisfa. questa specilìca di regime si ottiene utilizzando uno schema di controllo a ciclo aperto
e sfruttando il pre-compensatore. A tale fine possiamo scegliere
l
= o,
l•
H(s) C(a) =1
Per implementare queste condizioni nello schema dovremo selezionare "File", "Import" e
quindi imporre le condizioni precedenti. A questo punto però comparirà un messaggio d'errore
1
in quanto con siso~ool non è possibile assegnare un trasduttore nullo. Per implementare le con-
dizioni richiste possiamo allora modificare lo schema a ciclo chiuso cliccando sul tasto "FS" dello
schema. Nel nuovo schema di controllo il controllore a ciclo aperto potrà essere implementato
=
scegliendo H = 1, C o ed F = 20.
Per verilìcare se il controllore progettato soddisfa la specifica di errore nullo a regime possiamo
visualizzare la risposta al gradino del sistema a ciclo chiuso. Per fare ciò, dalla schermata
principale di aisotool si può selezionare "Tuoi" e poi tra le "Loop Reaponses" scegliere "Pian
Output (Step )" che fornirà il grafico riportato in Figura 22.11.
Come ben noto dalla teoria del controllo, il controllore a ciclo aperto appena progettato non
assi cu ra err ore di uscita nullo in presenza di disturbi o di incertezze di modello. Per ottenere
maggiore robuste22a bisogna introdurre un polo nell'origine nel controllore. Per fa.re ciò clicchi-
amo nuova.mente sul tasto "FS" in modo da tornare al classico schema di controllo in retroazione .
Quindi, cliccando due volte col tasto di sinistra del mouse sul controllore, comparirà la !çhermata
riportata in Figura 22.12.
Aggiungendo un polo nell'origine al controllore comparirà la schermata riportata in Figu-
ra 22.13.
Sia. il luogo delle radici che i margini dì stabilità riportati sui diagrammi di Bode mostrano che
per guadagni troppo eleva.ti il sistema a ciclo chiuso diventa instabile. Inoltre, visualizzando la
risposta al gradino del sistema a ciclo chiuso (Figura 22.14) e confrontandola con quella riportata
...:.~f...':
~!
~~~
~;~',,_-;
..
:~~_f'j
-..,.,
r,,;ft.r
..,..;.;,

414 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA -~~.:


'· ,}'I.;
,':i
•• d
~u}J
• • ":
-""'..t...,_"

~) i;is o De~ 11111


fnr Syslnm '1~ l!ll!JEI
fll• Edil ~IW ~mpentotor Iool• '.t,!lndowl::ielp
~xof¾~IUM◄!Xl~? -·.,
-, 'f'r
~ .:.
.1,

. ~ e"".""'Co
mp
••••~'.
-~I 1.~sj
,...
" 1, ..
.,;,:; ~
,lil\: I
. ~~=;~
L '•
.
I._____~
q,s)_= 11
___ " 'l"ffJI.~¾
~
•:5.;•!°'G
l.1'1.~* -
' I,
• ~t,i.fò

,,, ·: •' Aaot l.aclJS Beò• Oltga m


Clpt!w\•loop ~. -t-
•~e,~~
. a.----~--------.- ,.·.zo.------------....., :-~ri
J(l
·:?$
. ,.i·'f~t.
·, ~-,ilr••-
' :·,1" ,~-:
..;; O M 11'1 • ~~"?t~ .
.,i)~•~
-----=.-:-........... ~ • .Q)
Freq. lnl
Slsble 'oop
"
.'~i'"
• ..-..~;"1:
~, :-_~- ->

•I
' o~- -- - -- - ---~ ",;*';:.~:-\
· 't_.;;
-~~-~
..-~
;;;.<..if1
,.
••• 9)
\
) PM .. tnt
-la) Frct Na.N
i 100 IC,1 • ~•;Y
Freq•Jtn..-y(rad/HG)

Rlght-ollckon the plots for more daslgn optlon1,


,"'J
·' .
,i{{,~~l'
l 1
f"t*l;;'
Figura 22.10: Schermata relativa al comando sisotool. ·~,
"a,i
" .• y;
..

In Figura 22.11 risulta evidente che, seppure le specifiche di regime so110verificate, le prestazioni
dinamiche del eietema e, ciclo chiuso sono fortemente peggiorate. ,t,w,-.,•r
Per migliorare le prestazioni dinamiche ed assicurare un sistema a ciclo chiuso che eia asintot- :,,;~i:"\':
; ~~1'-
1
icamente stabile indipendentemente dal valore (positivo} del guadagno a ciclo aperto, possiamo il'; ,}j.1-._
f aggiungere uno zero nel controllore. Per fare ciò, dalla schermata principale di sisotool, si deve •• 1-J.i ,.-,;~-
_.
,:ti - {'
cliccare col tasto sinistro del mouse sulla c88ella con cerchieUo (simbolo dello zero) riportata In • t~ , , " •

alto 11.sinistra e quindi cllcr re nuovam11nte col tasto sinistro del mouse In corrlspondanaa del
punto <leiluogo dove el dellk,Jra Inserire lo iero. Nel caso specllìco el o~llene la achermata ripor-
tata h1 f'igura. 22.15i la risposta al gradino del sistema a ciclo chiuso diventa quello. riportata In
Figura 22.16.
Supponendo di volere assegnare In MATLAB il controllore progettato, bìéogna selezionare ,• -~~
•;
"File" e poi "Export". Selezionando il controllore C(8) nella tabella. che compare {Figura 22.17)
si oUiene l'assegnazione desiderata. t .·
Prima di concludere il paragrafo, riportiamo ore. in sintesi le principali funzionalità del "".:
comando eiaotool. '"f
• Opzioni gt"afiche per i diagmmmi. , .
·!
l
Selezionando "File" e poi "To olbox Preferencee " si possono modificare le unità di misura., 'ti, .
lo stile delle linee, il tipo di rappresentazione della funzi one di trasferimento del controllore . • ~1;',i
.. ··°ajC
:•t
• Modificare il contf'Otlore. ,-•..1\:\.\.Ìè ,
.........
Si possono usare i t88ti in alto a sinista nella schermata principale: la crocetta per ag-
giungere un po lo, il cerchietto per aggiungere ono zero , le due crocette per aggiungere poli
complessi coniuge.ti, i due cerchietti per aggiungere zeri complessi coniugati, la gomma
per cancellare poli o zeri del controllore. Alternativa.mente •ei posaono aggingere zeri e
poli cliccando due volte col tBSto sinistro del mou6e sul blocco controllore nello schema
22. 7. ESERCIZI 415

o.,

oe

0.1

O.I

Figura 22.11: Risposta al gradino di G(s) con pre-compensatore statico.

in alto a destra sulla schermata principale. Inoltre, poli e zeri possono essere aggiunti
o eliminati, sia sul luogo delle radici che sul diagrammi di Bode, cliccando col tasto di
destra del mouse su una delle LreRnestre grafiche (luogo delle radici, Bode modulo e Bode
fase) presenti sulla schermata principale, Un altro modo per aggiungere o rimuovere poli
e zeri dal controllore b selezionare do.Imenu 11Edlt 11 una. delle due optloni 11Root locus" o
"Bode".

• Nuovo aistema.
Bisogna ripetere la procedura di importazione: dal menu "File", scegliendo "Import" è
poaelbllescegliere uno del sistemipreventive.menterapppreeentatl In MATLAB,

• Rappresentazione aul luogo di vincoli sulla riapostanel tempo.


Selezionaredal menu "Edit" l'opzione "Root locue" e quindi "Design Constrainta".
'''
• Risposte nel tempo ed in frequenza.
Dalla schermata principale di aiaotool, aelezlo11are"Tool" e poi "Loop Respons88". I
grafici che si possono visualizzare sooo: il segnale di controllo (ingresso del proceaso)
per un riferimento a gradino, I diagrammi di Bode relat,ivi alla risposta. in frequenza del
controllore C(a), I diagra.mmi di Bode del sistema a. ciclo chiuso e quelli di Nyquist e i'
Nicholsdel sistema a ciclo aperto, i:
!

22.7 Esercizi
Esercizio 22,1 Si traccino ì luoghi delle radici relativi alle seguet1tifunzioni di trasferimento
a ciclo aperto
416 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA

<:rimpPn sn1nr
•} I 1111 l!!lriilEl

I Galn: j1 ·- ··>
.. Format: lzero/PoleLooation

Zero• : . .' i • :••· 1• Polaa I

01l1i. ,· Real Oalate f. Re~ lm•g!nwy. J .'•


.. .. •[
r 10 · 4
•!:i
AddRealZero· 1 ~d Complax
Zero I
• ,
I
AddRealPola AddCompie)(
Pola, I} '
l ~

OK I Canee( I Help I Apply I


Figura 22.12: Schermata di selezione del controllore.

e se ne giustifichino gli andomenti .


.Esercizio 22.2 Dato i.I sistema con funzione di trasferimento

G(s) = k .,2+ 2 s + 101


s(s + l)(s + 5)
determin11re, usando i comandi rlocfind ed uis, gli intervalli di valori di k per i quali il sistema
a ciclo chiuso risulta stabile..
Esercizio 22.3 Per ciascuno dei sistemi con funzioni di trasferimento

l
Gi(s) ==s(s + l){s + 2)'
si rappresenti sulla stessa finestra grafica tanto il luago delle radici quanto i relativi a,intoti.
Suggerimento. Si ricordi che detti n ed m il numero dei poli Pi e
degli zeri z; rispettivamente, gli asintoti del luogo delle radici forma no
una stella con centro nel punto dell'asse reale
O' ==L~=l
'R(pi) - L:,1'R(zi)
n-m
dove con 'R.(pi) (z,) si è indicata 1a parte reale del polo {dello zero),
ed angoli (supposto il guadagno a ciclo aperto positivo e la retroazione
11.nitarianegativa)
= (2a + 1)7r'
8 1 a= 0 1, ... , n - m - 1
1
n-m
22. 7. ESERCIZI 417

lii! f

,. I
/

IO
~ ./
/
/
i
l' ..
o
·+·\ ·
-1:?1
~ \
t!"''"' ·i
... \ ~ i~
........ ·. I

,., \

.. .;,, :.'I
\
'•· •
J~ ,,,..,01..,,
1(,c:
..
,o·' ~l 1il'
;\.;.: ....
•. 11~ltA4-"IAI:.)

..I
Figura 22.13: Schermata di sisotool con un nuovo compensatore.

Esercizio 22.4 Si rappresentino i luoghi delle radici relativi alle /unzioni di trasferimento

s+2
G )
(s = s3 + 0.95 s2 + s + 0.95'
1
s+Ul
G2(s) = s3 + 2 s 2 + 2 .,
....
relativamente alle retroazioni unitarie tanto negativa quanto positi11a.Si analizzino in particolare
gli effetti della f'etroazione positiva.
l
Esercizio 22.5 Dato il sistema con funzione di trasferimento

1
l
G(s) = (s + l){s + 10}
usando il comando rlocus si progetti un controllore di tipo Proporzionale Integrale ( PI) tale cl1e
il sistema a ciclo chiuso presenti dt,e poli dominanti, tmo risposta indicìale con sot1raelongazione I
I
del 5 % (corrispondente a ç = 0.7) e un tempo di assestamento pari a 9.2 s (corrispondente ad ' I
una parte reale dei poli pari a -0.5). Effettuare quindi un confronto tra la risposta indiciate !

del sistema a ciclo chiuso con e .tenza il controllore progettato. È pouibile ottenere le .ttes3e
prestazioni con un semplice controllore di tipo Proporzionale (P)P E con un controllore di tipo
Integrale (!)?

Esercizio 22.6 Sì consideri il polinomio

p(s, ,r) = s2 + 1r1 a + 1 + 1t2


dove 1r1 E Il, 2) e 1r2 E (O,1). Definiti i polinomi

?
Pll = s- + 8 + 1, pu = s 2 +a+ 2
P 22 = s + 2 s + 2,
2
P21 = s + 2 s + l
2
418 CA.PITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA

OJ

oe

I i

eo 100 1IO

l'M(lt<I

l Figura 22.14: Risposta al gradino del sistema a ciclo chiuso con C(s) = 1/s.

,i uerifichi che gli zeri di p(s, 1r), al variare di 1r1 e 1r2 negli intervalli suddetti, appartengono
sempre alla regione del piano complesso delimitata dai luoghi Pll + kp12, P12 + kp22, P22 + kp:n
ì e P21 + lcp11, con k E I0, 1] (questo risultato é il coaiddttto "Edge Theorem'').
Esercizio 22 . '7 Data la funzione di trasferimento

G s) ::: lOOOk
( (s + 0.5 ± 0.4j}(., + 2 ± lOj)
si calcolino i maryini di ampiezza e di fase per k ==1. Si determini per quale valore di k ai
ha un aistema a ciclo chiuso stabile, ma non asintoticomente stabile ed il valore di k per cui ai
ha un margine di fase pari a 30°. Si analizzino le ris11ettiuerisposte al gradino. Introducendo
un ritardo ingrtsso-uacita, ai uerificl1i che il massimo ritardo aul sis,ema a ciclo aperto che
mantiene lo stabtlitd del sistema a dclo claiuso l pari a At = m~/wt, dove m~ é il margine di
fase e Wt la frequenza di attrauersamento.
Esercizio 22.8 Si calcolino i marigini di fase e di ampiezza relativi alla funzione di trasferi-
mento

G(s) = k (s 2 + 200 s + 20000)(, + 100)


(s + 50):l(s2 + 20 s + 500)
per le.::::1, 10, 100. Si confrontino e commentino i risultati.
Esercizio 22.9 Date le funzioni di trasfeJ'imento

0.1 10
G1{s) :::
2s +s'
G2(s) = --
2., + S
0.1 10
G3(s) ::: -, G4(8) = --
2s- 5 2a - 5
22. 7. ESERCIZI 419
) ou,.,,,..,,J,. , ,, ... ,, ll!!lr.:ll:I
.,._ ~ ~ C--• I- ~ ~

I'&""o ♦ T ~, tl li4 I Xl~

.._G_·_~_:,_2a:c.....-===-·
1
_'_·_:-_' ___________
_I.OC.,
__.I 1.~,I
~holC!&l91m
D
!
Il

IO
i 20

J ~

1 o ... ~...
....... ,......
:O (Ut 1W

I

1
! ...--·

:
r .,
...~
·10
3
.,.
•IO

, ...............
4 .. •N l.\llf
• '
i
;
l-•:-e

, '"····
...
lii>
~ ...,..,
,,
,o• __ ..,io'
Alaht•olln • ,._. ,_tAI
_, ,...,....,...,.

Figura 22.15: Schermata di aisotool con C(s) = 243(1 + 0.49s)/ s.

si valutino i con-ispondenti margini di fase e di ampiezza e si fornisca una spiegazione per


ciascuno dei risultati ottenuti.
Esercizio 22.10 Si Bariva uno function MATLAB che dato un siatema S!SO rappresentalo in
termini di funzione di trasf erìmento o nello spazio di ,tato, restituisca i matyini di arnpie.ua e
di fase utilìuando il comando nichols ,
Esercizio 22.11 Si scriva una MATLAB function tale che, dato un sistema rappresentato me-
diante funzione di trosf erimento o nello spazio di stato, restituisca il corrispondente diagramma
di Nichols con evidenziati i margini di fase e di ampiezza.
Eaercizio 22.12 Si traccino j diagrammi di N11quistrelativi alla funzione di trasferimento

k
G(-') = (s - l){.t + 5)
con k = 1 e k = 10. Per quali di questi due valori di k il sistema a ciclo chiuso risulta stabile?
Esercizio 22.13 Data la funzione di trasferimento

2
G(s) = le s + 2 s + 101
s3 + 7 si + 1 s - 15
si determini mediante il criterio di stabilitd di Nyquist e co11 l'ausilio del relativo diagramma
per quali valori di k il sistema a ciclo chìuao risulta stabile.
. Esercizio 22.14 Si calcoli con l'ausilio del comando nyquht il valore di k per cui il sistema
con funzione di trasferimento

a ciclo chiuso ~ al limite di 8tabilitd.


I ,,
420 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA

ai.,11e....,..
u------------------T---------,

oa I.S

Figura. 22.16: Risposta al gradino del sistema a. ciclo chiuso con C(s) = 243(1 +
0.49s)/s.

Suggerimento. Per ogni valore di k 1 dopo aver usato il comando


nyquist, con l'aiuto del comando tind trovare il primo punto carat-
terizzato da parte immaginaria positiva e quindi valutare in quel punto
la parte reale.
Esercizio 22.HI Data la f1Jniìone di trasferimento

G(s) _ 150
- s(s + l0){s + 20)
usando il comando nichola si progetti una rete anticipatrice che assicuri un margine di fase di
45° con p1Jlsazionedi attraversamento pari a 8 rad/ s.

Esercizio 22.16 Data la funzione di trasferimento

G(s)=10s2+7s+l
s(s + 1}3
usando il comando nichols si progetti una rete correttrice che assicuri un margine di fase di 30°
con pulsazione di attraversamento pari a 10 rad/s. Si calcoliquindi il guadagno del controllore di
tipo proporzionale che fornisce lo stesso margine di fase. Usando il comando etep si confrontino
quindi le rispode dei sistemi a ciclo chiuso, con e senza i controllori progettati. Si costruisca
uno schema S/MUL/NK del sistema a ciclo chiuso e si ponga una satura.ziòne prima del blocco
corrispondente al sistema, sim1Jlandola saturazione dell'attuatore. Utilizzando ±1 quali limiti
della saturazione, si verifichi l 'inftuenza della saturazione rispetto alle risposte al gradino del
sistema ciclo chiuso ottenute in assenza di saturazione.
22.7. ESERCIZI 421

•) SISO Tool B<port l!ll!JEI


Select M o de ls to E>cp
o rt - - ------ -~

Component• Model Ex ort As ... 1ExporttoWork~~~ .


Plani O (current) gs
Sensor H (currert) H
1· e~sxfrt
l~ ~~ii
---~. I" i

Prefilter F F ' .. ~' -l•.~f,-'•J.


I t - ; I
(currert)
(cur rent) e ; ...· '·,· ·~. '
Open loop ICGH olsys
Closed Loop FC0 (1 +<:GH) T_r~
\.
IFC/(1+COH) TJ2U
(outp(AsensKlvily) 1( 1+CGH) S_Ot.t
(input senslllvM
----~---
ÌOl( t+CGH)SJn
-i Help .,

State Space cto,é.

\
Figura 22.17: Schermata dì "Export '1 •

Eserc izio 22.17 Si acriua una MA TLAB /unction che, dato un st,tema S/S O roppre,entato in
termini di funzione di trasferimento o nello spuio di stato e dati il margine di fase e la pulsa,ione
di attrauersamento desiderati, fornisca in uscita i parametri relativi ad un controllore tipo rete
ritardatrice, qualora questo consenta di soddisfare le specifiche richieste, o un segnaledi errore.

Suggerimento. Si proceda per raffinazioni successive. Si supponga


che il sistema sia assegnato con funzione di trasferimento e sì indi-
viduino l'attenuazione ed il ritardo necessari; un test su questi valori
dovrà stabilire se la rete ritardatrice consente di ottenere q1,estespeci-
fiche. In caso positivo si può lanciare una MATLAB function che
individui la rete necessaria. Se il sistema è assegnato nello spazio di
l
stato basta usare il comando di conversione tf ; è opportuno introdurre
anche 1m test sulla coerenzadelle matrici assegnate in ingressotisando
il comando abcdchk (vedi Paragrafof5 .1}.
Esercizio 22.18 S i scri11auna MATLAB function che dato un sistema SI SO mppresentato
nello spazio di stata o in termini di funzione di trasferimento e data la pulsazione di attraver-
samento ed il margine di fase desiderati, resistuisca i pnrametri relativi alla rete correttrice
opportuna (ritardatrice, anticipatrice o a sella), specificandone il tipo, o un segnale di errore nel
caso una sola rete non sia sufficiente.

Suggerimento. Si risolva l'esercizio precedente e da un test sul-


la compensazione da ·introdurre alla pulsazione di attraversamento si
individui la rete da utilizzare e quindi la opportunafunction da lanciare.
Esercizio 22. 10 Dato il sistemn con ftmzìone di trasferimento

1
G(8 ) = -s(_l _+_O
_.O_l_s
)-2
422 CAPITOLO 22. CONTROLLO CON RETROAZIONE DI USCITA

si progeUiun controllore di tipo Propor:iionaletale che la risposta al gradino del sistema a ciclo
chiuso abbia un tempo di salita tr = 0.07s.

Suggerimento. Si ricordi che il tempo di salita tr è legato alla ban-


da a 6 dB (in Hertz} B 6 del sistema a ciclo chiuso dalla relazione
approssimatat,.B 6 = 0.45. Si usi il comando f ind.
Esercizio 22.20 Dato il sistema con /unzione di trasferimento

I G(8 }
= s(l
1 + 0.2s
+ 0.018) 2
si progettinc,.,duecontrollori di tipo Proporzionale tale che il sistema a ciclo chiuBo abbia una
banda a 3dB pari rispettivamente a 30 rad/a e 570 rad/1. Successfoamente ai effettui un'analisi
del aiaterno usando il luogo delle radici, i diagrommi di Bode e quelli di Nyquist. Quindi,
costruendo un opportuno achema SIMVLINK, si confrontino le risposte indiciali dei due sistemi
a ciclo chiuso su un intervallo temporole di h. È possibile aumentare ulteriormente il guadagno
del controllore e con quali corueguenze?

Esercizio 22.21 Dato il 8istema con funzione di tros/erimento

10
G(s) =
s(8 + l)(s + 3 ± j)
,i progetti la rete anticipatrice tale che il sistema a ciclo chiuso abbia una banda a 3 dB pari a
0.52 rod/1.

Esercizio 22,22 Doto il sistema con /unt.ione di trasferimento

G(s) - 100
- (8 + 1)3
si progetti un controllore tale che l'errore a regime ad una rompa unitaria sia del 10%, il maryine
di fase sia di 40° con pulsazione di attrauersamento pari a 10 rad/s. Successi11amentesi realizzi
lo schemo.S!MULINK corrispondente al sistema a ciclo chiuso e si determini se il controllore ·
proposto verifica le specifiche richieste. Quindi si in,erisca a uolle del controllore un ritardo
=
finato pari o r 0.05, 0.1, 0.2 s analizzando I~ prestazioni del sistema.
j Suggerimento. Il controllore oltre ad u.n polo nell'origine e ad un
opportuno guadagno, dovrà essere composto da più reti correttdci in
cascata;per il progetto di tali reti può essere utile consultare gli op-
portuni abachi. Il ritardo finito sì può realizzarecol bloccoSIMULINK
Transport Delay.
Capitolo 23

Controllo e stima nello


spazio di stato

In questo capitolo saranno descritte le funzioni di CONTROL utili per il progetto di un con-
trollore mediante retroazione di stato e per la stima dello stato nei sistemi LTI. Per la completa
comprensione di quanto segue si rende necessaria la conoscenza di alcune teorie cli base dei Con-
trolli Automatici, nonché di a.lcuni concetti del Controllo Moderno per i qua.li si rimanda. a testi
universita.ri di ampia. diffusione. La lista. delle istruzioni utili a tale tipo di progetto è qui di
seguito riportata.

acker Allocazione dei poli per sistemi con un solo ingresso


utim Matrici dello stimatore dalla matrice dei guadagni
kalman Progetto e aesegnazione di un Filtro di Kaiman {FK )
lqe Progetto di un Filtro di l(alman (FK)
lqed FK discreto con funzione obiettivo continua.
lqe2 FK con metodo di Schur
lqev Progetto generale di un FK
lqr Progetto di un retroazione Lineare l~uadrntica (LQ)
lqrd LQ discreta. con funzione obiettivo rontinu&
lqry LQ con pesi sulle uscite
lqr2 LQ con metodo di Schur
place Allocazione di poli
reg Matrici dello stimatore e della retroazione

Si noti che, fatta. eccezione per il comando phce, tulLi gli altri comandi della. tabella.
precedente sono specifici per sistemi tempo-continuoe non p088ono essere utilizzati per elete-
mi tempo-discreto. Per I corrispondenti comandi da utilizzare con I sistemi discreti si veda Il
Paragrafo 24.8.
Esamineremo in dettaglio ora. queste istruzioni, separando le trattazioni relative ai seguenti
argomenti: la. retroazione di stato, il progetto di un osaervntore, il controllo ottimo Lineare
Quadratico, il filtro di Kalman ed il principio di separazione.
·I·
I:
'··
23.1 La retroaz ione di stato
Come noto dalla. teoria. dei Controlli Automatici, dato un sistema. completamente controllabile,
è po88lbile aura.verso una retroazione lineare dello stato piazzare i poli del sistema a ciclo chiuso

I .
424 CAPITOLO 23. CONTROLLO E STIMA NELLO SPAZIO DI STATO

dovunque nel plano complesso. ln par~lcol11.reconeldorato Il sistema

:i:=Ax+Bu
e la retroazione linea.re dello stato

u = -Kx
Il sistema a ciclo chiuso diventa

:i:=(A-BK)x
dove la matrice K consente di assegnare i poli a ciclo chiuso.
Consideria mo il sistema descritto dalle equazioni

:i:1 = :r:2
:i:2 = -2 :r2 + u (23.1)
y = ~l

Tale sistema., assunta xi una posizione, ~:i una velocità. ed u una coppia, può ad esempio
rappl'esentare il modello delle. sola parte meccanica di un motore elettrico. Dal luogo delle radici
di questo sistema (relativo cioè ai poli del sistema a ciclo chiuso ottenuto retroa.zionando la sola
variabile z1 ), ottenibile con il comando

ais•u(([O 1;0 -2].[0 1)',[1 O],O);


rlocu1(1i1)

si evince che, al variare della costante di retroazione, non è possibile piazzare i poli del sistema
o.ciclo chiuso dove si vuole nel piano complesso. Ciò può invece ottenersi con una retroazione di
tutto lo stato. Se ad esempio voglio conoscere i valori di k1 e k2 tali che Il sistema a ciclo chiuso
rappresentato in Figura 23.1 abbia poli in -2 ± j posso usare il comando

ti X2 X1
+ + 1 l
s+2 s
- -
k2

k1

Figura 23.1: Retroazione di stato.

K•place([O 1;0 -2],(0 1]',(-2+j -2-j));

che fornisce come risultato il vettore I< k1 =( k2 } = ( 5 2 ).


Più in generale tramite una delle istruzioni

K=place(A,B,polides);
K•acker(A,B,polides);
\.

23.2. CONTROLLO OTTilvIO LINEARE QUADRATICO 425

ai ottiene la matrice dei guadagni di retroazione T<te.le che I poli del sistema. a ciclo chiuso
coincidono con quelli specificati nel vettore polidea. In particolare il comando plact si ue&
anche per un sistema. con più Ingressi (tutti considerati come ingressi di controllo) mentre acktr
I
solo per sistemi con un solo ingresso .
L'istruzione place calcola la matrice dei guadagni di retroazione mediante la formula

K = (o-a) (~-lr Mc-;,~t


dove con o ed a si sono indicati rispettivamente I vettori dei coefficienti dei polinomi caratteristici
desidera.ti e di partenza, con ~ si è indicata una matrice di Toeplitz triangolare bassa con la. prima
colonna uguale a (1 ai a2 ..• an-1 te con Mcont si è indicata. la matrice cli controllabilità
del sistema considerato. L'istruzione acker utilizza invece la seguente formula. di Ackermann
l
dove q rappresenta l'ultima. riga dell 1inversa.della matrice di controllabiltà e con o( A) si è indicata
la matrice ottenuta sostituendo nel polinomio caratter istico desiderato alla variabile s la matrice
A.

23.2 Controllo ottimo Lineare Quadratico


La tecn ica del con t rollo ottimo Lineare Quadratico (LQ) realizza il progetto della retroazione
lineare dello stato che minimizza un indice di qualità del tipo
l
J = 1 00

( .z(tf Qx(t) + u(tf Ru(t)) dt

dove Q è una matrice simmetrica semidefinita positiva., mentre Runa matrice simmetrica definita
positiva ed entrambe vengono dette "matrici di peso". L'ipotesi necessaria sul sistema affinché
I
tale problema abbia soluzione è che la coppia (A, B) sia controllabile o almeno stabilizzabile (cioè
tale che la parte non controllabile risnlti asintoticamente sto.bile ). Sotto queste ipotesi si ricava
che il gudagno di retroazione è dato da

dove P rappresenta. la soluzione definita positiva dell'equazione algebrica di Riccati

ATP + PA- PBR- 1 BTP+ Q =O


Consideriamo li sistema mecca.nico rappresentato in Figura 23.2. li modello nello spazio di
stato di questo sistema è

L
o o 1 o
o o o 1
_il !.. _,!_ o
m
1cm _1!_ o _i,
m m m
,I
Scegliamo come parametri m = l k9 1 k = 1000 N/m e b ==5 Ns/m. Supponiamo ora di voler
· progettare un controllo LQ che minimizzi la variazione della posizione relativa delle due masse ,
desideriamo in altri termini che le masse sia.no quanto più possibile tra loro solidali. Il nostro
indice di qualità può essere quindi del tipo
426 CAPITOLO 23. CONTROLLO E STilvfA NELLO SPAZIO DI STATO
I
;,?
:,.;aJ
) ,. '
-•
'

ì
Figura 23.2: Sisten~ameccanico masse-molle.

J = 1°" (q(x,(t) - ~,(t))~ + ru(t?) clt


'
.-~.
..
, l; ;;,. , '\~
: \i :•
.
)'
h ',.

A88egnamo innanzitutto le matri ci <leisistema:

•~coo 1 o;o o o 1,-2000 1000 -10 0;1000 -2000 o •10J; ..,


I
Ba(O O O 1]'; C•(eye(2) zeroa(2,2)]: D•zeros(2,1); 'ì';1\}
~
\ ·~.~~,1
Nel caso in esame le ma~rici Q ed R po68ono essesre 888egnate con i comandi ·af ,.~
( ...
-r,.,.,I•h
q•1e6: r•h-2; -~--
...,•~~
··· di , ·;-;
Q•(q -q O O;-q q O 0;zeros(2,4));
I

r Il progetto del controllore LQ si ottiene quindi con l'istruzione

K•lqr(A)P,Q,r);

\ Confrontiamo ora le prestazioni del sistema a ciclo chiuso con quelle del sistema non contr ol-
-~ ~.;.i}
.,
lato. Definiamo innanzitutto i vettori che individuano gli istanti di tempo e il disturbo d (per ....
l quaat 1ultimo 1 su un Intervallo di simulazione di 2 a1 si è scelto un segna le costante e dl ample:aaa ~,~·":'
~ ifj;

b I l(• ' •
1000 per il primo secondo e nullo succe8Bivamente): ·~f-
.. 11>:.
t•0:0.001 : 2; d=(1e3•ones(1,1000) zeros(l,1001)): i.4:fd
·~·.\
li confronto des ideral o si può quindi ottener e con i coman di .!f:, ' "
~~~
1i1=11(A,B,C ,D);
Ac•A-B•K;1i1cc•11(Ac,B,C,D);
(y,t,x]•l1im(1i1,d,t); • ,.J

(yc,tc,xc]•l1im(1i1ee,d,t);
plot(t,[x{ : ,1} ~{: , 1)]);
figure{2);plot(t,(xc( : ,1) xc(:,2)]);

che forniscono i disegni riportati nelle Figure 23.3- 23.4.


Si noti come gli andamenti delle posizioni delle due mas se nel tempo siano fortemente variati
in seguito al fatt o che il controllo tende a rendere le due masee tra loro solidali, così come desider-
ato . Si noti anche l'azione del controllo nell'evoluzione del sistema in assenzadi disturbo (dopo
Il primo secondo). Migliori preetazioni potrebbero ottenerai diminuendo r oppure aumentando q
a prezio però di un segnale di controllo via. via più elevato.
Più in generale le matrici K e P , nonché un vettore E contenente gli autovalori della matrice
dinamicn a ciclo chiuso p0880no essere ottenuti con l'Istruzi one
23.2. CONTROLLO OTTI!vIO LINEARE QUADRATICO 427

0.8

0.8

0.4

0.2

-0.2

0.2 0.4 0.8 o.e 1 1.2 1.4 1.6 1.8


tempoI•!

Figura 23.3: Stato del sistema non controllato.

[K,P,E]•lqr(A,B,Q,R);

Talvolta minimizzare l'integrale di una norma pesata dello stato sommata ad una norma
pesata dell'ingresso o non è sufficiente rispetto alle specifiche richieste o non è ciò che ai desidera
direttamente. In particolare è possibile che si desideri tener conto anche dell'effstto diretto di
accoppia.mento Lra ingrosso e stato, oppure si vuole iener conto <lell'uscitn anzicché dello stato.
lntereMa In altri termini la minimizzazione di Indici di qualità del tipo

o del tipo

J = 1 00

(11(tf Qy(t) + u(t)T Ru(t)) dt

la soluzione a queBti problemi può essel'e ottenuta, rispettivamente, con le istruzioni

(K,P,E)•lqr{A,B,Q,R,N);
(K,P,E]alqry(sis,Q,R);
i
.f dove sia è l'oggetto corrispondente al sistema rappresentato n~llo spazio di stato. :I
Spe88o, pur avendo effettuato Il progetto nel dominio del tempo continuo, si rende neceeso.ria )
I '
una implementazione del controllore di tipo diacreto. ln te.I ce.so, eITet\uato il progetto nel ··I
,.
dominio del tempo-continuo e ricavate quindi le opportune ma.trici di peso, si può ricova.re la 'I
,r I

matrice dei guadagni di retroazione discreti l< tra.mite l'Istruzi one :i


428 CAPITOLO 23. CONTROLLO E STIMA NELLO SPAZIO DI STATO

0.6

0.6

0.4

-o.a

-0.41-----1---.J.--....L.--....L..---'---.&..----'---I..--....L..---.J
O 0.2 0.4 0.8 0.8 1 1.2 1.4 1.8 1.8 2
tampoI&}

Figura 23.4: Stato del sistema controllato.

(K,S,~J•lqrd(A,B,Q,R,N,Tc);
dove Te è il tempo di campionamento, S è la soluzione dell'equazione discreta di Ricca.ti,E contiene
gli autovalori della matrice Ad-Bd•K con Ad e Bd le matrici ottenute tramite una discretizzazione
con l'istruzione c2d e dove eventualmente la matrice N, nel caso non vi sia. accoppiamento ingresso-
etato, può essere omessa.
Gli stessi riaultt\ti ottenuti con l 'ist.ruzione lqr possono essere anche ottenuti con l'istruzione
lqr2 che utilizza un metodo diverso detto di Schur che risulta più lento ma. anche più robusto
nel caso in cui li sistema non sia. diagonalizzabile.

23.3 L'osservatore
Il progetto di un controllore attraverso retroazione linea.re dello stato presuppone di avere accesso
diretto a tutto lo sta.to del sistema. Questa ipotesi nella pratica è spesso lontana dall'essere
verificata. In questi casi sì rende necessario il progetto di un osservatore che, a. partire dalla
conoscenza degli ingressi e delle uscite del sistema fornisca una. stima dello stato. La struttura
classice. dì un osserva.tare consiste in una. replica. del modello del sistema con l'aggiunta di un
termine che tiene conto dell'errore tra uscita. misurata e uscita. stimata. In termini di spazio di
stato, denotando con x lo stato stimato, l'osservatore ha. una dinamica del tipo

'! .i= Ax + Bu + L(y - Cx - Du}


che può essere riscritta come

¼=(A - LC)x + (B - LD)u + Ly


.

: ~
-':- t,
•• 1l
; ii
23.3. L'OSSERVATORE 429

Stante la similitudine tra le equazioni di un osservatore e quelle di un sistema. a ciclo chiuso


con retroazione di stato, immediatamente si evince che il progetto della matrice L, cioè il progetto
dell'osservatore, può ottenersi, sfruttando il principio di dualità., con l'istruzione

L=place(A',C',polidea)•:

dove nel vettore polidea vanno assegnati i poli che si desidera caratterizzino la dinamica del-
!'osservatore.
Vediamo ora un eaempio dell'uso del comando place per il progetto di un osservatore.
Consideriamo il sistema (23.1). Tramite le istruzioni

A•[O 1;0 -2]; Bo(O 1)';


C•[1 O); D•O;

l
rank(obav(A ,C))

si evince che il sistema è osservabile essendo il rango della matrice di osservabilità uguale all'ordine
del sistema. Gli autovalori della matrice dina.mica sono Oe -2. Si vuole progettare un osservatore
che consenta la stima della seconda variabile di stato {la prima coincide con l'uscita) e che abbia.
i poli in -10 ± j. Con il comando

L•place(A' ,C', [-10+j •10-j)) 1


;
l
si ottiene il vettore L = {18, 25), mentre con le istruzioni
f Ao=A-L•C; Bo=[B-L*DL];

i Co=eye(2); Do=zeros(2,2);

si aasegna.no le matrici dell'osservatore che ha come uscite la. stima. dello eta.te del sistema.
Per vel'ificare le prestazioni dell'osservatore progettato consideriamo l'evoluzione dello stato del

I
sistema e la sua stima in presenza di un ingresso a gradino di ampiezza unitaria. Per quanto
riguarda il sistema basta digitare

si1a11(A,B 1 C,D);
I [y,t,1J•1tep(1i1,0:0.0l:~);

Assumendo come stato inizia.le dell'osservatore il vettore (0.2, -0.4), lo stato dell'osservatore ed
una rappresentazione dello stato vero e di quello stimato possono ottenersi con le istruzioni

xo0..,(0.2 -0.4);
siso=ss(Ao,Bo,Co,Do);
(yo,to,xo)=lsim(siso,[onea(size(t)) y] ,t,xoO);
plot(t,x,to,xo,'.');

de.Ile quali si ricava la Figura 23.5 dove le variabili stimate sono rappresentate con puntini.
È importante ribadire che la simulazione nel tempo qui considerata poteva anche essere
ottenuta in modo altrettanto semplice utilizzando SIMULINK.
Le matrici dell'ossevraotre possono essere calcolate facendo uso del comando eetim. L'istruzione
place consente di progettare la matrice dei guadagni, ma non costruisce il sistema dinamico "os- ,• I
.t I
servatore". Per ottenere quest'ultimo, dopo aver ricavato la matrice dei guadagni, si può appunto
impiegare l'istruzione estim. In particolare con l'istruzione

(Ao,Bo,Co,Oo]=estim(A,B,C,D,L);
430 CAPITOLO 23. CONTROLLO E STl!vIA NELLO SPAZIO DI STATO

-0.2

-0.4

-0.8 ,__ _ __. __ _._ __ ...J._ __ ..__ _ __. __ _._ __ ....1...__ _,__ __ .__ _ __,

O 0.2 0.4 0.6 0.8 1.2 1.4 1.6 ,.e 2


t'
\ Figura 23.5: Stato vero e stato stimato.

si ottengono le matrici dell'osservatore

i = (A - LC)i + Ly
(~) = (~)x
mentre tre.mite l'istruzione

[Ao,Bo,Co,Oo]•estim(A 1,C,D,L,mis,in);

ai possono specificare nei vettori mia e in gli indici relativi rispettivamente alJe uscite (misure)
ed agli ingressi non di cont.rollodel sistema che costituiscono gli ingressi per l'o88erva.tore.

23.4 Il filtro di Kalman


Noi ca.eo in cui il modello aia. soggetto a. rumori additivi, il sistema complessivo può essere
rappresentato nella.forma.

i
'( i = Az+ Bu+ Gw
y = Cx+ Du +v
dove il rumore di processo w ed il rumore di misura 11 sono tipicamente assunti p'roceasl stocastici
gaussiani l>lancbi.In questo caso il progetto di un osservatore nella sua. forma cla.&Sica.
fornirebbe
dei risulta~i non accettabili e quindi deve esaere impiegato un filtro di Kalrnan. La sua struttura
è
23.4. IL FILTRO DI I(AL!vIAN 431

i= Ai+ Bu + L(y - Ci: - Du)


dove la matrice dei guadagni L, che in generale é tempo v,,riante, diventa costante facendo
riferimento al filtro di Kalman stazionario (ipotesi questa formulata nei comandi di CONTROL
relativi a.I filtro di Kaiman). Pur essendo tale etruttura. simile a quella di un oeservatore, la.
metodologia. di progetto risulta. ben diveraa.; per 118petti epecHlci si rimanda. a testi di controllo
ottimo a diffusione universitaria.. Per fornire una stima ottima dello stato il guadagno L può
essere progettato tramite l'istruzione

(L,P,E):lqe(A,G,C,Q,R);

dove Q ed R rappresenta.no le matrici di covarianza rispetti vamente dei rumori di processo e


di mieura, eupposti a media nulla e tra loro incorrelati. Per l' applica.zione di questo algoritmo
la coppia (A, C) deve risultare rileva.bile, cioè l'eventuale parte non osservabile del sistema deve
essere asintotica.mente stabile, la matrice Q deve essere semidefinita positiva. e la. matrice R
definita positiva..
Per analizzare un esempio di applicazione dei comandi di C ONTROL per il progetto di un
filtro di Kaiman consideriamo il modello di un pendolo invert ito su una massa in movimento il
cui schema è riportato in Figura 19.8. Il modello linearizzato di questo s istema è

o 1 o
MXJr9
o o
(23.2)
o o o
-v o o
dove :z:1ed x:i = .t1 sono rispettivamente la posizione e la velo cità angolare del pendolo, mentre
:z:sed :z:4= :i:3 sono la posizione e la velocità della massa M.
Per ricavare il modello (23.2) si deve tener conto che il centro di massa relativo alla massa
m ed a.I pendolo ha coordinate xc = :i:3 + l sin :i:1 e !IG = l cos x 1 e che le energie cinetica e
potenziale del sistema complessivo possono scriversi come

T(:z:) = ~xi+~ (:i:~+2:i:1:i:3lcos:i:1 +l 2 xn


V(:z:) = mgl cos:z:1

Definendo ora come coordinate generalizzate :z:1ed :z:a,defluend o come lagrangia.na L = T- V


ed applicando le equazioni di Lagra.nge

i (8L(:z:) ) _ 8L(x) =O
dt 8:t1 8:c1 '
si ricavano le equazioni

ml cos :z:1 i:3 + ml 2 ft - mgl sin .z:1= O


(M + m)ia + ml cos:z:i :i:1-ml :i:fsin.ci= u

che linearizzate intorno all'origine forniscono

+
m .2:3 ml :i:1 - mg :z:1= O
(M + m) za+ ml it1 = u
Introducendo z2 = :i:1 e :z:,i= :i:a, con semplici passaggi si ha il modello (23.2).

..;
1!J
'
432 CAPITOLO 23. CONTROLLO E STIMA NELLO SPAZIO DI STATO

A pa.rtlre da questo modello consideriamo per semplicità. le equazioni relative alle eole prime
due variabili di stato la cui evoluzione non dipende dalle altre due variabili di stato. In altri
termini consideriamo Il sistema

:h = z2

:i:2 = OZ l - ,8u + V . :•
Y Z1 + W=
dove o = (M + m)g/Ml e /3:: 1/Ml sono delle costanti, v è un disturbo che rappresenta ad
esempio la coppia risultante dall'azione del vento di intensità e direzione variabile e w è un rumore
di misuri\ sulla posizione angolare del pendolo. Assunto M = 2 kg, m = 0.1 kg ed l = 0.5 m si
ricava a = 20.6 e /3 = l. Ci interessa quindi stime.re posizione e velocità del pendolo mediante
un filtro di Kaiman. Definite le matrici
Aa(O 1;20.6 O]; B=[0;-1) i
C=[1 O]; D=O;
tra.mite l'istruzione
~•lq1(A,[O 1),C,10,1);
et calcola la matrice del guadagni del filtro !\vendo assunto come covade.nia del rumori di processo
e di misura rispettivamente 10 e 1. Possiamo ora defìnire le matrici che caratterizzano il filtro:
At=A-L•C; Bt=(B-L•D L);
Cf=C; Df=zeros(2,2);
Lasciamo a.I lettore la verifica delle prestazioni del filtro di Kaiman o in MATLAB seguendo
una procedura analoga a quella riportata nel Paragrafo 23.3 oppure costruendo un opportuno
schema SIMULINK.
Analogamente e.l caso dell'osservatore, anche le matrici del filtro possono essere calcolate
fa.cendo uso del comando estim:
(At,Bf,Ct,Df]aeetim(A,B,C,D,L);
Nel caso in cui i rumori di processo e di misura sia.no tra loro correlati con una matrice di
correlazione N, si può impiegare l'istruzione
[L,P,E)Plqa(A,G,C,Q,R,N);
Gli stessi risultati ottenuti con l'ietruzione lq• poesono esse1·eanche ottenuti con l'istruzione
11:1•2che utilizza un metodo diverso detto di Schur che risulta più lento ma anche più robusto
nel ca.so in cui il sistema non sia diagonalizzabile.
L'istruzione
(L,P,E)•lqov(A,C,C,H,Q,R);
calcola invece lo. matrice dei guadagni di Kaiman. relativamente al sistema

:i: = Ax+ Bu + Gw (23.3)


y = Cx+ Du + Hw + v (23.4}
supponendo i rumori di processo e di misura tra loro incorrelati.
Per quanto riguarda l'istruzione lqed si veda quanto detto relativamente all'istruzione lqrd
nel precedente paragrafo.
Sempre a partire da un modello del tipo (23.3), il comando kalman consente di ricavare
tramite un'unica istruzione il modello dello stimatore, i guadagni del filtro e la soluzione del-
la corrispondente equazione algebrica di Ricca.ti. In particolare, la sequenza di istruzioni da
utilizzare è
23.5. PRINCIPIO DI SEPAR.AZIONE 433

ai1•11(A,[B O),C,[D HJ);


(k11t,L,PJ•kalman(1i1 1 Q,R1 H);

dove keat fornisce un modello nello spazio di stato del filtro di Kaiman

! = (A-LC)t+Ly+(B - LD)tJ

(~) = (;)x+(~)u
e P è la soluzione dell'equazione algebrica di Riccati

23.5 Principio di separazione


Stante il principio di separazione, ottenuta la matrice dei guadagni di retroazione dello sta.
to attraverso la tecnica del piazzamento dei poli o quella del controllo ottimo LQ, è poaslblle
retroazlonare anzlcché lo sto.to vero, nell'ipotesi che questo non sia accessibile, quello stimato at•
traverso un osservatore o un filtro di Kaiman. Il sistema complessivo costituito dall'osservatore o
dallo stimatore e dalla retroazione di stato, pub essere ottenuto tramite una delle due istruzioni

sis=ss(A,B,C,D);
sier=reg(sis,K,L);
1i1r•reg(eia,K,L,mi1 1 in,eont);
l
dove l'ultima va utilizzata nel ca.so si debbano specificare quali uscite, ingressi non di controllo
ed ingressi di controllo intervengono nel progetto del sistema complessivo.

23.6 Esercizi
Esercizio 23.l Dato il sistema costituto da un doppio integratore si progetti lo, retrollzionedi
stato che porti i poli del sistema a ciclo chiuso in -1 ± j.

Eeerclalo 23,2 Si conaideri il sistema deacritto dalle equazioni

• I

e, utilizzando il comando place si determini il guadagno di retroazione di stato tale da portare


i poli del sistema a ciclo chiuso in ( -3 1 2} e. succeuiuamente in (-1, -2). Perchè il comando
usato /omisce un segnale di errore soltanto nel secondo caso P

Esercizio 23.3 Si consideri il sistema con funzione di troa/erimento

1
G( 8 ) = -,(-s-+-1}-(s_+_2_}
Si progetti una retroa,iione di stato tale che il sistema a ciclo chiuso abbia i poli in (-2 ±
3j, -10). Successiuamente si ualuti la risposta al gradino del sistema a ciclo aperto e di quello
a ciclo chiuso.
434 CAPITOLO 23. CONTROLLO E STI1WA NELLO SPAZIO DI STATO

Esercizio 23.4 Si co,uideri il sistema descritto dalle equazioni

( !~) = ( -~ -! ) ( :~) + ( i ) u

y = (1 -1 ) ( :~ )

Si progetti un controllore tale che il siatema a ciclo chiuso sia di tipo 1 e abbia poli in
(-1 ±j, -10).

Suggerimento. Si progetti la retroazionedi stato allargandolo stato,


cioè considerandocome variabile di stato anche l'ingresso dell'integra•
tore da inserire nella catena diretta affinché il sistema sia di tipo 1 (il
sistema a ciclo aperto non ha poli nell'origine). Si noti che l'ingresso
il riferimento nullo, è -Cx.
dell'integratore, suppo11e11do .\
.:...

Esercizio 23.5 Dato il sistema con /unzione di trasferimento

I G(s)- "+ 7
- (1+2)(,+ti±j)
uno retmaiione di atato tale elle ti siatema a ciclo chiuso abbicJpoli in (-1 ::J:.j, -16}.'
prvgetta,--e
Supp0t1tooro taon acceuibtle lo stato, ai progetti un oaseNJatorela cui dinamica aia "sufficien•
temente'' più veloce di quella del sistema. Si confrontino infine le riaposte ad un gradino dei
sistemi a ciclo chiuso ottenuti con 1-etroazìonedello stato effettivo e di quello stimato supvonendo
I 'ouervator-e con condizioni iniziali diverse da quelle dello stato effettivo.

Esercizio 23.6 Si scriva una MATLAB /unction che, date in ingresso le matrici di un si4tema
f S180 in cui l'uscita coincide con una delle variabili di stato, /orniaca le matrici relatiue ad
un osservatoredi ordine ridotto, cioè all'osservatore che stima solo le variabili di ,tato dfoer8e
dal'uscita.

Suggerimento. L'esercizio non è banale e presuppone una trattazione


analitica relativa al fatto che partizionato il sistema nella forma

(1::1~;
) (::) + ( ;~ ) u

y = ( I O ) ( :~ )

l'ossernatore ridotto ha una struttura del tipo

Esercizio 23. 1 Dato il sistema

:i;= 2x + u, y =%
23.6. ESERCIZI 435

si progetti una retroazione di stato che minimizzi l'indice di qualità

00

J = fo (y(t) 2 +ru(t) 2 } dt

con diverai 11alot'idella costante r. Si confrontino quindi le napoate indìciali dei diuersi 1i11temi
a ciclo chiuao. Coaa accade considerando le ateaaematrici di µe8o nel caso in cui nell'equaiione
dinamica al posto di 2 e'~ -2'

Esercizio 23.8 Dato il 8istema

i:=a~+ffo.
con a e {J quol,saai ma diversi do aero, si progetti una retroa,iorie di atato che minimfats 1'indice
di qualità

J = 1 (q00

x(t) 2 + r u(t) 1 ) dt

con dfoerai valori delle costanti positfoe q ed r, ma in modo da mantenere inalterato il rapporto
q/r. Come varia il guo.dagno di retroa.zione al variare dei pesi ,celti? Come si apolta il polo a
ciclo chtuao per q ➔ O (oppure r-+ oo) 'I Verao dove tende il polo a ciclo chiuso quando q ➔ oo
(oppure r ~ O) nel ca,o di o negativo o posWuo riapettivam1J11te'I

Esercizio 23.9 Si comiderì il sistema dinamico descritto do

dove :ci ~ una pom:ione, x2 una velocità e la variabile di controllo è una coppia. Si progettino
le due retroazioni di atato che minimi.uino gli indici di qualità con R = 1 e Q1 = diag(lO, O) nel
primo caso e Q2 = diag(O,10) nel secondo. Si confrontino le risposte indiciali dei due sistemi a
ciclo chiuso.

Esercizio 23.10 A partire dal sistema dinami co descritto nel pr-ecedenteesercizio, si progetti
un controllo ottimo che consenta alla variabile xi di inseguire una posizione di riferimento del
tipo

considerando come indice di qualità

J = 1 00

(q(:i:i(t) - i1(t) ) 2 + r u(t) 2 ) dt


dove r = 0.01 e per i valori di q = 102 , 10 ◄, 106 •

Suggerimento. Per risolvere questo esercizio si rnnde necessaria la


conoscenza della soluzione del problema dì inseguimento con control•
lo ottimo (all'azione in r·etroazìonebisogna ag9iungereuna opportuna
azione in feed/orward). Il riferimento in velocità è dato naturnlmente
dalla derivata di quello di posizione.

• I
: I

:: 1·
.,,

lf

436 CAPITOLO 23. CONTROLLO E STIMA NELLO SPAZIO DI STATO

Esercizio 23.11 Si consideri il sistema dinamico descritto da

.
Considerando inizialmente t ==O, si progetti la retroa.iione di stato che minimiua l'indice
di qualitd . ···~
:.•

J = 1
00

(x1(t)-x2(t))
2 2
+ ru(t) ) dt • I

con r ::: 11 10- 2 , 10- 4 , St uerifìchi che con il Jc progettato in condizioni nominali, i diuer,i .
.fistemi a ciclo chiuso diventano inatabìliper E = -8, -0.9, -0.2 rispettivamente.
::;~~,
.
-~
;
•~1
... 1.:(
~-◄

~
{
'

:r' ~
)

.~i
ti ·,,
j,,T, i
? .r;1,\. ..:-, ,
: ,::ffb_';~ .
•.·1..,~•
.. • ·\-""ti•
, •. , t

:~.;
~
•.•1,~,.
~.-
.;1:;.l.>
_f,

:-i
~~
.
,-:!;r.~ ..
.•.
· ,cl~:s.
~9
• i::'l·• ·
' ,:;U'.• f,
h :ti°~
;.>•~··
.-i.fr&
ii
,t~~--1
. i,..,,_.,
•.t
1 •
'',··:'SI.~,,;!
. ti
• ·t "F.i._,.
l!
di."~.;:.
. : j~i~~jf
. . ....~i'"·
i;z
~U
··'1!,
Ht,, '
. _.,.~
.,.,.,.:1,
.....•"~ , I,)

\·~li
:1ifd
t!
. '~·~:,{
··®'~

.,.,~.-~
·;"W~r:1
'q/·~
-.!·
;
-,.~~~~
/Mit..
-/'~~;,
""•
...·-~
"".i" .. ~~
. ,._._';(
~..~hl_
~/{,~
1;...{"'~
.
a,.."}
t~f :
'f~'!i
1
t:"'J• t(
I
Capitolo 24

Sistemi tempo discreto

l
L'avvento dei siatemi di elaborailone numerica nell'implementa.ilonedel controllori ha reso di
fondamentale Importanza l'analisi del sistemi tempo-discreto. In questo capitolo saranno breve-
mente descritte le Istruzioni di CONTR.OLutilizzabili per tali siatemi. E importante sottolineare
che la maggioranza delle Istruzioni precedentemente presentate sono utilizzabili, oltre che per
sistemi tempo-continuo, anche per i sistemi tempo-discreto.

24.1 Modelli nel dominio tempo-discreto


Supponiamo, a titolo di esempio, di volere implementare numericamente il calcolo dell'Integrale

u(t) = 1t e('T}dr
l
Dividendo l'intervallo di integrazione in Jc intervallini (ti, t;+1 l con i = O, ... , k - I, posto
to = O e t" =t, potremo scrivere:

Supponendo ora che cia:Jcun intervallo tempora.le sia di lunghezza costante e pari a. Te (il
tempo di campionamento) e che l'istante finale di integrazione sia un multiplo di 'Te , cioè
t>: = kTc, posto u(k) = u(kTc ) la precedente relazione può riscriversi come

JiT.,
u(k) = u(k - l)

Se ora approssimiamo quest'ultimo


+
1
(à-l)Tc
e(-r)d'T

integrale con l'area del rettangolo di base Te ed altezza


pari ad e( k) si ha:

u(k} = u(k - 1) + Tce(k) (24.1)


438 CAPlTOLO 24. SISTEh.fI TE!vIPO DISCRETO

Quest'ultima equazione è un esempio delle cosiddete equazioni alle differenze, delle equazioni
cioè èhe, più in genera.le, forniscono l'uscita di un sistema in un istante di tempo discreto in fun-
zione dell'ingreaeo e dell'uscita valutati in un certo numero di istanti di tempo precedenti. Noto
il segnale di ingresso e(k), il modo più semplice per ricavare il segnale u(k) è applicare iterati-
l: vamente l'equazione alle differenze. Ad esempio, anpponendo di volere calcolare numericamente
I l'integrale dj una. rampa di pendenza unitaria attraverso la (24.1) si possono usare i seguenti
comandi MATLAB:

Tc:0.1; k•100;
e•O:Tc:k•Tc;
u(l)•Tc•e(l);
tor i•2:k+1
u(i):u(i-l)+Tc•e(i};
end

I Per l'analisi e la. manipolazione dei sistemi tempo-discreto, analogamente al ca.so dei sistemi
tempo•contlnuo, risulta speseo vantaggioso utilizzare una rappresentazione in termini di funzione
di trasferimento Bnzicché quella in termini di equazioni alle differenze. La funzione di trasferi-
mento di un sistema LTI discreto si definisce come il rapporto tra la 2-trasforma.ta del segnale

I di uscita e qualla del segnale di ingresso, avendo definit1J la 2-tra.sformata come

00

U(z) =Z(u(k)) =L u(k)z-"


Al.aO
con z variabile complessa. Ad esempio, applicando la 2-trasforme.ta. ad entrambi i membri della
(24.1) e utilizzando alcune proprietà della trasformata, la funzione di trasferimento discreta
dell'integratore digitale risulta:

H(z) = U(z) =Tc_z_


E(z) :- 1
Per rappresentare una funzione (o matrice) di tra.sferimento di un sistema tempo-discreto si
può utilizzare l'Istruzione tf, il cui utilizzo è già stato preaeotnto nel Pa.ragrafo 18.1. Ad esempio,
In funzione di trasferimento H(z} appena. trovata potrà casere definita col comando:

bz=Tc•tt ( (1 OJ, (1 -1], Te)

Vediamo ora un altro esempio. Consideriamo il sistema. tempo-discreto con funzione di


tra.eferimeuto

H } .a-0.l z-0.1
(z = (: - l)(z + 0.5) = z 2 - 0.5z - 0.5
Per assegnare in CONTROL questa fun.iione di trasferimento posaiamo usare l'istruzione

hz=tt([l -0.1),(1 -0.6 -0.6),-1)

che fornisce

Tr&.111ter function:
z - 0,1

Sampling time: unspecitied


24.2. CONVERSIONE CONTINUO-DISCRETO 439

" L'argomento -1 nell'istruzione precedente, è un parametro che consente a CONTROL di


evidenziare il fatto che si tratta di un sistema tempo-discreto e non tempo-continuo (l'istruzione
t:t si può infatti usare anche per sistemi tempo-continuo). Se il sistema discreto è ottenuto dal
campionamento di un sistema continuo, allora al posto di -1 va. indicato il tempo di campiona-
mento (per ulteriori dettagli sulla conversione continuo-discreto si veda il para.grafo successivo).
Ad esempio, supponendo che la precedente funzione di trasferimento H(z) è stata ottenuta
dal campionamento di un sistema tempo-continuo utilizzando un periodo di campionamento
pari a Te = 0.01 s, una rappresentazione CONTROL del sistema può essere ottenuta mediante
l'istruzione

Tc=0.01;
hz•t:t([l -0.1],[1 ·0.6 -0.5),Tc)

che fornisce

Tranafer function:
z - 0.1

Sampling time: 0.01

Analogamente al cll.Sotempo-continuo, la funzione di trasferimento H(z) può anche essere


assegnata mediante la sequenH di istruzioni:

z•tf('z',Te);
hz.•(z-0,1)/((z+0.6)•(z-1))

dove, ancora una volta, va scelto Te = -1 nel ca.so in cui il pPriodo di campionamento non sia
noto o .non sia definibile (sistemi intrinsecamente tempo-discreto).
Così come nel c&Bodel comando t:t, anche il comando zpk può essere utiliziato sia. per sistemi
tempo-continuo che per sistemi tempo-discreto (vedi Pare.grnfo 18.2), o.condizione che in questo
secondo ca.so el specifichi Il periodo di campionamento (o, perlomeno, si indichi il parametro
Te= -1).
RelaUvamente alla rapprMenta.zione nello spazio tli stato anche il comando es può essere itnp•
iegato sia per sistemi tempo-continuo che per sist.emi tempo-discreto (si veda il Paragrafo 19.1).

24.2 Conversione continuo-discreto


I comandi utili a.Ila.conversione di un sistema tempo-continuo in uno tempo-discreto sono

c2d Conversione da. continuo a.discret e,


c2dm Conversione da continuo a discret<• con matrici
c2dt Conversione da. continuo a discreto con ritardo

Prima di descrivere l'utilizzo del comando c2d, ricordiamo che, dalla definizione di trasfor-
mata di Laplace di un segnale tempo-continuo /(t)

F(s) = C.(f(t)) = l"°


/(t)e-•tdt

e da.Ila definizione di Z-traaformata. (monolatera) del corrispondente segnale discreto rJ,(k) =


f(kTc)
I
.I
I
• I
•I
440 CAPITOLO 24. SISTEMI TENIPO DISCRETO

00

~(z) = 2(</)(k)) = L f/,(k)z-lt.


.li:=O
si ricava la ben nota relazione tra. la variabile complessa discreta z e quella continua a

(24.2)
Poiché usare la (24.2) per effettuare la conversione da continuo a discreto può risultÙe
alquanto complesso, spesso si utilizzano dei metodi che derivano dall'approssimazione della (24.2).
Uno dei metodi piì1 utilzza.ti per ottenere una rappl'esentazione di un sistema tempo-discreto
mediante il campionamento di uno tempo-continuo è il cosiddetto metodo di invarianzaal gradino. ·
li metodo consiste sostanzialmente nell'assumere che la. risposta. al gradino del sistematempo-
continuo coincida, negli istanti di tempo multipli del periodo di campiona.mento, con la risposta al
gradino del sistema.tempo-discreto. Vediamo a.quale relazione analitica corrisponde tale metodo.
Data una funzione di trasferimento G(s), la risposta al gradino può trovarsi come

y(t) = r_-1 ( G~s))

Campionando y(t) nei multipli del periodo di campiona.mento Te si ottiene un segnale


tempo-discreto la. cui 2-tre.sformata. deve coincidere con la risposta al gradino della funzione
di trasferimento discreta. cercata:

da cui si ricava.:

H (z) = :...::2z
Z
[c- 1 ( G(s))
!
j
t::A:Tc
] (24.3)

Per ottenere la conversione continuo-discreto espresso dalla {24.3) bisogna utilizzare l'istru-
zione

hz•c2d(gs,Tc)

È semplice mostra.re che la fun2;ione di trasferimento che si ottiene col metodo di invarianza
nl grad ino coincide con quella. corrispondente a.I sistema. ottenuto mediante il metodo dei dati
campionati. Tale metodo viene utilizzato con le rappresentazioni nello spazio di stato . A partire
dn un sistema nella forma ...

:i: = A:c + Bu
y = Cx+ Du
che non abbia poli nell'origine, supponendo un periodo di campionamento Te costante ed as-
sumendo che il segnale di controllo u sia costante in ciascuno di questi periodi, la sua. versione a.
dati camp ionati risulta

:t(k + 1) = eATc x(k) + A-I (eÀTc - l) B u(k) (24.4)


y(k) = C x(k) +D u(k) (24.5)
Come si dirà a. fine paragrafo, la scelta del periodo di campionamento è di fondamentale
importanza per la conversi one contiouo-discreto.
Consideriamo il seguente sistema SISO rnooodimensionale
24.2. CONVERSIONE CONTINUO-DISCRETO 441

:i:= -:r; +3 u (24.6)


cui corrisponde la funzione dì trasferimento
3
Q(a) = - (24. 7)
s+l
La risposta al gradino di questo sistema sì può semplicemente calcolare in forma analitica
nell'ipotesi di ingresso costante u(t) = U, supponendo la condizione iniziale nulla. Scomponendo
in fratti semplici si ha:

X(s) =G(s)U(a) = s(s3U+ 1) = 3U ( -sl - -8 +1 l ) 1

da cui antltra.sformando si ha:

:t(t) = 3U(l - e-') (24.8)


Campionando questo segnale con un periodo di campionamento Te, si ha

:t{kTc) = 3U(l - e-.U'c) = 3U (1- (e-T")~)

Applicando ora la Z-trasformata si ha

X(z) = 3U (-z- - z T )
z - 1 z - e- "
Infine, applicando la (24.3} si ottiene

H(z)= z-lX{z)=3U(1-
z z - e- •
z-\)
Tuie funzione di trasferimento può ottenersi con l'istruzione

1i1•11(-1,3,1,0);
g1=-tt(1ia):
Tc•0.3; hz•c2d(gs,Tc );

Va notato che il primo argomento dell'istruzione c2d corrisponde al modello del sistema
continuo, mentre come secondo argomento del comando va riportato il periodo di campionamento
desiderato.
Consideriamo ora la. risposta indiciate del sistema (24..6) su un orizzonte temporale di 4 s ed
utilizziamo la (24.8) per ricavare la risposta nel tempo-continuo:
I
.I
I
La risposta del sistema discretizzato può ottenersi con le istruzio ni
i
[xd,~d)aatep(hz,4) I
I

Si noti che il secondo argomento del comando step rappresenta l'istante finale in cui valutare '
la risposta del sistema.
Il confronto tra le due risposte e con una versione continua a tratti pub ottenersi con
l'istruzione

(~c,xdc]•staira(O:Tc:4,xd);
plot(t,xc,td,xd, ' •',tc,xdc)
442 CAPITOLO 24. SISTE!VIITEMPO DISCRETO

3~-- - -------.- - ----- --- -~- ---,.--~

2,5 3 3.5 4

Figuro. 24.1: Segnale continuo e campionato.

che fornisce il grafico riportato in Figura 24.1. Da questo disegno si deduce che i valori del
segnale sono corretti negli istanti multipli del periodo di ce.mpione.ment.o, ma, considerando Il
eolo aietema discreto, nulla ai può dire riguardo al valore del segnale negli altri istanti di tempo,
In particolare, il comando atairs consente di determinare una versione "continua. a tratti" del
segna.le discreto ottenuto.
Da quanto 6n qui detto dovrebbe essere evidente che per l'efficacia del metodo di conversione
continuo-dis creto di invarianza al gradino (o quello equivalente dei dati campionati), il punto fon-
damentale è considerare l'ingresso costante durante il periodo di campionamento. Nella realtà
spesso ciò non è vero e quindi, al fine di ottenere un segnale costante nel periodo di campiona.-
mento, ai utilizza un sistema costituito de.Ila serie di un campionatore e di un orge.no di tenuta di
ordina zero (vedi Figura 24.2). L'organo di tenuta di ordine zero è un dispositivo che "mantiene"
Il valo,re campionato per tutto il periodo di campionamento.

r(t)
--..-
Te
-X\t-
___rd_(t_)
• ZOH
-I
Figura 24.2: Campionamento e tenuta di ordine zero.

In Figura. 24.2 un segnale di ingresso r(t) viene campionato con periodo Te ottenendo il
segna.le rd(t) e viene quindi reso continuo tramite un organo di tenuta. di ordine zero (Zero Order
Hold) ottenendo cosl il segnale rc(t). Potremo quindi scrivere
24.2. CONVERSIONE CONTINUO-DISCRETO 443

00

r0 (t) = L r(t)6(t - kTc)


.lc•l
00

rc(t) = L r(kTc}[l(t - (k - l)Tc) - l(t - kTc)J


.lc=l

dove con 6(t) si è indicata la funzione di Dirac e con l(t) la funzione gradino unitario. Da queste
espressioni, calcolando le trasformate di Laplace si ricava la funzione di t.raaferimento di un ZOH

1 - e-•T•
GzoH(a) = ---
a
Soetituendo a= jw, dopo semplici passaggi si ricava. la risposta armonica di un ZOH:

. ) T. sin(wTc/2) -J ·w~ 12
G ZOH (JW = e wTc/2 e •

da. cui possiamo ricavare il legame frequenziale tra il segnale r(t) ed Il segnale rc(t)

D(.JW)
n.c
'
= iun(wTc/2)
----eWTc/2
-J1o1Te 12 L
+oo
.2,r)
R (.JW +Jn-
Te
(24.9)
n•-oo
Si o86ervl che il "guadagno" Te della ZOH è stato compensato dal "guadagno" I/Te del
campionatore.
Supponendo ora

wTc <l (24.10)


2
l'ultima relazione può essere con buona approssimazione riscr itta come

+oo
flc(jw)= e-JwTd'l L R (;w+ jk~:)
k=-oo

Quindi, se Il campionamento avviene con una frequenza ·'sufficientemente" elevata {vedi la


(24.10}), le operaiioni di campionamento e di tenuta equivalgono in frequenza ad uno afBSamento
(un ritardo nel tempo). L'errore commesso nell'approssimare Il segnale conLlnuo r(t) con quello
costante & tratti Rc(t) soddisfa la condizione

dr(t) I
ezo H $ Te
I
mr,x
dt
l
Spesso interessa anche Il problema inverso a quello del campionamento, cioè come ottenere il
segnale tempo-continuo a partire dal corrispondente segnale campionato, A tale fine dnJ teorema
di Shannon discende che dato un segnale campionato, il corriepondeute segnale continuo può
I
I
·t
ricavarsi mediante la relazione
!
+oo •:
:I
/(t) = ~ /(kTc) ain(wc(t - kTc)/2) I'
,I
~ Wc(t- kTc)/2
Il
'

I
ì'i:':..[Z
1~
-:~~~
i/ •t~·
: ,''. c/J/'f'
·.•,;~~
444 CAPITOLO 24. SISTENII TElvIPO DISCRETO {_1\
~{
~·...·)-~{
•~ yi.f•"
•;,.<::;j
lll!f;
dove wc = 211'Tc. Quest'ultima relazione è non causale (in ogni istante di tempo ho bisogno dì ...
l • A• ~

tutti i campioni, passati e futuri, del segna.le) e quindi di impossibile implementazione on-line
per cui spesso si preferiscono utilizza.re dei "ricostruttori" di tipo diverso come ad esempio gli
organi di tenuta.
Oltre al metodo di invarianze. al gradino esistono altri metodi di conversione di un sitema f~ ;-,j~-l
.. ~
tempo-continuo in uno tempo-discreto. In particolare t>letruzione
.
-~, ..
. .,:~J/
.~~i~~
. "ti~...
,. .:~I'
,--,,'
. • ·"''"t ~--
1i1d•c2d(1i1,T, 1 {\it metodo}') . i.'':~:,..;.,
,./~ ~l'.Ì.!
:l.-"•lo( r ..~·:1

:'.°'!'l~
1•~lf'{ ·
consente di effettua.re la. conversione da continuo e.discreto sia con la rappresentazione media~t; ...,,•ft~ ;~~
matrice di tr~ferimento che con la rappresentazione nello spazio di stato, scegliendo un oppor- :_ •~,::
,K., ,,Jl
,...
tuno metodo di conversione, Il metodo di conversione da. specifica.re nell'impiego dell'istruzione -.•'#JK" t'
,. r~'A1'
c2d può essere scelto tra zoh, foh, tunin, prevarp e iutched . ....,. A.:'t
L'opzione zoh restitusce lo stesso risultato del comando c2d.
L'opzione foh assume come ingresso invece di un segnale costante a tratti ottenuto con ·~
~• l
. -\.
un ZOH, un segnale linea.re a tratti ottenuto con un First Order Hold (FOH)i in altri term ini
'vt E {nTc, nTc + Te) si ha.

rc(t) = r(kTc) + t- TekTc (r(kTc) - r(kTc - Te))


.: ~ t;.

Un FOH è quindi un dispositivo che restituisce in uscita un segnale continuo ma. non dif-
ferenziabile ed In particolare restituisce Il segnale di Ingresso negli istanti di tempo multipli del
periodo di c1Lmplona.mento ed un segna.le lineare negli !Litri lata.ml.
R.Ipatendo gli stBBsl ragiona.menti fatti nel caso dello ZOH I si ricava ln seguente funzione di
trasferimento di un FOH
. '•
.•,!':
'.f~
;"".1·
'· t\'i:t .,
,I •at1f
~...~,\Y-.
da cui possiamo ricavare il seguente lega.me frequenziale
;fJ\J' i,
• ./ I' I
,'...:';ft
.. ',,.~-i
l :~!'"t~
··
.;;P;\ ,-
u'\._:~
•:
che confrontata con la. (24.9) consente di evidenziare le differenze con un segnale ottenuto con ..,,.
. ' '~./
un ZOH. In questo ca.so l'errore commesso nell'approssimazione di r(t} con rc(t} soddisfa la . -~~;\.[:
condizione :t......
~.;.t,
~:-;.'ii:"
t r:!~ i ~
'·~~-~
~~,

"'f-rt?\
....,f.~m"
•i,'-'(.." t ~
_.._.,
._\.~ \r
Vs. sottolineato che questa. trasformazione non è invertibile cioè non esiste la corrispondente ·-·~;1'f\;_~; .
trasformazione da discreto a. continuo. \:ztf:~:
. ._,
~~l~i
L'opzione tustìn assume una trasformazione bilineare del tipo ~'i(/t
'·;!·,
.. ;~::._ì\~
2 z -1
s=---
Tc z + 1
(24.11)
•••l\ • i
"t
• ~c.~?!;
lly
·-.;,1
.ii:~--~
;;;,: ' l.
La trasformazione {24.11) è ricavata dalla formula. di approssimazione trapezoidale della. ,..tit",]

derivata . Questa trasformazione consente di "mappa.re" il semipiano reale negativo del piano -P-7.~
-j
•• h .. j, l

;~~
complesso "continuo" (regione dì asintotica stabilità dei sistemi continui) nel cerchio di raggio
unitario centrato nell'origine del pia.no complesso ''discreto" (regione di asintotica. stabilità dei ì
~~~- j

ilfl1t
, j••
:t ~
i_
24.2. CONVERSIONE CONTINUO-DISCRETO 445

sistemi discreti). In altri termini in ta.1 modo sistemi stabili sa.ranno convertiti in sistemi ancora
stabili e viceversa.
L'opzione prewarp si basa. su una trasformazione simile all'ultima descritta annullando però
l'errore di conversione in corrispondenza di una desiderata frequenza "critica". Si desidera in
a.Itri termini che la risposte. a.rmonìce. continua e quella. corrispondente diecreta. abbiano lo stesso
valore per una desiderata. frequenza che diremo w. Cominciamo col coneidera.re la trasformazione
{24.11). Diciamo G{s) una funzione di trasferimento continua ed H(z) la corrispondente diecreta.,
cioè

\
H(z) = G(s)l,=t;m
La rispoata armonica. del sistema continuo in corrispondenza. di una certa frequenza w è data
da. G(jw), mentre, in corrispondenza. della stessa frequenza, la rispoeta armonica del sistema
discreto è data. da H(ei"T• ), che in generale è diverso da G(jw). Osservando ora che

2 eiwTc - 1
- . 2j
= -ta.n (WTc)
-
Te eJwTc + 1 Te: 2
è immediato constatare che il valore assunto dalla risposta. armonica continue. in corrispondenza
della frequenza w sarà assunto da.Ila risposta. armonica discreta in corrispondenza delle. frequenza
w tale che

141==2j tan ( wTc)


Te: 2
Una trasformazione che elimina questa distorsione (in inglese warp11} in corrispondenza di
11

una. desiderata frequenza w è Invece

w z -1
s=----
te.n(wTc/2) z +1
{24.12)

Ponendo infatti s = jw e z = eJwT, dalla (24.12) si ricava

H (ei,;;T,) = G(jw)
cosl come richiesto. L'opzione prewarp assume quindi una traeforma.2ione del tipo (24.12). Va
notato che tale trasformazione non consente di evita.re la distorsione in corriepondenza delle
frequenze diverse da quella specificata..
l
L'opzione matched utilizza le seguenti equivalenze per zeri e poli: un polo in s = -a si
converte in un polo in z = e-a.T, uuo zero in s = -b si converte in uno zero in z = e-bT I uno
zero in s= -oo ei converte in uno zero in z = -1 ed infine si impone la condizione di uguaglianza
dei guadagni statici (la funzione di trasferimento continua. valutata in O uguale a quella discrete.
valutata In 1).
Va sottolineato che non è possibile ricava.re dei criteri di carattere genere.le per le. scelta tra
i vari metodi di conversione continuo-discreto. Ciononostante, ne l senso di "linee guida." si pub
osservare che, per sistemi del primo Ol'dine, i metodi relativi alle opzioni zoh e matched forniscono
un sistema discreto la cui risposta in frequenza. coincide con buona approssimazione con quella
del sistema continuo di partenza. Per sistemi piil complessi invece è quasi sempre preferibile ·j
utilizzare l'opzione tustin, mentre l'opzione prevarp va impiegata nel caso in cui si deeideri una.
correzione della. risposta in frequenza del sistema trasformato per via bilineare ( tramite l'opzione
tustin) in corrispondenza. di una determinata. frequenza.
L'istruzione c2dt effettua la stessa trasformiuione precedentemente vista. nel caso Ìf'! cui vi
sia. un puro ritardo nell'ingresso del sistema continuo.
L'istruzione c2dm viene impiegata. utilizzando come argomenti le componenti della. nppresen-
tiuione del sistema (matrici della rappresentazione nello spazio di stato o polinomi numeratore
e denominatore per la funzione di trasferimento). La sintassi del comando risulta:

Il.
446 CAPITOLO 24. SISTE!vII TENIPO DISCRETO

(Ad,Bd,Cd,Dd)2c2dm(A,B,C,D,T,'{\it metodo}');
(numd,dend]=c~dJn(nU111,den,T,
1
{\it metodo}');

Prima di concludere questo paragrafo riportiamo alcune linee guida sulla scelt~ del periodo
di campionamento. Va detto inna nzitutto che non esistono regole di carattere generale se non
di tipo empirico . Nel caso di un sistema controllato In retroazione la scelta del periodo d i
campionamento va. fatta in relazione al sistema a ciclo chiuso; ciò perché tipicamente i proceasi
da controllare sono di tipo pBSsa-basso ed inoltre la banda passante del sistema a ciclo chiuso è
maggiore di quella del sistema a ciclo aperto. Nella scelta di Te conviene riferirsi ad un parametro
adimens ionale N che, nel caao di modi aperiodici, detto tr il tempo di salita della risposta del
sistema, definiremo

e va tipica.\nente scelto maggiore di 4, mentre nel caso di modi pseudoperiodici porremo

N = 21t
wnTc~

dove con Wn e { si sono indicati rispettivamente la pulsazione na.turale ed il coefficiente di


smorzamento. In questo secondo caso la scelta tipica del tempo di campionamento si ricava dalla
condizione N > 10.
'Irate altre regole empiriche per la scelta di Te ricordia.mo quelle che tengono conto del ritardo
introdotto da. un ZOH in corrispondenza. della. pulsazione di attraversamento (deterioramento del
margine di fase), o, relativamente al campionamento dei segnali, quelle che stabiliscono Te in base
a. un limite superiore sugli errori di ricostruzione dovuti agli organi di tenuta. impiegati.

24.3 Conversione discreto-continuo


Nel paragrafo precedente sono stati presentati i comandi che consentono di effettuare la con-
versione da. un sistema. rappresentato nel dominio del tempo continuo ad uno rappresentato nel
dominio del tempo-discreto. Il passaggio inverso (da. sistema discreto a sistema continuo) si può
ottenere con le istruzioni d2t' '! d2cm. In particolare tramite l'istruzione

aisc•d2c(aisd,Tc);

si ottiene l'operazione inversa di quella. svolta dall'istruzione c2d.


Anche in questo caso si può utilizzare il comando d2cm per utilizzare un para.metro opzionale
per la scelta del metodo di couve!l!ione. 'Tuie metodo può essere scelto tra i metodi già descritti
nel paragrafo (24.2) (zoh, tu1tin 1 prevarp, ■ atched) fatta eccezione per il metodo foh che non
ha un equivalente discreto.
Relativo.mente al comando d:lcm, va. 088ervo.toche questo, cosl come c2dm, può essere lmple·
gaio in uno dei seguenti modi

(Ac,Bc,Cc,Dc)•d2cm(Ad,Bd,Cd,Dd,T,'{\it metodo}');
(nWK,denc)•d2cm(numd,dend,T,'{\it metodo}');

a seconda che si desideri effettuare In conversione da discreto a. continuo nello spazio di stato o
nella rappresentazione mediante funzione di trMferimento .
24.4. PROPRIETÀ 447

24 .4 Propri età
Le seguenti istruzioni

dampo ddamp Coefllcienti di smorurnento e frequenze naturali


dcgain o ddcgain Guadagno statico discreto
gramo dgram Gramiani di controllabilità ed osservabilità
d1ort Ordinamento degli autovalori per ampiezza

che saranno descritte in questo paragrafo fanno riferimento a quelle equivalenti nel dominio del
tempo-continuo già descritte nel Paragrafo 18.4.
• ddamp Tale comando è equivalente al comando damp. Quest'ultimo, infatti, può essere
impegiato sia per sistemi tempo-continuo che per sistemi tempo -discreto. Il comando
ddup può essere usato in uno dei due seguenti modi

11od•ddamp(A);
[mod,vn,%it•J 3 ddlllllp(A,Tc);

dove il vettore mod contiene i moduli degli autovalori discreti Àd, il vettore vn contiene le
pulsazioni naturali continue equlvalenU

llog-ÀdI
Wn = (24.13}
Te
ed il vettore zi ta contiene i coefficienti di smorzamento conti nui equivalenti

{24.14)
Relativamente all'argomento A, valgono le stesse considerazioni del Paragrafo 18.4.1 cioè se
A è una matrice quadrata viene considerata come la mntrice dinamica di un sistema nello
spazio di stato, se A è un vettore riga viene assunto contenente i coe fficienti del polinomio
caratteristico e ee A è un vettore colonna viene él.88uotocontenente le radici del polinomio
caratteristico.
Per giustifica.re le relazioni (24.13) e (24.14) ripor tiamo alcune considerazioni teoriche. Le
suddette relazioni possono essere ric avate con due diversi approcci. Il primo fa riferimento
alla nota equivalenza continuo-discreto

(24.15)
Ricordiamo che data una coppia di poli complessi coniugati a± jfJ la pulsazione no.turale
ed il coefficiente di smorzamento ad easi relativi al definiscono come

cioè come il modulo e l'opposto del coseno della foae dl'I numero compelB&Ocr+ jfJ. Dalla
(24.15) ai ricavaquindi

Wn = lsl = jlog l,.11


T
che fornisce la (24.13), e

i
,I
448 CAPITOLO 24. SISTEMI TEMPO DISCRET<:}

che fornisce la {24.14). Questi stessi risultati si possono anche ottenere passando , at
traverso la. decomposizione spettrale della matrice di transizione dei sistemi continui e
discreti. In particolare ad ogni coppia di poli complessi coniugati corrisponde una. riepostà
pseudoperiodica che nel tempo-continuo può essere espressa come

mentre nel tempo-discreto

dove si sono evidenziati modulo e fase dell'autova.Jore complesso discreto >.d.Dalle ultime
due equazioni scritte possiamo ricava.re l'equivalenza tra. i para.metri nel tempo-continuo
e quelli nel tempo-discreto esprimibile attraverso le equazioni

log !>.di
-<wn = Te
{24.16}
/Àd
Wn~ = Te
(24.17)

Attraverso semplici passaggi (si sostituisca (wn da.Ila. (24.16) nella (24.17) 1 si calcoli wn
e poi lo si risostituisca. nella (24.16) per vR.luta.re {) si può verificare che le ultime due
relazioni scritte sono del tutto equivalenti alle {24.13) e (24.14),
• ddcgain Tale comando è equivalente al comando dcgain. Tramite le istruzioni
guadmddcgain(A,B,C,D);
guad:ddcgain(num,den);
si ottiene il guadagno In continua relativo alla corrispondente matrice di trasferimento
discreta 1 cioè il suo valore per z = 1. Detto sied un sistema tempo-discreto lo stesso
risultato può ottenerai con l'istruzione
guad•degain(siad)
• dgram Equivalente al comando gram, consente di calcolare i gra.miani di controllabilità. e
di osservabilità relativi a. sistemi discreti.
• dsort Tramite l'istruzione
Cpord,indp)•dsor~(p)j
si ottiene il vettore pord che contiene gli elementi del vettore p ordinati per va.lori de-
crescenti di modulo ed il vettore indp contenete gli indici corrispondenti a.Ile posizioni
originarie degli elementi di p.

24.5 Risposta nel dominio del tempo


Le istruzioni per calcola.re la. risposta di un sistema tempo-discreto sono uguR.lia quelle relative
ai sistemi tempo-continuo descritte nel Capitolo 20. In particolare:

initial Evoluzione libera. dato lo stato iniziale


impulse Risposta. ali 'impulso
lsim Risposta a.d ingresso qualsiasi
step Risposta. al gradino
24.5. RISPOSTA NEL DOlvIINIODEL TEMPO 449

Nel caso di sistemi discreti il comando step va utilizzato nel seguente modo:

(uscita,tempo)=atep(aiad,T);

dove se T è uno scalare va inteso come l'istante finale in cui valuta.re la risposta. a.I gradino del
sistema, Nel caso in cui il periodo di campionamento del sistema discreto non sia specificato,
allora lo scalare T viene interpretato come il numero di campioni in cui valutare la risposta del
sistema. Se invece T è un vettore, allora viene interpretato come gli istanti di tempo in cui .j'
valutare la risposta del sistema e quindi va. assegnato nella forma: I

T:tiniz:Tc :tfin;

dove Te è il periodo di campiona.mento del sistema discreto considerato,


Nel caso in cui il sistema sia rappresentato nello spazio dì stato, l'evoluzione dell'uscita pub
essere espressa in forma analitica mediante la
A:-l
y(k} =CAkxo + I)cAk-i-l B + D)u(i) (24.18)
i=aO
dove il primo termine viene detto evoluzione libera, mentre il secondo evoluzione forzata. Per
determinare l'evoluzione dello stato e dell'uscita si può utilizzare l'istruzione

(uecita,tempo,atato]aatep(siad,T);

dove T va inteso nello stesso modo appena descritto.


Come nel ca.so dei sistemi continui, anche nel caso dei sistemi discreti è possibile calcolare in
forma analitica la risposta di un sistemR. LTI a partire dalla funzione di trasferimento discreta e
da.Ila Z-tra.sformata del segnale di ingresso. Consideriamo il sistema con funzione di trasferimento

G s2 + 3.2 a + 12
(s) = s3 + 1.2 s2 + 9.2 s + 9
Per determinare un equivalente discreto mediante il metodo di invarianza al gradino, scelto,
un periodo di campionamento pari a Te = l s, si possono usare i comandi

n•[1 3.2 12]; d=(1 1.2 9.2 9); gs=tt(n,d);


Tc:1; hz=c2d(gs,Tc);

che forniscono la funzione di trasferimento discreta

1.26 r + 1.47 z + 0.31


:l
H(z) =
z 3 + l.42 z2 + 0.16 z - 0.30
Così come fatto nel caso dei sistemi continui vediamo come con l'ausilio di MATLAB è
possibile determinare in .forma analitica la risposta di un sistema. a partire dalla. funzione di
trasferimento del sistema stesso e dalla Z-trasformata del segnale di ingresso. In altri termini
vogliamo ottenere

In riferimento alPesempio in esame, consideriamo un ingresso di tipo a gradino la. cui Z-


tra.sformatR. è ~: 1 • Poichè tutte le Z-tra.sformate delle funzioni discrete elementari presentano
come termine moltiplicativo al numeratore z, per ottenere la scomposizione in fratti semplici
utilizzeremo il comando
'
.,'

450 CAPITOLO 24. SISTEMI TEMPO DISCRETO


...
. l' I
,i,t
(rea,poli,k)~residue(bz.n,conv(hz.d,[1 -1)); . ··-~ .;j
.~i;~.w;
~-::· : ~

che consente di sviluppare in fratti semplici Y(z)/z in modo da ottenere poi Y(z) = z•frotti. • '
j

Ottenuti i residui potremo quindi scrivere la Z -trasformata dello. risposta del sistema come
.. ,.. ~
.,
(-0.17±0.0lj) z z 1.33 z · •' •ia .... .. ~
..',.,.
Y()z = .;._------'--- + - --- + --
% + 0.90 =f 0.l3j z + 0.37 z- 1
Utilizzando ora le Z-trasformnte dell e fonzioni discrete elementari si ricava ~I d (
•>l'•,l'{ •
.•irtt ..,.
~, • ~
.Jot~
-~~,,
,.~. · ~
y(k) = (o.33(0.91)" cos(0.14 k + 3.12) - (-0.37l + 1.33)l{k) ·h, ,

dove con l(k) si è indicata la funzione gradino di ampiezza unita.ria.


..:
. ·1.:
,,, ;'c4~•~
~~ ~-
.!;f..i;:~··
...... ~.l' . '
Data una funzione di trasferimento ~{z:), si ricorda che indicando con Ri i residui e con . -\• ·~:t::.~
;ii
le radici del denominatore, supponendo che vi siano m radici reali ed n - m compleese coniuga.te !4~ ~ili .
s!:~-t {~
e trascurando la presenza di poli multipli, l'antitrasformata. della.
-~,~~~
:. .,~
..}. ~.: i,' "' :t
• I
.'' ~;11,1
)7,r~W;.
~~

è data da

•I •

dove si sono accorpati gli autovalori complessi coniugati >.;= a; ± jw 1 .


Il tempo di ca.mpionamento scelto di 1 s non è sufficiente a ricostruire con esattezza In risposta • ~}.,_q,
.. .
. ,, .~/"
•'•:'1:-1-1
•T
del sistema continuo di partenza. Ciò può essere verificato valutando le risposte indiciali del
sistema continuo di partenza e di quello discretizzato. In particolare le istruzioni
. 1~~~~,~t
\r>.-r
.. l"'! ..
.
~

'· ,~::
?l&
[rc,tc]•atep(gs,0:.1 :20);
[yd,tdJ•step(hz,20);
plot(tc,yc,td,yd,'•');

forniscono il grafico riportato in Figura 24.3 dove i campioni discreti sono rappresentati con un
asterisco. Una migliore ricostruzione si può ottenere diminuendo il tempo di campionamento.
Vista la similitudine con l'impiego dei comandi nel caso di sistemi tempo-discreto e tempo--
impulae si rimanda al Capitolo 20.
continuo , per i comandi laìm, initìal,
Prima di concludere questo para.grafo, va però ricordato che da precedenti versioni di CON•
'}it,~
TROL, per la determinazione della risposta nel tempo di un sistema discreto, restano tuttora. ~-il.•
,XJ,·~m,,..
disponibili le istruzioni · .... .
. ~
"·,"'_.
• '4.'- ~, 1, .

;:J1i1::
. .;,-;~//r;
•.:7'~..
dinitia.l Evo luzione libera dato lo stato in iziale ,~ ( .,.,,...
dimpulae Risposta all'impulso ,-~~·.rv:
dl11i111 Risposta ad ingresso qualsiasi • !~él-1
.. :, ~,.t
• 4• ..
dstep Risposta al gradino • :J r
J(~· s.
,~-':1-
la cui sintassi non fa uso degli oggetti, ma della rappresentazione mediante i polinomi numeratore ""t..f
'1:,
.;,. '(r, ; •
e denominatore della funzione di trasferimento (o le matrici del sistema per la rappresentazione
dei sistemi nello spazio di stato).

,..
--~,
..~~,.
.....:
~·.
·.,
. \
, 1' .. ...
.r
24.6. RISPOSTA NEL DOMINIO DELLA FREQUENZA 451 t
I
i',
1.6 ,------,- --""'T""'- -r-----r---.- - -r----,.---,---.-----,

h I

1.2

O.I!

0.8

0.4

0.2

o 2 4 8 8 10 12 14 18 18 20

Figura 24.3: Uscita di un sistema continuo e di quello a dati campio nati.

24.6 Risposta nel dominio della frequenza


Per determinare la risposta. in frequenza di un ssitema tempo-discreto si utlizzano gli stessi
comandi defini ti nel caso dei sistemi tempo-continuo e riporta.ti oel Capitolo 21. In particolare i
comanru sono:

bode Diagrammi di Bode discret i


nichols Diagrammi di Nichole discreti
nyquist Diagrammi di Nyquiet discreti
sigma Valori singolari discreti

Prima di analizzarne l'utilizzo, ricordiamo che ad un campionamento nel tempo corrisponde


una replicazione in frequenza con periodo pari al reciproco del periodo di campionamento usato
nel tempo, ossia valgono le seguenti relazioni:

oo +oo
/c(t) = L /(t}6(t - nTc) -+ Fc(jw) = ;e L F (jw + jn ~) ,
n~l n=-~

Se quindi la funz ione continua ha uno spettro nullo, con buona approssimazione, fuori l'intervallo
di frequenze (- fom, + lum), per evitare fenomeni di a.liasing (sovrapposizione tra le repliche in
frequenza) e tenendo conto della simmetria del diagramma in frequenza rispetto a.Ilozero . bisogna.
utilizza.re una frequenza di campionamento le ?:2 flim , dove .ltim si dice frequenza di Nyquist.
Descrivl&mo ora sioteticamente l'utilizzo dei comandi elencati nella precedente tabella,
• bode Consente di ottenere a~traverso una delle istruzioni
452 CAPITOLO 24. SISTEMI TEMPO DISCRETO

(mod,fa1e,pul1Jabode(1isd);
(mod,ta11]•bode{1i1d,v);
[mod,ta1e,pul1)•bode(siad,{wmin,wax});
consente di determinare la risposta. in frequen2a di una funzione di trasferimento disc-
reta. Valgono le stesse considerazioni fatte relativamente all'uso del comando bode per
sistemi tempo-continuo, In particolare i vettori mode tue conterranno rispettivamente le
grandezze

mod(w) = IH(~"'T•)I
fase(w) = / H(ei"'T•)
mentre il vettore pula conterrà le frequenze in radianti al secondo in un Intervallo che
va da O a 1r/Te che rappresenta la metà. della frequenza di campionamento ( frequenza
di Nyquist). Stante la simmetria del diagramma frequenziale rispetto ai multipli della
frequenza di campiona.mento, tale intervallo è sufficiente per rappresentare completamente
la risposta In frequenza del sistema discreto.
A titolo di esempio, consideriamo la funzione di t rasferimento

G(s) = s+0 .2
s3 + 0.2 s 2
+ 4 s + 0.4
ed effettuiamo un confronto tra. il diagramma di Bode di questo sistema e quello del sistema
discretizz&to mediante il metodo di invarianza al gradino con tempo di ce.mplonarnento di
1 s in un Intervallo di frequenze tra O.I rad/s e 10 rad/s. Con le istruzioni
n•(l 0.2]; d•(l 0.2 4 0.4]; ga•tt(n,d);
w•logapace (-1, 1, 1000); [m, t] :bode (gs, v);
Tc=l; hz=c2d(gs,Tc)
(md,td]=boda(hz,w);
plot(w,squeeze(m),w,squeeze(md), 1
--
1
);

si ricava il grafico riportato in Figura 24.4 dove sono riportati i moduli delle risposte
armoniche dei due sistemi considerati. In particolare nell'Intervallo (O,r.), cioè Rno a.Ila
cosiddetta frequenza di Nyquist, li diagramma di Bode discreto rispecchia quello continuo,
mentre a frequenze superiori il diagramma. di Bode discreto presenta le repliche dovute al
campionamento.
• nichols Consente di traccia.re i diagrammi di Nichols della funzione di trasferimento
dis creta H(z) (si veda il Paragrafo 21.3).
• nyquist Consente di tra.ccia.1·e i dia.grammi di Nyquist della funz ione di trasferimento
discreta. H(z) (vedi Paragrafo 21 .2).
• 1ipa Consente di calcolare i valori singolari della matrice comp lessa

H(w ) = C(e-f""T"I - A)- 1 B +D


al var iare di w (vedi Paragrafo 21.1).
Prima di concludere questo paragrafo va ricordato che per la determinazione della risposta
in frequenza di un sistema discreto, in CONTROL sono anche disponibili i comandi

dbode Diagrammi di Bode discreti


dnicb.ols Diagrammi di Nichols discreti
dnyquist Diagrammi di Nyquist discreti
daigma Valori singolari discreti

che però non fanno uso della definizione ad oggett i della rappresentazione di un sistema dinamico
(per la. sintassi di questi comandi si utilizzi l'help in linea).
24. 7. CONTROLLORE DISCRETO CON LUOGO DELLE RADICI 453

8 ..-----.----.---.....- ---..---....----. --r


......... --....----.----.

~
,, ~
', ,,
1'

,,
1,
,, ,,
1'
,,
,,,,
'1 II
,,
II

I I I I
I I I I
I
I I

'
I
I
I
I
I
I
'' ---- ,I'\
-- - ~
., I \
I
' .,
2 3 4 5 !I 7 8 11 10

Figura 24.4: Diagrammi di Bode di un sistema continuo e di quello a dati


campionati.

24.7 Controllore discreto con luogo delle radici


Il metodo del luogo delle radici, oltre che per progettare controllori nel continuo, può essereanche
utilizzato per il progetto di un controllore direttamente nel discreto . Le istruzioni di C0 NTROL
utili a. ta.le fine sono:

pzmap Posizione zeri e poli


rloc:find Determinazione inte rattiva del guadagno
rlocu, Luogo delle radici
rl tool Tool grafico per il luogo delle radici
urid Griglia di ( e Wn

Per l'utilizzo delle istruzioni, fatta eccezione che per zgrid, si rimanda. a.I Capitolo 22. 1.
Il comando zgrid è l'equivalente discreto del comando ,g:-id. Esso consente di rappresentare
sul pia.no complesso le curve corrispondenti a pulsazione naturale e coefficiente di smor2amento
costanti. Tali curve possono esser e ottenute analiticamente manipolando le seguent i relazioni

log lÀdl
-(w.. =
Te
/Àd
Wn~ =
Te
dalle quali ai ricava

li,
454 CAPITOLO 24. SISTElvII TEMPO DISCRETO

(24.19)

(24.20}

Dalla (24.19) si evince come Lutte le curve a ç costante passano per il punto (1 +jO) del piano
complesso; tali curve, per la loro particolare forma , si dicono cardìoidi . L'insieme dei punti la.
cui fase ed il cui modulo verificano l'equazione {24.20) con Wn costante, individua.no le curve a . i\.~ ~ •
pulsazione naturale costante ,
Dopo aver tracciato un luogo delle radici discreto con il comando rlocus o la posizione di poli '
e zeri sul piano complesso con il comando pz111ap,con il comando zgrid vengono rappresentate
le curve a. ( ed w,. costanti sul piano complesso coal come riportato in Figura 24.5 dove è stato
anche tracciato il luogo relativo alla funzione di trasferimento diecreta ·:.--.,-,1
,:
H(z) = z + O.l
z3 - 0.1 z2 - 0.2 z + 0.05
Le curve a coefficiente di smorzamento costante sono ottenute facendo variare ( tra Oed 1 con
passo 0.1. Le curve a pulsazione naturale costante sono ottenute con pulsazione normalizzata,
ael!umendo cioè costante il primo membro dell'equazione ottenuta dalla (24.20) portando al primo
membro Te e sono rappresen\ate facendo varie.re te.le pulsa.zlone oorma.lliza.ta. <la O a 1r con paeao
1r/lO.

Roolloeus

·""!f._J;.
~• 1,;lt
3,.,IOT ...;~~
08
...' -~
[~,

~~-..
--~ ~
o.e . ·o.a. .;
: ,o,. ......:·
O.! • : • .
04 · 0 ,8• ; •.• · ' , •
:ç-;\l i
.. -.,. .·..
· c►.1 .. . ••
...~;rft;
02 ...
: .. .:.
· 08 :····
.· . H ·:· ...
· :: :.
. ..·.
.. o/\0
·/
~:~~
,;
.. ..
J
f
o
.
,----~
.. ....
. ..
··---+-
. --- . ...·•... .
.•.. '. :
•."/ ':'
·.1.

-0.2 ,. ····:
-0.4 ."': ... ·... ..·•.. . i

-oe
·::<'
-..•"' ...
-....
,:·· ..
~.
-o.,

_,
• .r.;-7-•
•I -0,8 -0.8 -0 .4 -o.a o.e 0.8 -~~; ~•~

Figura 24.5: Luoghi a ( ed Wn costanti.

In modo del tutto analogo al comando agrid si può anche usa.re l'istruzione %grid(.zita.,wo)
per tracciar«J sul piano complesso le curve corrispondenti a dei valori desiderati di coefficiente di
smorzamenL~ e di frequenza naturale specificati nei vettori zita e vn.
I
..
"' .,.,.,

:;. ~ ( ~-:
,,, . .-.)!!

.~-,..:
-l-"-
..""tr~
.1
24.8. CONTROLLORE DIGRETO CON RETROAZIONE DI STATO 455

Anche se non strettamente attinente a questa istruzione, per completezza si ricorda èhe le
regioni del piano complesso continuo corrispondenti ad un valore massimo desiclerato di tempo di
assestamento (semipiani a sinistra di una retta verticale con ascissa -(wn) diventano nel piano
complesso discreto dei cerchi, come si evince In modo immedloto dalla (24,16).

24.8 Controllore dicreto con retroazione di stato


Le istruzioni di CONTROL utili per il progetto di un controllore nel dominio del tempo-discreto
8000

deatim Matrici stimatore discreto


dlqe Filtro di I<alman discreto
dlqe1r Filtro di Kaiman discreto generale
dlqr Retroazione LQ discreta
dlqry Retroazione LQ discreta con pesi sulle uscite
dreg Motrici stimatore discreto e retroazione LQ
kalman Progetto e assegnazione di un Filtro di Kaiman {FK}

Esse fanno tutte riferimento ai comandi corrispondenti nel dominio del tempo continuo
<leect"ltte nel Capitolo 23.

• destim Equivalente discreto del comando estim, consente di ottenere le matrici relative ad
una rappresentazione ingresso-stato-uscita di un filtro di Kaiman per un sistema discreto.
• dlqe Equivalente discreto del comando lqe, a partire da una rappresentazione nello spa.zio
dì stato del sistema discreto, consente di ottenere tramiLe le istruzioni

[L,H,P,EJ•dlqe(A,G,C,Q,R);
(L,H,P,E]•dlqe(A,C,C,Q,R,N);

la matrice L dei guadagni del filtro di Kaiman, la matrice H di covarianza dell'errore


di stima. prima dell'aggiornamento delle misure che è soluzione dell'equazione di Ricca.ti
discreta

la matrice P di covarianza. dell'errore di stima dopo l'aggiornamento delle misure e il vettore


E degli autovalori dello stimatore . Le ultime tre va.ria.bili di uscita possono eventualtnente
eaeere omesse (per ulteriori dettagli si veda il Paragrafo 23.4).
• dlqev Equivalente discreto del comando lqe11,consente di ottenere tra.mite l' istruzione

(L,H,P,E]•dlqev(A,G,C,J,Q,R,N);

la matrice L dei guadagni del filtro di Kaiman, la matrice M di covarianza dell'errore di


stima prima dell'aggiornamento delle misure (soluzione dell'equazione di Riccati discreta.),
la matrice P di covarianza dell'errore di stima dopo l'aggiornamento delle misure e il vettore
E degli autovalori dello stimatore. Le ultime tre variabili di uscita possono eventualmente
essere omesse (per ulteriori detta.gli vedi Paragrafo 23.4).
• dlqr Equivalente discreto del comando lqr, tramite le istruzioni

[K,S,E]•dlqr(A,B,Q,R);
[K,S,E]adlqr(A,B,Q,R,N);
456 CAPITOLO 24. SISTENII TENIPO DISCRETO

consente di ottenere: la matrice K dei guadagnidi retroazione dello stato che minimizza,
rispettivamente, i seguenti indici di qualità. ....••
- .,
00

J = ì:(x(kfQx(k)+u(k)TRu(k))
k:=0
00

J = L {:i:(kfQx(k) +2u(>:f N:t:(k) + u(k)T Ru(>:)}


lc=O

la soluzione d.eftnita positive. S della equazione di Rlccati discreta e, nel vettore E, gli
autovalori del sistema a ciclo chiuso. Le variabili di uscita S ed E possono eventualmente
essere omesse.
• dlqry Equivalente discreto del comando lqry, tramite l'istruzione

(K,S,E]•dlqry(A,B,C,D,Q,R):

consente di ottenere: la matrice K dei guadagni di retroazione dello stato che minimizza
l'indice di qualità

00

J = L (y(k)TQy(k) + u(k)T Ru(k))


n::::O

la soluzione definita positiva S dello. equazione di Ricce.ti discreta e, nel vettore E, gli
autovalori del sistema a ciclo chiuso. Le variabili di uscita S ed E possono eventualmente
essere omesse.
• dreg Equivalente discreto del comando reg, consente di ottenere le matrici relative ad una
rappresentazione ingresso-stato-uscita di un controllore costituito da un filtro di I<alman
e dalla. retroazfone del corrispondente stato stimato.
• kalmanSi veda quanto riportato nel Capitolo 23 e l'help in linea che 11ivisualizza. mediante
l'Istruzione help dkalman .

24 .9 Esercizi
Esercizio 24.1 Data la funzione di trasferimento

1
G(s) ==-
s+l
sì ottengano le corrispondenti rappresentazioni discJ'ete con i diversi metodi di conversione
continuo-discreto e con i tempi di campionamento 0.01 s e 2 s (si usi una frequenza critica
relatit1a all'opzione prevarp pari a l rad/s).

Suggerimento. È interessante confrontare le risposte ad un ingresso


a gradino ed a una sinusoide con frequenza 1 rad/ s (si vedano i Para-
grafi 20.4, 20.2 e 24.5) e confrontare i diagrammi di Bode delle varie
rappresentazioni ottenute (si vedano i Paragrafi 21.1 e 24.6).
24.9. ESERCIZI 457

Eserci.zio 24.2 Data la funzione di trasferimento

s
G{s)---- 2
- s + s + 25
si ottengano le corrispondenti mppresentazìonì discrete con i diversi metodi dì conuersione
continuo-discreto e con frequenze di campfonamento 3 Hz e 15 Hz {si usi una frequenza critica
relatiua all'opzione prevarp pari a 5 rad/ s).

Suggerimento, È interessante confrontare i diagrammi di Bode delle


ottenute(vedi Paragrafotl.1 e Paragrafoe4.6).
varierappresentazioni
Esercizio 24.3 Dato il sistema con funzione di trasferimento

G(z) = z + 0.4
(z - 0.2}(z - 0.3 ± O.lj)
si ricatii con l'aiuto del comando residue la risposta nel tempo in forma analitica ad un ingresao
costante e ad una rampa.

Esercizio 24.4 Dato il sistema con funzione di trasferimento

z
G(z)= --
z-o
si ricavino e sì confrontino le diverse risposte impulsive del sistema ottenute per i seguenei11alori
di a: -1, -0.3, O,0,6, 1, 1.2.

Esercizio 24.5 Dato il sistema con funzione di trasferimento

Gz)= z(z-rcosO)
( ,:i-2r(cos8)z+r2
si ricavino i poli della /unzione di trasferimento e le dfoerse rispoate impul1i11eottenute per•le
diverse combinazioni dir= 0,0.3, 1,1.1 e IJ= 0,1r/4,1r/2 1 31r/4 1 1r,

.Esercizio 24.6 Dato il sistema con ftJnzione di trasferimento

G(z) = z - 0.1
(z + 0.8){z - 0.1 ± 0.2j)
se ne ricat1ila risposta in et1oluzionelibera con condizioni iniziali (0.1, -0,1 1 0) 1 ed i primi 20
campioni dell'uscita per un ingresso impulsàtlo,a gradino e ad una rampa con condizioni iniziali
nulle.
Successiuamente si tracci il luogo delle mdici relatìt10alla stessa funzione di traaferimento
e si determini il valore del guadagno a ciclo aperto in modo che risulti a ciclo chiuso <= 0.3 ed
Wn = 2.3.

Suggerimento. Per la risposta alla rampa si veda il sug9e1·imento


dell'Esercizio 20.3 e lo si riporti ai sìstemì discreti. Per la seconda
parte dell'esercizio .si usino i comandi rlocua, zgrid e rlocfind.

\.
458 CAPITOLO 24. SISTENII TE!vIPO DISCRETO

Esercizio 24. 7 Dato il sistema con funzione di trasferimento . .:.i

1
G(s) = (s + o.t)(s 2 + 1)
se ne confrontino le risposte al gradino su un intervallo di tempo di 70 s ed i diagrammi. di
Bode con quelle dei corrispondenti sistemi discreti ottenuti con i diversi metodi di conversione ,
continuo-discreto (11ediParagrafo 2,1.2) e con tempi di campionamento Te= 0.1 1 l 1 3 1 6s. .. , ,

Esercizio 24.8 Dato il sistema con funzione di trasferimento continua

1
G(s)- --
1 + 10 s . .]
ed aBsunto un tempo di campionamento Te = 5 s, si progetti un controllore discreto

z-a
C(z)=kz-b

tole eh~ il sistema a ciclo chiuso presentì u,l errore nullo a regime ad un ingresso a gradino ed
i pnli del sistema a ciclo chiuso si tr'ovino nel piano compleuo all'interno della regione definita
dalle curve ç = 0.8 ed il cerchio cli raggio 0.5.

Suggerimento. Dopo aver convertito G(s) in discreto, definito il polo


in base alla specificaa regime e fissato un valoreper lo zero, si detrmini
k usando il luogo delle radici.
Esercizio 24.Q Sia assegnato il sistema discreto descritto da
.,
:r1(k+l))
( x:i(k + 1)
= ( o.: o.o~) ( :~~!~ )+ ( ~ ) u(k}

v(k) = ( O 2 ) ( =~~:~ )
Si progetti una retroa,ione di stato tale che il aistema aottoposto ad un ingresso o gradino
si porti a regìmd in tm tempo finito (risposta deadbeat). Si roppreaentino quindi gli andamenti
delle variabili di stato d dell'uscita del sistema gm,tijìcandone gli andamenti.

Suggerimento. Si ricordi che tm sistema di tipo O con ingre:uwa


gradino, P,erandare a regime in un tempo finito deve avere tutti i poli
in z = O. Per ottenere questo risultato si approssimino questi zeri con
numeri "molto" piccoli.

Esercizio 24.10 Si scriva una MA 1'LA B function che dato un sistema di tipo O rappresentato
nello s1,aziodì stato o in termini di funzioni di trasferimento, restituisca il vettore dei guadagni
di retroaJione di stato tale che il sistema a ciclo cliiuso si porti a regime in un tempo finito. ·.
Si scrilla quindi un'altra MATLAB function, simile alla precedente, ma relativa ad un
siJtema di tipo 1.

Suggerimento. Si ricordi che un sistema di tipo 1 per avere una


risposta al gradino a regime in un tempo finito deve avere uno zero
in z = 1 oltre elle tutti i poli in z = O. Si rende quindi necessario
l 1impiegodi un controllore dinamico oltre alla retroazione di stato.
I

24.9. ESERCIZI

Esercizio 24.11 Dato il sistema discreto descritto dalle equcuioni


459
l
x 1 (k + l) = 0.2 x1(k) + 3u(k)
y(k) = x1(k)
,.,~
si progetti un controllore tale che il sistema sia di tipo l e tale che si minimizzi l 'indi ce di qualità
:!I '
'1
00 I

J = L (10oxt(k) 2
+ u(kf')
.I
I
II
.... o
'
Suggerimento. Si allarghi lo stato considere1ndoanche l'equazione
che caratterizza la presenza di un integratorein ingresso all'impianto
(si veda l'Esercizio 23,4)

dove con r(k) si è indicato l'ingresso di riferimento. Si osservi che


il sistema a ciclo aperto ha ora due ingressi (u(k) ed r(k)} , ma che
l'indice di qualità è relativo solo ad u( k) : che senso ha ciò?

Figura 24.6: Schema a ciclo chiuso.


Eeercizlo 24.12 Dato il 111lema rappN!aentato in Figuro B4,(l II determinitao i 110/o,1 di k per
cu, il aistema ~ asintoticamente atabile. Succeuiuamente per un dato k ai determini, codruendo
un opportuno ,chema S!MULINK, la risposta indiciate del aistema.

Suggerimento. Si usi il comando c2d .


Esercizi o 24.13 Dati i mtem i discreti con /urmoni di lra1J/erimento

z + 0.2 G2(z} =k z - 0 .2
G1(z) = k (z - l)(z - 0.5)' (z - l)(z - 0.5)
si detemtini il valore del guadagno k per cui i corrispondenti sistemi a ciclo chiuao ai portano
al limite di stabilitd.

Suggerimento. Si ricordi che un sistema LTI discreto è stabile se


tutti i suoi poli si trovano all'interno del cerchio di raggio unitario. Si
U.<Jino i comandi rlocus e f ind.
.... # . ....

~ ~·:·~-?:;
·:~:
. ~J. ;~;

~·~

....::
:
-:
. ..
Capitolo 25
11
I I
I

Comandi CONTROL per I

categorie

In questo capitolo sa.ranno riepilogate tutte le istruzioni di CONTROL, la maggioranza delle quali
sono state già. presentate nei precedenti capitoli. Per tale motivo esse saranno solo brevemente
commentate; per gli approfondimenti relativi al modo di utilizzo di queste funzioni si rimanda
all'help in linea e al manuale.

25.1 Modellistica

dru Genera sistema casuale discreto nello spazio di stato


dsa Genera sistema nella. forma descrittiva
dudata Recupera. da.ti da modello u discreto
tilt Genera filtro discreto per DSP
frd Genel'a. sistema. LTI a. partire da. da.ti in frequenza.
frdata Recupera dati da. modello frd '\
go1: Recupera. le proprietà modelli
ltimodels Informazioni su modelli LTI
ltiprops Informazioni su proprietà sistemi LTI
ras Genera sistema. casuale continuo nello spazio di stato
set Assegnaproprietà sistema.
SI Genera sìstema nello spazio di stato
sadata
totaldolay
Recupera dati da. modello ss
Ritardo ingresso e uscita. l.
tf Genera sistema con funzione di trasferimento
tfdata. Recupera dati da. modello tf
zpk Genera sistema con zeri, poli e guadagno
zpkdata Recupera dati da modello zpk
I

I
I\
...
f.1
.~~~
• ! ·-~~,;;.~ ·,; 4;
< ,-3 t rf.,j;• I
• :~.; •• 1'

I
462 CAPITOLO 25. COMANDI CONTROL PER CATEGORIE ;
I
'
25.2 Caratteristiche dei modelli &·,•• l,
-;-'ft1_:-f
, ,>
:
... '
•%,;{!ii •. i
:,t , .'> I

class Tipo di modello (tf, zpk , ss o frd) :·.


r_
"~;:· 1;

.I
hasdelay Vero se il sistema ha ritardo .\.:,:~--~#,..
'"" ) .~
isa Vero se il sist ema è del tipo specificato
~1f1·t~!;..i
isct Vero se il sistema è contin uo '1~
::.·!l'. ...i
ìsdt Vero se il sistema è discreto . ;,-•~~ri
isempty Vero se il modello è vuoto
1•
~'~ ,\-.I
,..
isproper Vero se il modello è proprio .t •;. r, , I
iuiso Vero se il sistema. è SISO l~ot1a.• •--\ I
:•.. -,-•. J , I
1

ndims Mostra. il numero delle dime nsion i del modello/array I


size Mostra le dimensioni di uscite /ing ressi/a.rray

I
i
25.3 Conversione dei modelli •i%
,t ~'-J
i • .
c2d Da conti nuo a di screto .:;.1{f~';
: .,. l"!.,,_,,-;
chgunita Converte le unità per modelli 1'rd ' ,J_.',~ ~l
i);, ,c i'b j,;..!-'.-
d2c Da conti nuo a discreto lt, '\1'·_.
g
d2d Modifica il periodo di campionamento
delay2z Converte ritardi in modelli dis creti o frd
frd Converte in modello su dati frequenziali - ~.'
.........
pad1
ruhap,
Appro88lmazioni di Padé del ritardo
Cambia le. forma di un a.rray LTI
...
rnidue
98
Calcola. i residui
Converte in modello ne llo spa zio di stato
.
t1' Co nverte in modello con funzione di tras ferimento
zpk ·:"'f--\ ...,
Co nverte in mode llo con zeri, poli e guadagno •"<:
'•tu ~
~r:it~
:"·-;~
~
';·:~~
,,i;:. (:.,
~·:,,1~
'• \ 1:1'!
.
·::;.Jt
,,~.;...
25.4 Riduzione dei modelli •t·•~if
':.....
;f ::"\-~~~
.,. .... •~j•
balr eal D continuo a disc reto
minreal R..ppresentazione minima con cance llazi one poli/zeri
;~:~,;~:'!~
:-:~-
.:;! ;.J~•• l
} ..,.
modred
sminr eal
Elimina sta.ti
Calcola riduzione di modello strutturata '\~f
•J · ·'I_,-_,
~ -,;':
• ,'11; ~ :,";?
4 ,,ir-~
i.:.;1
,,.
.I
A;''·

'
25.5 Rappresentazioni nello spazio di stato
canon Rap presentaz ione ca nonica
ctrb Matrice di controllabilità
ctrbf Forma canonica di controllabilità
gram. Gr&mlanldi controllabllltà ed osservabilità . •. ~ii, •
obev Matrice di osservabllltà ·,1:
v
ob1vf Forme.canonica di osaer vab llità ,\'f.i
~ t
'.,
-~'.,A.
1'~
88291 'I\-a.sfor1na2ionedi stato ~-.:-:t
. ,q ,
ubal Rappresentazione bilanciata nello spazio di stato ·.,: i
.. -:J,~iif'-.1,
-rw
.
.. ., .fA!,l'1,
~ Il!• . ,

'
25.6. CARATTERISTICHE DEI !vIODELLI 463

25.6 Caratteristiche dei modelli I

I
,I
1,

Il
!r
damp Frequenze naturali e coefficienti di smorzamento 'I
dcgain Guadagno statico
covar Covarianza della risposta a rumore bianco
d1ort Ordinnmento per ampi~za
esort Ordinamento per parte reale
norm Norma di modelli LTI
pole, eig Poli
p2map Rappresentazione di poli e zeri
roota Radici di polinomio
zero Zeri

25.7 Costruzione dei modelli

append Appende modelli in forma diagonale a blocchi


aug1tat1 Aumenta uscita appendendo otatl
con.nect Connette sistemi
conv Convoluzione di polinomi
drmodel, drss Genera modelli discreti random
feedback Connessione feedback di modelli
1ft Connessione feedback LFT di sistemi
ord2 Genera modello del secondo ordine
pade Approssimazione di Padé
parallel Connessione parallelo
rmodel, ras Genera modelli continui random
series Connessione serie
stack Assembla modelli LTI in un array

25.8 Risposta nel tempo

filter Filtro discreto SISO


gensig Genera un segnale
impulu Risposta lmpulaiva
initial 8voluzlone libere.
11111 Simulazione sietme. LTI
ltiviev Tool grafico per la risposta nel tempo
atep Risposta al gradino
J;l.• 1• •
•,-1'1
-\'r
-~;~~
., :::t•-1
••. •
,,_.',i.,

~
:,.!~~ -

464 CAPITOLO 25. COMANDI CONTROL PER CATEGORIE . ~i::~:


e..·.
I
- (;•;·~
<11'1, ....
~"'/:,_
..·:'~~-
'.jr. ·:- ' i

25.9 Risposta in frequenza .,.:,rt',~--


-
·.::·~;:i:;~
ì
.,
bode Diagrammi di Bode
evalfr Risposta a.cl una frequenza
:treqreap Risposta a diverse frequenze
lin11pace Vettore di frequenze spaziate lineramente :,.._....
,'...t·
• ir-e,.
\f'Jf ,.
"t ·"'\:.'-..,_
!tl-
logspace Vettore dì frequenze spaziate con scala logaritmica 1 :... \_r:;.:f
· ~.., - t;7....1-
ltiview Tool grafico per la risposta in frequenza ··:¾'
'.l>
·'t',~
mugin
ngrid
Margini di fase e di ampiezza
Griglia sui diagrammi di Nichols
.i~{~
nichola Diagrammi di Nichols
nyquilt Diagrammi di Nyquist • •", ( ?-,
pZl!lap Mappa di poli e zel'i SL:'1;M1
,~·J ·
.7'\_ ◄,_'4',i
rlocu1 Luogo delle radici ~1'tV(-~
rloctind Calcola guadagno e poli sul luogo delle radici :·';}
~;%1
.;,{~~~:
rltool Tool grafico per progetto controllore con luogo delle radici .-.._.:~&~..~
"~
sg .rid Griglia sul piano complesso } ·.
sigma Rappre sentazione valori singol ari -Ì

zgrid Griglia sul piano complesso per sistemi discreti


..~\·:

25.10 Allocazione dei poli


aclter Allocazione dei poli per sistemi SISO
place Allocazione dei poli per sistemi MIMO ... ..~ .-:
estim Stimatore di stato dato il guadagno
ng Regolatore con osservatore e rt!trouione di stato
rltool Tool grafico per progetto controllore con luogo delle radici ...,.. \:,
e,· r.·~..~
. .,~rt\
::i•
·~ ... ~· Jf

25.11 Progetto LQG I V

"./-'=t
·t,...it,11,/
fYJ~f'

• ·~J-••
_,:~t.l\
.,_"'t
'j ·
lqr Guadagno LQ per sistemi continui .. ,,·;i
dlqr Guadagno LQ per sistemi discreti •1Il/")_.~·
:.r{,tfa---~
lqry Guadagno LQ con pesi sull'uscita .~.~ ..{i~
lqrd Guadagno LQ discreto per modelli continui .~;,:.~
·
kalman Filtro di Kaiman . ,:t,
;i~fi'l.
.,_,
kal111d Filtro di I<alman discreto per sistemi continui 1,!ì'"-~ ,:""
1-r,
.,lj,,,•I.,...
lqgreg Regolatore LQG dato guadagno LQ e filtro di Kaiman · 1.:1'f1.I
,~~ •• #~
• '6,,'i»•
.,4~~\~tr
. 1,'-~•.r
25.12 Equazioni di Lyapunov e Riccati 1 J1,r•'i':X

~:~}f
ca.re Equazione algebrica continua di Riccati
dare Equazione algebrico. dìscreta di Ricca.ti .-,
lyap Equazio ne di Lyapunov continua
dlyap Equazione di Lyapunov discreta '"j :· i~
,,r-\
''')/.I;.;
. a.,,:.., 1,

•'
~.:r::l
:vt
--)~ •f
~~ s·l~
..~}_1'Y.{
J:~~i
;.......
tF!f-
l:.!<~-
-~~
~11;;
·ti~.' :
-'~
r.l'ij·-
~!
--
-}
·1!• !
~ Ml ·,;, /{

:t
!,r ~·;.}
I'
ilIfi
j :~: ,;
'
I

l I
I
,,

Parte IV
! ;
I
,· 'i'!:.'·•

l
i t·
Appendici
;
•j
1

I
I
\

\.

I. ·.I
i

l
I

I
lI
..l
I.
l
'I
r
'\t- · ~
I

. /

•!I,
••-:1/V·J
• r, .a;.
•;i:-:
t.~

..~}ilu'
.,.,:
1 ...
•r~,:: ' ,(, q

vi<
•.;'',
+.)•
\ T;; ò
.. _.. 1.!I- ' ~,
~

.,/
••-I
·:
•.,.

~ 4~: ;J
Appendice A

Funzioni di grafica avanzate

A .1 Oggetti gr afici in MATLA B


Nel Capitolo 5 ci siamo occupati delle funzioni di alto livello che permettono di gestire in maniera
sufficientemente semplice la grafica in MATLAB. Abbiamo inoltre fatto cenno ad una serie di
opzioni che definivano elementi di dettaglio degli oggetti grafici traccia.ti: stile di linea a di
punto, posizionamento di più sottograficl (subplot) su un'unica finestra e coel via, Queste opzioni
rientrano in realtà in un discorso più ampio, che riguarda le proprietà degli oggeUi grafici. infatti
in MATLAB ogni elemento grafico tracciato è in realtà un oggetto gmfico, con tutte le proprietà
tipiche rlegli oggetti (vedi Capitolo 8). Per chiarire il concetto di oggetto grafico, partiamo da
un esempio. Quando eseguiamo un'istruzione di plot, MATLAB esegue le seguenti operazioni:
1. Crea una finestra, detta figure.
2. All'interno della finestra crea un sistema. di assi, detto axea (da non confondersi con il
comando axis).
3. All'interno del sistema di assi traccia un insieme di linee, dette ovviamente lina, con cui
viene disegnata la curva da tracciare.
Se ora consideriamo questo insieme di operazioni ordinate non solo cronologicamente, ma
anche gerarchicamente, otteniamo che la figure ha per "figlio" a.xes, che a sua volta ha per
figlio line, o, ribaltando il discorso, line ha per genitore a.xes, che a sua volta discende da
figure. Si noti che la corrispondenza fra genitore e figli è uno-a-molti, ovvero ogni oggetto ha
un unico genitore, ma può avere più figli; si capisce ora come opera il comando aubplot (cfr,
Paragrafo 5.5): e.ssegna.alla stessa figure più figli di tipo axH, ognuno dei quali individua. una
sottofinestra grafica..
Gli enti appena descritti sono appunto ccoggetti grafici", e sono quindi caratterizzati da un
insieme di proprietà.; ad esempio una figure ha, fra gli altri, le seguenti proprietà:
• Posizione della figura sulla pagina
• Dimensione della pagina su cui si effettua la stampa
• Orientamento della figura (in orizzontale o verticale)
Gli attributi degli oggetti possono essere alterati o elencatii a questo scopo è necessario prima
di tutto individuare l'oggetto in questione. Gli oggetti grafici in MATLAB sono individuati
da. Indici numerici, detti handle o puntatori: ad esempio il numero della figure ne definisce il
puntatore: 1 per la prima figura, 2 per la seconda e cosi via. Quindi una operazione compiuta. sulla
prima finestra si traduce in una manipolazione compiuta sull'oggetto individuato dal puntatore
468 APPENDICE A. FUNZIONI DI GRAFICA AVANZATE

1. La funzione gcf (Get Current Figure) restituisce il puntatore della figura corrente. Per gli ..... .
oggetti di tipo axes c'è un comando analogo: gca. Per oggetti di livello gerarchico inferiore esiste ,_ .• :T•
.,: ,...
! ·r.~
...
,. ,#

il comando gcoj tuttavia, questo comando agisce solo sull'oggetto corrente, ma se abbiamo già
trl:l.Cciato un insieme di curve, come posBiamo Individuare l'handle della prima, e.d esempio per
. ..; ;
+ .. : :

tnaformarla In una. linea tratteggiata? In realtà fra gli attributi degli oggetti grafici abbiamo :,;:{'-·
.....
anche Children, che è un elenco del 11figlì11 dell'oggetto In questione, e Par1nt 1 che, dualmente,
ne fornisce il (puntatore al} genitore. Ricordando quindi che le linee sono figlie dell'axes corrente,
possiamo essere certi dì rintracciarne il puntatore fra i Children dell'axes corrente. A questo
scopo usiamo il comando get, che permette di leggere (e, più in generale, rende disponib .ile)"i~
valore di un attributo. La sua sintassi è

p•g1t(puntatore,'N0~1Attributo 1
);
-"1r
• ,1
e '
che memoriua nella variabile p il valore dell'attributo NomtAttributo relativo alJ>oggetto lnd17
viduato dal puntatore puntatore. Nel nostro caso quindi, l'elenco dei figli dell'a.'<es corrente si
ottiene con

p•get(gca,'Childreu');

Un oggetto può essere cancellato se è disponibile il suo puntatore con il comando

delete(puntatore)

Un esempio può servire ad acquistare familiarità con queste istruzioni. Si supponga di iniziare
una sessione MATLAB con le seguenti istruzioni ,.·,
,:
t•0:.1:10;
t•t' i
Y"'Sin(t);
plot(t.y) : ··..

Ora, sulla finestra. grafica, clicchiamo sulla curva, ed eseguendo pl•gco otteniamo il puntatore
• I.
alla linea corrente. In alternativa, potremmo digitare pa=gca per ottenere il puntatore a.ll'axes
corrente (ch e avremmo potuto ottenere con l'istruzione pa'"get(gct, • Cnildxen') ), quindi con
pl•get(pa, • Cnildren') ricavare il puntatore a.Ila llnen che definisce ìl grafico dolla funzione
seno. Per modificare questo oggetto, usiamo il comando eet, duale di get:
. •...
- ··..
set(pl, 'LineStyle','-.')

traccia la linea a tratto-punto, fornendo lo stesso risultato che avremmo ottenuto usando il
comando plot ( t, y, • - . •). In genera.le la sintassi del comando set è

set(puntatoro,'NomeAttributo',NuovoValore})

Si noti che l'istruzione get (puntatore) fornisce un elenco degli attribuii dell'oggetto individu-
ato dal puntatore e i relativi valori, mentre aet(puntaton) dà l'elenco dei va.lori assegnabili
a.gli attributi. Si noti inoltre che i nomi degli attributi possono essere scritti indifferentemente
..,
in maiuscolo o minuscolo, sebbene la forma usata in questa appendice e nella successiva sia
preferibile perché ne migliora la leggibilità .
Continuando il nostro esempio, ora digitiamo:

yl•cos(t);
plot(t,(y y1])
A.1. OGGETTI GRAFICI IN .MATLAB 469

Questa volta eseguendo pl•get (pa, •Children'), osserviamo che ora pl è un vettore con
due elementi, i puntatori alle due curve. Procedendo in questo modo è chiaro che il numero ùi
risultati forniti dal! 'istruzione get relativa alla proprietà Cbildren può crescere enormemente,
e può presentarsi il problema di capire ogni puntat ore a che tipo di oggetto si riferisce. La
risposta a questo Interrogativo è fornita. dalla proprieià Typ•, definita su tutti gli oggettt , e che

~,
ne specifica il tipo. Nell'esempio considerato, g•t (pl ( 1) , 'Type ') fornisce come risultato l in• 1
mentre get(pa, 'Typ1') ha come risultato axu. Per Inciso, molte primitive grafiche di alto livello I
possono restituire i puntatori agli oggetti già. in fase di creazione dell'oggetto stesso: ad esempio
'
'
..
pl-plot(t,[y yt])

disegna le due curve e ne rest itui sce i puntatori nel vettore pl.
Un comando molto utile nella ricerca di un puntatore è tindobj, che restituisce il puntatore
ad un oggetto grafico caratteriznto da una certa proprietà. Ad esempio,

pl•tindobj('Type','Line'):

restituisce di nuovo i puntatori alle due curve viste in precedenza, dopo aver cercato fra tutti gli
oggetti grafici definiti correntemente. Talvolta però può essere utile o necessario specifi care in
che punto della. gerarchia degli oggetti iniziare la ricerca. Ad esempiu, ridisegna.mo le due cu rve,
selezioniamone una e con set (geo, 'LineStyle • , •- . •) alteriamole lo stile di tracciamento. Ora,
digitiamo il comando

delete(tindobj{'LineStyle' ,'-') );

Cosa succede? Ci saremmo aspetta.ti di aver cancellato solo la curva a. tratto continuo , ma
scopriamo che sulla finestra non è rim a.sto più nulla. Infatti, fra gli oggetti a linea. continua
abbia.mo anc he gli axes, che sono stati inesorabilmente cancella.ti da l comando. Per evitare
questo inconveniente, dobbiamo dire a ti11dobj di iniziare la ricerca solo a partire dai figli degli
assi correnti {il che ha per inciso il vantaggi o di rendere più spedita la. ricerca), quindi il coma.odo
corretto è:

delete(tindobj(got(gca,'Children'),'LineStyle 1
1
1
~ 1 ))

In conclus ione, dovrebbe essere chiaro che se si prevede di modificare oggetti grafici è buona.
abitudine memorizzarne l'handle in faae di creazione, evitando poi di doverli rintraccia.re in corso
d'op era. Ultima. osservazione: disponendo del puntatore ad un oggetto , possiamo memorizzare
le sue propietà in una struttura. tramite il comando get. Ad esempio, digitando b:aplot(t,y}
traccia.mo il grafico e memorizziamo in h la sua handle. Ora, scrivendo a•get (h) avremo creato
una struttura a i cui campi hanno memorizzate le proprietà della curva, quindi potremo a.d
esempio tracciare due curve con lo stesso colore (anche senza indicarlo esplicitamente) con

h•plot(t,y):
a"get(b);
hold on;
plot(t,y1,'color',a.Color);

Sì faccia ovviamente attenzione a.I fatto che mentre i nomi delle proprietà possono essere
abbreviati, e quindi scrivere 'Color' o 'c:olor' o 'col' è irrilevante, a.Color deve essere scritio
esattamente coel, trattandosi del nome di un campo.
A questo punto possiamo iniziare un'analisi particolareggiata degli oggetti grafici.
MATLAB definisce dieci oggetti grafici, che sono di seguito elencati insieme alle funzioni ad
alto liveJlo che li creano:
1. Radice: è la radice della gerarch ia. e corrisponde allo schermo del computer.
2. Figure: come già detto è una si ngola finestra. Non c'è limite a.I numero di finestre apribili ,
che sono tutte figlie <lella radice. Sono create con la funzione figure.
470 APPENDICE A. FUNZIONI DI GRAFICA AVANZATE

3. Axes: anche di questo oggetto è già st ato fatt o ceono in precedenza , è una parte della
finestra destinata a contenere grafici. Ha per genitore figure ed è creato con la funzione ,
axes.
4 . Line : si tratta delle primitive grafiche per tracciare linee in due e tre dimensioni. Sono'
figlie di axes . Sono create con diversi comandi , fra cui plot, plot3, contour e contour3,l
' ' .1;
5. Llght : sono oggetti che definiscono le sorgenti di luce di altri oggetti; di per sé non sono
visibili, ma il loro effetto lo è. ··'
:. 11.r{
6. Pa.tch: sono poligoni riempiti. Loro genitore è axes. Sono crea.te con i comandi tp1· e
fill3, non descritti in questo testo.
7. Surface: cosi come line definisce segmenti congiungenti due punti e serve da unità d~
base per il tracciamento di curve, gli oggetti di tipo eurface definiscono quadrilateri ..
._ , .)

elementari con vertici in quattro punti de.ti. Sono Agli di axe1 e sono crea.ti con i comandi
della fa.miglia aurf I meah e pcolor.
8. Image: sono il risultato di 888ociazioni di elementi di una matrice con elementi della
mappa di colore corrente. Sono figli di a .xes e sono creat i con la funzione image. •i.,

9. Text: si tratta delle stringhe di caratteri inserite nei grafici . Sono figlie di axes. ··•_;,\
•• ,1

10. Rectt!lngle: nonostante ciò che suggerisce il nome non si tratta solo di rettangoli, ma di
oggettì bidimensionali la cui forma spazia da un rettangolo a un'ellissi. .i•:,

11. Ulcontrol: sono controlli cbe eseguono una azione predefinita quando selezionati. Per il
loro uso si consulti l' Appendice B. Sono figli di figure .
12. Ulmenu: sono oggetti che permettono di creare dei menu a tendine in ambito grafico.
Per il loro ueo ei consulti l'Appendice B. Sono figli di figure. . :➔
13. U lcontextmenu : sono menu di contesto che posaono essere associati a singoli oggetti'
grafici. ...... ,t
'
La gerar chia degli oggetti è ricapitolata in Figura A.l. Si osservi che la gera.rcl1ia risulta. utile.
eia per eliminare oggetti (eliminando un genitore si eliminano automatica.mente tutti i figli) che . ,,
per consentire al figli di ereditare proprietà: ad eeempio la. posizione di tutti i figli di axea è ' , I
') , '
determinata da.I sistema di coordinate stabilito dal loro genitore.
Esistono alcuni &ttl'ibuti comuni a tutti gli oggetti grafici, i cui principe.li sono

Interruptible UserData Visible ': .. •:


• I

Type Clipping Parent .. •ti ·, '".


Children SuttonDownFcn CreateFc:n ...-.:
;:.-.
DeleteFcn Selected Tag .-~..--
Gli attributi Type, Parent e Children sono stati già discussi in precedenza . L'attributo
Vhible controlla la vieualizze.zione degli oggetti grafici : il valore I o!f' at.\ribuito a questo attrib-
uto Impedisce la visualizzazi one del corrispondente ogge\to. Di Clipping si parlerà brevemente
..
I _.:..•
. .-ì••
,.
discutendo le proprietà. degli oggetti di tipo Une . Tag è un 'etichetta definita dal l' utente e asseg- ..... t:...
nata all'oggetto . CruteFc:n e D•leteFcn sono callbacks (sott oprogrammi) eseguiti all'atto della
creazione e della distruzione dell'oggetto; cosl, ButtonDownFcn è una callba.ck attivata dalla. pres-
sione del tasto del mouse quando il cursore è sull'oggetto grafico. Infine Interruptible e UaerData
saranno presentati nell'Appendice B. Analizziamo ora i singoli oggetti grafici, elencandone le
propr iettL ·•

..'
A.2 Radice (Root)
·,•....
I •

I comandi descritti in questa sezione si riferiscono alla gestione dell'oggetto radice,


ovvero lo schermo, e sono usati molto rara.mente. La maggior parte degli attributi

·1
t
A.2. RADICE (ROOT) 471 ,I
:

Radice
'
i, .I

figure
• I
•I

textI~hlI rectangle
surtacelinespatch'1mage
Figura A.1: Gerarchia degli oggett i grafici.

dello schermo non è alterabile. e i rimanenti possono essere modificati più semplice" .I
mente usando comandi ad alto livello. Se ne riporta comunque un elenco parziale,
ricordando che l'elenco completo può essere ottenuto con l'istruzione gat (O) (si
I
noti che il valore del puntatore alla radice è O). !
I
II
• CurrentFigure è il puntatore alla figure corrente.

• Diary e DiaryFile specificano se attivare la stampa. su file delle operazioni


della sessione in corso ed eventualmente su quale file stampare.

• Echo definisce lo stato di abilitazione del comando echo (si veda pag. 131)
che visualizza le istruzioni durante l'esecuzione di un M-file.

• Format e FormatSpacing definiscono il formato di rappresentazione sullo


schermo dei dati secondo la tabella di pag. 19 e la spaziatura nei due modi
compact/looee.
• PointerWindow ·restituisce il puntatore della finestra (figure) che contiene il
cursore del mouse. '·
• Units definisce le unità di misura del sistema di coordinate corrente. In ogni
caso l'angolo in basso ~ sinistra definisce l'origine del sistema. Le possibili
scelte sono

- pixels
- normalized, in cui l'angolo in alto a destra ha coordinate (1, 1)
- inches

1
472 APPENDICE A. FUNZIONI DI GRAFICA AVANZATE.-

centimeters
pointe

• PointerLocation restituisce le coordinate correnti del mouse secondo le·


unità di misura definite con il comando precedente.

• ScreenSize dà le dimensioni dello schermo secondo le stesse unità.

Per quanto riguarda le proprietà PointerLocation e PointerWindow si provi il


seguente semplice script file: ,:

while 1
home
1
smsprintf('Coordinate: 'l.d 'l.d, Finestra, 'l.d 1
1 ••• ..,,. .''
[get(0,'PointerLocation'),get(0,'PointerWindow')] '):
disp(s);
end
(il numero 1 al terzo rigo serve solo a forzare una svuotamento del buffer).

.
....
A.3 Figure
li comando t'igure come già detto crea o rende attiva una finestra grafica. Usato nella form!!f
p•Ugure definisce una nuova finestra. e ne memorizza il puntatore nella variabìle p. Abbiamo già.
parlato del comando set per alterare gli attributi di un oggetto, ma è anc:he possibile definirli in
fase di creazione dello finestra stessa con il com ando

p•tigure('NomeAttributo',Valor•Attributo, , .. )

Gli attribut i più interessanti sono quelli che permettono di definire i colori della finestra., la
mappa di colore corrente e la. posizione del disegno su carta. Ecco quindi un elenco parziale degli
attr ibuti degli oggetti figure
• Color definisce il colore di sfondo della finestra.. La definizione dei colori avviene secondo
le regole date a pag. 96.
• Colormap definisce la mapp& di colore attiva. Equlv&Je al comando colormap visto a
pag. 06.
• Uni u definisce il sistema di coordinate per la finestra. I poss ibili sistemi di coordinate
sono quelli elencati al paragrafo precedente.
• Pointer definisce la forma de l cursore del mouse all 'int.erno della finestra. Possibili valori
sono:

• anov I
è il valore di default, la freccia.; ..........·
• c:roubair' una crocei
1
11atch' una clessidra.i
• cron' una doppia croce;
'topl', 'topr', 'botl', 1
botr 1
freccie oblique;
'circl• • una. circonfe renza;
A.3. FIGURE 473

'fleur • un fiocco di neve;


- 'custom' permette di crearsi un cursore personalizzato, <lefìnendo una matrice P
16 x 16 e poi usando il comando
aet(gcf,'Pointer','cuatom' ,'PointerShapeCData',P, ...
'Poin~erShapeHotSpot',v):
dove v è un vettore di due coordinate che definisce l'hot spot (il punto attivo) del
cursore.
• CurrantPoint restituisce le coordinate dell'ultimo punto in cui il pulsante del mouse era
stato schiacciato o rilasciato. L'unità di misura. delle coordinate è fissata. dall'attributo
Unita. Il puntatore all'oggetto le cui coordinate sono quelle del punto corrente è fornito
da CurrentObject.
• He.nuBa.r questa proprietà., il cui valore può essere 'figure' o 'none' abilita o disabilita
il menu a tendine. La proprietà. Name, invece, definisce il nome della finestra, ovvero
la stringa di caratteri che apparirà dopo la scritta Figure No. n ; NumberTi th abilita o
disabilita l'intestazione Figure No.; i valori che può assumere sono on e off.
• InvertHa.rdcopy ha il valore 'on' o 'off •; i grafici normalmente appaiono su sfondo nero
sullo schermo, ma bianco in fase di stampa; selezionando il valore 'off • anche in stampa
lo sfondo è nero.
• Position definisce la posizione sullo schermo della finestra. Il suo valore è un vettore
di quattro elementi contenente le due coordinate del punto in b8.Bso a sinistra, a. partire
dall'angolo in basso a sinistra dello schermo del computer, l'ampiezza. e l'altezza. ctella
finestra. Tutti questi valori sono misurati secondo il valore corrente di Uni t1 .
• La stampa della figura su carta è definita dai seguenti attributi: PaperType definisce il
tipo di foglio, ovvero
•a4letter • formato A4;
•usletter• formato lettera USA;
- 'ualegal' formato legai.
PaperUniu definisce le unità di misura del foglio, PaperSize, è un attributo non modifica•
bile e fornisce le misure del foglio di tipo PaparTypenelle unità Pa.perUnits. PaperPoaition
è come Poaition, ma relativo al foglio; infine PaperOrienta.tion può assumere i valori
'portrai t' e 'la.ndscape' che stampano la figura in orizzontale o verticale rispettiva-
mente.
• Rea ize abilita e disabilita la possibilità di cambiare le dimensioni di una fì nestra.
• CurrentAxes restituisce il puntatore all'a.xes corrente, peraltro ottenibile con
gca.
• Render definisce una strategia di trattamento dei dati grafi ci p er la visualiz-
zazione. L'argomento è abbastanza specialistico, ed esula ab bondantemente
dall'ottica di questo libro. L'unica cosa di interesse per noi è che il render
deve essere fissato a OpenGL per permettere l'uso del1a trasparenza. In o--
gni caso} la cosa migliore da farsi è fissare l'attributo RenderMode al valore
'auto' tche tra l'altro è il valore di default), lasciando al MATLAB la scelta
c}e!rendering.
Per CO(i~ludere il paragrafo, si provi il seguente programma
1igure('HenuBar','none' ,'Name' ,'Alberto Cavallo', ...
'Number', 'off') i
text(l,1,'Hello, HATLAB!');axis((O 3 O 2)); uis off
Lo so che non è molto originale, ma non sono riuscito a resistere alla tentazione ...
474 APPENDICE A. FUNZIONI DI GRAFICA AVANZATE

1 A.4 Axes
•, .
11-at.tando oggetti di tipo axes ci addentriamo sempre di più nella costruzione del grafico. Ab- ,• .' "'
biamo inizialmente visto che la radice sostanzialmente controlla lo schermo del computer, e
flgure la struttura e la dimensione della finestra in cui appariranno i gra.fici, sia su vijieo che
su carta. Gli oggetti a.xes iniziano a riguardare plù eia vicino il grafico: infatti controllano la
posizione dei grafici nell'ambito delle finestre e definiscono gli assi, sia. per grafici bidimensionali
che tridimensionali. Inoltre , per questi ultimi, definiscono anche il punto di vista.
La defiuizione dì un oggetto di tipo axes può avvenire con il comando ues, che funziona in '''' -
modo analngo a tigure , e può essere quindi impiegato nelle tre forme \_~
•: !~~',

p=axes
axes(p)
p=aies('HomeAttributo',ValoreAttributo , . .. )

Gli attributi di principale- interesse sono orientati alle seguenti proprietà

.. : ·
' •t .... " -n,~:~;;~.li.:!.
" ,,ijl;~ ; v.hl,,,tti14 ·" ...... ' •. ""'" ",;{ ~ ;;- , - -~ ~ -,:.:

~~: '~~-~~~~u~ '.~<:.:a~-~~~:.'.


~ •v;~!i,"-i-'lf!~..;...-,,,,,, 11:3,1f ,¼~i:m:
~

r[::··. ' ,,o,


""~ .-~·- 0.9 ______________ ,..

p(JJ
::,
07
.,. \•.., .
,
o.e

,..,.....
~
05
o•
0.3
, .{~'·.=~
0.2
\
01
,<I)

o 0.2 04 • , 0.6 O&


.., i i ' ,.
/::~ p(JJ ! _.;;~·

Figura A.2: La proprietà Position.


'\
• L11posizione del grafico all'interno della finestre. è definita da Podtion, che ha per valore
un vettore di quattro elementi, (p1 ,p2,p3,p4}, (ai vede. la Figure. A.2), come visto anche
, ',.
nel pru·agrafoprecedente, misurato nelle unità di mieun~definite con Unita; il valoredi
default delle unità di misura è 'norrna.lizad', in modo che la misura aia relativa a. quella
della finestra. È inoltre possibile definire rapporti <li aspetto sia. per gli assi che per i loro
valori con l'a ttributo AapectRatio. Il suo valore è un vettore di due elementi: con il primo
si definisce il rapporto tra la lunghezza dell'asse verticale e quello orizzontale, mentre il
secondo definisce la lunghezza delle unità di misura dell'asse verticale rispetto a quello ·-•.
orizzonta.le: ad esempio, con -: : ·;
:ti~'
, ...
•~t(gea,'AspectRa.tio',(4/3 1])
' ..
gli assi del grafico contenuto nell'a.xes corrente hanno un rapporto di dimensioni 4:3, . ;,
che è il rapporto dello schermo video, e dimens ioni delle unità di misura uguali sui due ..•
'\;•:~.,·.
as.,i; si provi l'uso di questa istruzione sul grafico del seno disegnato in precedenza, e si
provi anche set (gca, 'AspectRatio- • , (1 1]), che dà una finestra quadrata. {è l'a.na.logo di
:~: ~~:
ui1('aquare•)).
A.4. AXES

• NextPlot può assumere i va.lori 'nev', 'add' o 'replace'


475

e definisce il modo in cui sarà


f

•'1
il

inlerpretato un successivo plot. Infatti il valore 'replace' (che è quello di default) fa sì


che il successivo grafico cancelli quello corrente e ne prenda. il posto, mentre 'add' aggiunge
il nuovo grafico nell'axes corrente, analogamente a quanto avviene con l'istruzione hold. Il
valore 1 ne11', di uso meno frequente , aggiunge un nuovo oggetto axes alla. figure corrente,
senza però alterare la posizione del grafico precedente: in questo modo i due grafici sono
sovrapposti pur appartenendo a diversi a.x.es.
• La gestione del colore all'interno di un oggetto di tipo axes è ottenuta con quattro at-
tributi. Il colore di sfondo del grnfico si definisce con l'attributo Color (si noti che lo
stesso attributo riferito all 'oggetto figure definisce il colore dell'intera finestra). Per grafi-
ci bidimensionali, ColorOrder definisce un ordine di colori da usare per linee successive.
L'ordine di default è quello indicato in Tabella 5.1 a pag. 75. Come ordine è possibile
usa.re una mappa. di colori, come si vede dal seguente esempio:
t=(O: .l:10)';
y•ain(t);
Y•(J:
for i•1:64, Ya(Y sin(i/64•t)J;end
plot(t,y):
set(gca,'ColorOrder',cool,'NextPlot','add');
plot(t,Y}
si noti che il primo grafico è stato tracciato per definire i fattori di scala. (pe raltro in
questo c88o facilmente individua.bili), e che inoltre in assenze. del valore 'add' per 1'aUrib-
uto 'HextPlot' Il successivo comando plot avrebbe uento Il valore di default 'replac• 1 1
creando un nuovo oggetto axes e cancellando la definizione di ordinamento del colori.
Per superfici trldimenslono.11 si usano due attributi pel' la cle.flnizione degli assi di colori
discussi a pag. 97; 'CLim' definisce i limiti degli assi, analoga.mente al comando caxi1,
mentre CLimHode definisce se la scala.tura. degli assi è compiuta in modo da adattarsi ai
valori estremi delle grandezze rappresentate.
• I grafici bidimensionali tracciati con plot sono racchiur;i in un rettnngolo; per eliminarlo
e lascia re I soli assi cartesiani si può aUribuire il valore I off' ali 'att ributo Box. Lo stesso
attributo per grafici tridimensionali serve a Includere (se settato e. 'on') la superficie
rappresentata in un parallelepipedo .
• La griglia.tura è tracciata. con il comnndo grid, ma può essere alterata con l'nttributo
GridLineStyle: si provi a tracciare un grafico, definire una griglia e poi digitare
aet(gca,'GridLineStyle', '-','LineWidth',5)
L'attributo LineWidth definisce lo spessore delle linee continue presenti nell'axes corrente,
Incluso il Box che racchiude il disegno. Si consulti l'ultimo punto di questo paragrnfo per
l'eliminazione di griglia.ture in direzioni particolari.
• Leto.cche sugli assi hanno uno.lunghezza definita dall'att.rlbuto TickLength e una direzione
definita da TickDir: se questo attributo assume il valore di defa.uh 'in' le Lacche sono
dirette dal bordo degli assi verso l'interno del grafico, mentre un valore I out' definisce
un orientamento opposto. li controllo indipendente delle tacche sui diversi assi è descritto
nell'ultimo punto di questo paragrafo.
• L'attributo View definisce il punto di vista, in ma.nieré:\analoga a quanto visto a.I para-
grafo 5.7 per il comando viev.
• I caratteri che appaiono in un grafico possono essere
1. titolo
2. intestazioni degli assi
3. testi e commenti
476 A.PPENDICE.4. FUNZIONI DI GRAFICA. .ilV:4.NZATE

4. va.lori numerici (o alfabetici, si veda il punto successivo) sugli assi

Di questi solo gli ultimi sono definiti come proprietà del sistema di assi, mentre gli altri
sono a loro volta oggetti di tipo text, e come tali sono figli dcli 'axes corrente (si veda la
Figura A.l). I valori sugli assi sono tracciati con un tipo di carattere definito dall'attributo
1
FontName 1 , il cui valore è uno qualsiasi dei font definiti dalla corrente configurazione
Windows, dimensione definita con FontSiu, spessore seleiionato con FontWeigbt, che pub
assumere i valori ' light 1 , 'normal' , 'demi I o 'bold •; è possibile inoltre tracciare caratteri
sottolineati o "cancellati" (ovvero attraversati da una linea orizzontale) assegnando il
valore •on• agli attributi Fontthlderline e FontSt rikeThrough rispettivamente; infine i
caratteri possono essere più o meno inclinati assegnando a FonUngle uno dei tre valori
'normal •, 'italic' o 'oblique'.
I puntatori a testi e commenti vanno quindi ricercati nell'attributo Children, il puntatore
al titolo è registrato nell'attributo Titl•i delle intestazioni degli assi si parlerà nel prossimo
punto, nell'ambito della definizione delle proprietà degli assi.
• I tre o.asi sono controllati in maniera indipendente con una eel'ie <li attributi che hanno
tutti lo stesso significato ; per questo ci limitiamo alla. sola des crizione degli attributi che
controllano l' asse ~, essend o immediata l'estensione delle operazioni descritte agli assi y
e z. XColor definisce il colore dell'asse x; Wir definisce la direzione dell'asse: 'reverse •
dà valori cres centi su ll 'asse da sinistra verso destra, 'norn.al' è il valore di default. La
grig liatura a. partire dall'asse x (ovvero nella direzione y , per grafici bidimensionali) può
essere eliminata. con ut (gca, 'XGrid', 'otf ') (e ovviamente ripristinata settando lo stesso
attributo nl valore 'on'). Attribuendo a XScale il valore I log' si definisce una sca.latura
logaritmica, come quella ottenuta con aemilogx, ma. con la possibilità di agire anche su
grafici tridimensionali. I limiti della scala si fissano con XLim e la ecalatura automatica
con 'XLimMode, che funzionano in maniera identica agli attributi CLim e CLimModevisti in
precedenza. Il puntatore ali 'intestazione de li 'asse è definito da XLabel. I valori indicati
sugli assi sono gestiti da due attributi: XTickLabel contiene un vettore di test i e controlla
"cosa." scrivere, mentre XTick è definito da un vettore numerico e controlla. "dove" scrivere;
chiariamo questo punto con un esempio: nella seguente tabella sono riportate le velocità
orbitali dei pianeti del nostro sistema solare in km / s : .. •, '••

....,
t ..
, 1 9°

Mercurio 47.8 •. .i;,,


~,\
..
Venere 35.l ...,>.
,.,:
Terra 29.8 • z' ·,

Marte 24.1 .·.'


:-
Giove 13.0
Saturno 9.7
Urano 6.8
Nettuno 5.5
Plutone 4.8
·.:(:(
la rappresentazione in MATLAB di quest i dati si ottiene con le seguenti istruzioni: .~.··

y~(47.8 35 . 1 29.8 24.1 13 .0 9.7 6.8 6.5 4.6]; ';.,:.:}:


bar(y); ··:~:;,:_;,.
..
pianeti•{'Hercurio','Venere','Terra', .. . ·
'Harte','Giove', ' Saturno','Urano ' , .. .
'Nettuno','Plutone'}: ......-
set(gca, 'Xli111', (0 . 6 9.5], 'XTiclt' ,1 :0, ... ··.'..::.
.. ;-:,
1
XTickLabol',pian•ti); ,..
...
ylabel{'(km/s)')

XTickLabelHode e XTìckMode permettono di definire le scalature au t omatiche.


A titol o di esempio, il disegn o in figura A .3 è stato generato con le seguenti istruzi oni:
A.4. AXES 477

h•axea('Poaition',[0 O 1 1],'Viaible','off');
axes ( 'Pos' , (. 26, . 15, . 7, . 8]) i
1et(gcf, 1 CurrentAxea 1 ,b);
Ann•[{'AJU1otazioni 1 },{'varie'}];
text(0.01,.6,Ann)

0.9
!
! 08
01

o.e
0.5
,f.....
~ ·-
'

..
:, .. O.◄

03 ,,
I 0.2
•• O.I
!·-
·: 00'---- 0-,--~0A ___ o....
.a,----O"':- .• - _~ ;I
- \-._:·
....
~.

Figura A.3: Posizionamento degli assi.

Per concludere, ecco un esempio di come produrre grafici con ~i doppi. Vogliamo rappresentare
una curva molto veloce, del tipo y1 (t) = e-t/ 7 sin St - 0.15, dove t è espresso in microsecondi,
e una curva più lenta, y~(t) = 2.2 • (1 - e-t cos 2t), dove questa volta il tempo è espresso in
secondi.
Si digiti Il seguente listato
t1•0:.1:40; yl•-ein(6•t1).•exp(-t1/7)-.16;
t2a0: .1:10; y2•2.2•(1-exp(-t2).•coa(2•t2));
bl1•plot(t1,yt,'r');
ul•gca;
set(axl,'XColor','r' ,'YColor' ,'r')
ax2=axes( 'Position • ,get (ul, 'Pos •), ...
'XAxiaLocation','top•, .. .
'YAxiaLocation','right', .. .
'Color','none',, .•
'XColor', 'k', 'YColor', 'k') i
hl2•line(t2,y2,'color','k','Parent',ax2);
si noti però che a questo punto, anche se l'effetto è già raggiunto, il risulta.to non è ancora
soddisfacente: bisogna allineare le tacche degli assi, altrimenti i grafici risultano scarsamente
leggibili:
xlim•get(ax1,'XL1m'); ylim:get(axl,'YLim');
xincQ(xlìm(2)-xlim(l))/6; yinc•(ylim(2)-ylim(1))/6;
11t(ax1, 1 XTick',[xlim(l):xinc:xlim(2)] , ...
'YTick',[ylim(l):yinc:ylim(2)));
xlabel('Tempo (\mus)','Parent',axl,'color','r')
xlabel('Tempo (s) ', 'Parent' ,a.x2, 'color', 'li:')
I
-1

478 APPENDIC E A.. FUNZIONI DI GRAFICA AVANZATE

li risultato è riportato in Figura A.4.

T~l•I
0_8o,...--..---i-2 __ --•..-----s,---...,er--_-,1 __
,..a ...,a
______
-,---;1~

0.◄667 2.5

0.1333 2 .. ,

.:~~ ~ ...
·/ i

-0 .2 · 1.5

-05333

-0.8867 0.5

- 1.2,.._ ____ ,__ ___ ---"'-------' ------'------' 0


O 8 18 24 32 40
Tempo~•SI

Figura A.4: Uso di assi doppi.

A.5 Line
Gli oggetti cli tipo line possono essere creati con il comando line, sebbene normalmente siano
generati con le istruzioni plot o plot3, che stabiliscono anche i parametri dell'axes corrente. Ne
abbiamo appena visto una applicazione nell'esempio precedente.
Il numero di proprietà delle linea è considerevolmente inferiore di quello di axes. Si consideri .. -' ..
Ot• • •

il seguente esempio

t::(O: .1: 10)';


yl•ein(t);
y2=cos(t);
p=plot(t,[yl y2]);
set(p(1), 'Color', 'r', 'LineStyle', '-', ...
'LineWidth',10);
set(p(2),'LineStyle','none','Marker', 'o', ...
'Hu-kerEdgeColor','g','HarkerFac,Color','y',,,,
'Ma.rkerSize',20,'Clipping','oft');

che produce il risultato in Figura A.5.


Questo esempio illustra quasi tutti gli attributi delle lines. Oltre alle ovvie definizioni di
colore e tipo di linea, si oBServi che l'ottributo LineWidth definisce lo spessore di linee contin-
ue e HarkerSize le dimenBioni del tipi di punti. Si noti inoltre che a.'!segnare il valore 'oft'
all'attributo Clipping permette a.Ila curva di uscire dal rettangolo determinato dagli assi.
' !

A.5. LINE 479

.t •.
0 .8 .t;"'"'\'
e !: .
~

0.8 ~ ~)
\t:,.,,
';• •~ It,
..,,-;

0.4
t

'-,.d .~
I
\:';,

{<:.!)
I
I; •• )

CJ. q
!
V. ·'~'( ·.) :i
,._l, ~.....I I •
0.2
1.J j
o
\ .J
y, d .,.J...
-0.:Z ~-
l I; /
'Ì ~
-0.4
'ri
,C\ (
1.:J
)
=~
¼>"'
,,::.1..
-0 .8
i "'2
~.
~"\. § ~~
-,.
....
,..... I.
'·-·
·,?
Q '·:i
- 0 .8
•,
'--..
!. • ~

-1
o 2 6 1 8
-~1/
9 10

Figura A.5: Uso dell'oggetto line.

Gli altri attributi di linee sono Xdata, Ydata e Zdata, i cui valori sono i vetto1·i delle coordi-
nate delle linee tracciate, e EraseHode, che definiace il modo In cui sono disegnate e cancellete
le linee e può I.\BSUrnercquattro valori: con 'normal' quando uno. linea è cancellate. l'intera ,.
regione corrispondente sullo schermo è anaUzzata e ridisegnata., In modo da evitare la. cancel•
!azione di eventuali linee sottostanti; 'background' cancello. la linea attribuendole il colore dello 'I
l,,.
sfondo, quindi colorando eventuali oggetti sottostanti; 'none• non cancella la linea anche quando 1!
l'oggetto è spostato o distrutto; infine 'xor' permette una. cancellazione senza danneggiare figure li
;I
sottostanti, ma presenta un altro inconveniente: se il colore di sfondo non è nero il colore della )

curva risulta alt er at o. Con riferimento al precedente esempio si provino ora le seguenti ist ruzioni :

set(p(l),'EraseHode','xor')
set(gca,'Color','w' ) Y.la l i nea cambia colore
set(p(1),'EraseHode', 'uone ' ) %torna al colore originario i,
delete(p(l)) %noncancella la curva

Come esempio più complesso si consideri il function file BO OM.M:

function tx>om(mappa)
g•0.81;
...
;

pnt_p•plot(0,0,'.', ' erasemode' ,'none','markeraize',2);


ax_p•gca; l
fig_p=gcf; Ii'
set(fig_p,'Color',mappa(end, :));
sat(ax_p,'color',mappa(l,:)) ;
set(ax_p, ':dim', [-6000 6000), 'yli.m', ...
[O 30000], 'xtick', CJ,'ytick', [J) :dravnov;
vhile(l),
480 APPENDICE il. FUNZIONI DI ORA.FICA AVANZATE

v0•randn{l)•1000;
teta0=rarid(l)•pi/2+pi/4;
iO=fix(rand(1)•64)+1;
cO:armappa( iO, : ) ;
set(pnt_p,'color' ,cO);
vOxmvO•coa(tetaO):
vOy•vO••in(te~aO);
t=O;y•O;x•O;
vhile (y>=O)l(x>-6000)t(x<6000)à(y<30000),
t=t+.1;
x=vOx•t;
y=vOy•~-.S•g•t -2;
set(pnt_p, 'xdata' ,x, 'ydata' ,y);
dravnov
end
end

e se ne provi anche una variante "animata ", in cui la terza istruzion e è:

pnt_p:plot(O,O,'. ', 'erasemode' ,'xor','markersize' ,20);

A.6 Surface
Gli oggetti di tipo surface sono gli analoghi tridimensionali di quelli di tipo line e sono generati,
oltre che con i comandi grafici ad alto livello mesh, surf e eur:fl, con il comando surface.
Gli attribu ti EraseHode, LineStyle, LineWidth, Marker e HarkerSize hanno lo stesso signi•
ficato e uso vis to per gli oggett i di tipo line. EdgeColor e FaceColor permettono di definire il
modo in cui il colore, definito nell 'attrlbuio CData viene distribuito sui bordi e sulle facce dei
singoli elementi che definiscono l'intera superficiej questi attributi possono assumere come valore
un colore specifico oppure i ve.lori none 1 tlat o i11terp 1 con cui i corrispondenti elementi non sono
colora.ti, sono colore.ti con un solo colore o con un insieme di colori risultanti da. un 'interpolazione
linee.re, come vlat.o a pag. 98. Ovviamente, sarà possibile definire la. traapa.renza sia per I bordi
che per le facce, u11&ndogli e.Ltributi E:dgeAlphae Fa.ceAlpha, che definiscono il modo In cui si
distribuisce le. trasparenza. definita da. AlpbaData, Infine HohStyle definisce un tracciamento del
bordi solo in base alle righe della matrice di cui rappresentare i dati, alle colonne o ad entrambe
le informa zioni.
Come per \Ines, i dati di cui tracciare il grafico sono contenuti negli attributi XData, YData
e ZData, con l'aggiu nta di CData per i de.ti relativi al colore e AlphaData per quelli relativi alla
trasparenza .
Com e esempio si provino i seguenti comandi

p:surt(peaks ); 'l.surf restituis ce un puntatore


set(p,'LineS~yle', 1
-
1
,'EdgeColor','k');
set(p, 'Alph aData',get(p, 'ZData'));
set (p, 'FaceAlpha','tlat');
set(p,'HeshStyle','rov')

A.7 Image
Gli oggetti di tipo image sono caratterizzati dall'associazione immediata fra valor i numerici e
mappe di colore, al punto che si può dire che sono visua.li:n.azioni delle mappe di colore. Un
oggetto di questo ti po è creato con il coma ndo image(C), dove la matrice C contiene un insieme

..
.,··.
fI

A.8. TEXT 481

di numeri interi in genere fra l e 64 (si ricordi che le mappe di colore predefinite contengono 64
colori). Per vìeuaJizzare i colori nella mappa di colore hot poeaiamo usare

image(1:64), colormap(hot)

Naturalmente ogni immagine bidimensionale può essere interpretata come un insieme di colori.
:J
Si carichi il file dimostrativo EARTH.MAT, che contìene le due variabili X e ma.p
l.
load earth
image(X)
,I
-i '
colormap(rnap)
I
l
Lo stesso risultato si potrebbe ottenere con il comando pc olor, come visto a pag. 99, che però I

impiega un tempo notevolmente m·aggio re per completare il disegno. n motivo è che pcolor
crea in realtà un oggetto di ti po surface e definisce una vista dall'alto, ovvero con angolo di
elevazione di 90°, mentre image crea un oggetto di tipo image . Il numero di attributi di questi
ultim i è decisamente ridotto rispetto ai primi: sono presenti solo CDau, XOata e YOata; que~ti
ultimi specificano la posizione delle righe e colonne nell'immagine. Infine, abbiamo ancora due
proprietà legate alla trasparenza, AlphaOata e .AlphaDataMapping.

A.8 Text
Sono oggetti di tipo text tutte le stringhe di caratteri presenti nei grafici. Abbiamo già acr.enna-
to a tre oggetti di questo tipo quando abbiamo parlato degli attributi di axes: Title, Xlllbel e
Ylabel contengono i puntatori a titolo e intestazioni dei due assi. Abbiamo visto a pag . 75 la gen•
erazlone di commenti nei grafici con il comando text. In realtà questo comando genera un oggetto
di tipo text e ne restituisce il puntatore se usato nella. forma p•tut Cx,y, 'stringa'). Oltre agli
attributi FontAngle , FontH11.JDe, FontSize, FontWeigh1:, FontStrikeThrough e PontUnderline visti
in precedenza , nonchè la definizione del colore del testo con l'attributo Color, eeiste un gruppo di
attributi necessa..ri a definire la posizione della stringa; questi sono: Unita (si noti che per definire
una posizione occorre sempre defìnire delle unità di misure.); Po1i1:ion, che definisce le due (o
tre per grafici tridimensionali) coordinate del testoj Extant è un attributo di sola lettura (nel
senso che non può essere modlfìcato con un comando 111:)e che fornisce le dimensioni del teetoi
per modificarlo bisogna u:,are l'attributo Font9ize, HorizontalAlignm■nt e VenicaUlign111ent
possono assumere I valori 'ldt'i 'cenur• o 'righ1:' il primo, 'top', 'middle' o 'bottom•
il secondo, e definiscono l'allineamento del test.o rispetto al punto definito In Poeit ion; infine
Rotation permette di specificare uno dei sette angoli (in gradi) predefiniti di rotazione per il
testo (O, ±90, ±180, ±270). È presente infine l'attributo EraseHode il cui significato è stato già
discusso per gli oggetti di tipo line . Se Editing è settato a 'on' è possibile modificare il testo .
I
.t

11

f
l

\.
Appendice B

Creazione di un 'interfaccia
utente

In questa appendice ci occupiamo della creazione di un'interfaccia grafica utente (GUI, Graphic
User lnterface) tramite MATLAB. Ovviamente potremo solo farCIdei cenni all'argomento, qu indi
ci limiteremo a dettagliare quanto basta per iniziare a cre&re semplici G Ul.
Lo strumeuto principale per la creazioni di GUI è il comando guide, che sta per GUI Deoign
Environment (ambiente per il progetto di GUI). Digitando ques to comando appare una finestra
piuttosto familiare a coloro che si occupano di GUI, con i soliti bottoni, chec k box, radio button,
ecc (Figura B.l),
Anche In queste. appendic e i nomi degli oggetti e delle loro proprità non sono stati tradotti ln
Italiano, sia per le difficoltà presentate 111alcuni CB8idal mnterlale linguistico ste111101 eia perché

usare i nomi inglesi facilita l'acquisiz ione mnemonica dei comandi.

B.1 Prima applicazione


Anche in questo capitolo useremo un approccio di tipo learn-by-doing, quindi iniziamo a costruire
una semplicissima applica.zione GUI.
Nella finestra guide entriamo nel menu a tendina Toola, quindi in Applice.tion Options ,
Compare una nuova Rnestre., in cui possiamo decidere se la GU I sarà ridimenaionablle o avrà.
invece dimensioni bloccate (opzio ne ruize behavior}i quindi ae l'ogge tto GUI è accessibile dalla
linea di comandi o no (opzione Command-line accusibility)i selezioniamo solo questa opzione
e scegliamo il valore on. Inol tre è possibile genere.re eolo un file dì tipo !ig o anche un m-file che
lo la.nei. Un file di tipo fig memorizza !'a.spetto grafico della GU I (pulsanti, menu, ecc.), Per ogni
ogget to grafico c'è un'a zione associata da compiere quando eeso viene attivato: se ad esemp io
disegniamo un bottone, ci aspettiam o che ogni volta che lo 1Jchia.cciamo si verifichi un'azi one.
Questa azione è memorizzata come una norma.le functlon MATLAB, Il cui nome è definito nella
propr ietà CallBack di ogni oggetto G UI. L 'Insieme delle funzioni poi che compongono la GUl
è ovviamente memorizzato in un m-file. Ecco perché la terza opzione consente di sceglier e se
salva.re solo il file grafico, quello che disegna la GU I o anche l'm -file che attiva la GUI stessa. Per
il momento scegliamo di sa.lvare entrambi i files e lasciamo i valori di default (Figura. B.2}.
Ora, sulla finestra grafica clicchiamo in alto a sinistra su un Push Button, posizioniamo il
mouse in un punto qualsiasi del foglio quadrettato, schiacciamo il pulsant e del mouse e, tenen-
dolo premuto, trascin iamo il mouse, disegnando un bottone. Quindi, posizioniamo il cursore sul
botto ne, e schiacciamo il tasto destro; appare un menu, in cui scegliamo Edit Callback, Si noti
48-l .4.PPENDICEB. CREAZIONE DI UN'INTERFA.CCI.4UTENTE

,® imi
,® @ ~
~
1.f
1~i 111
, '
I? ·t: •.,•

Figura B.l: La finestra guide.

che a questo punto MATLAB esegue un salvataggio preventivo della nostra figura; memorizzi-
amola. con il nome guiExl.fig. Quindi appare l'editor di MATLAB, che apre il file guiEx1.m e
si predispone sulla function:

function varargout • pu1hbutton1_Callback(h, eventdata, ...


handlea, vuargin)
¼ Stub tor Callback of the uicontrol handles.puahbutton1.
disp('pushbuttonl Callback not implemented yet.')

Ora Cancelliamo l'istruzione eseguibile della function, e quindi sostituiamola con cloae(gcf);
l'intera function deve quindi essere:

tunction varargout • pushbutton1.Callback(h, eventdata, ...


handle1, varargin)
¼ Stub for Callback of the uicontrol handles.pushbuttonl.
close(gct)

Ora salviamo e chiudiamo il file guiExl. m, quindi torniamo sul nostro bottone, schiacciamo '
ancora il tasto destro e selezioniamo Inspect Propertiee. Si apre l'ennesima finestra, Property
Inspector (Figura B.3}, su cui modifichiamo il BackgroundColor e il ForegroundColor usando
dei colori ad arbitrio , e modifichiamo la proprietà String, con il valore Chiudi.
Ch iudendo questa finestra, scopriamo che sul nostro bottone è comparsa la scritta "Chiudi"
e che il bottone ha cambiato colore . Infine, clicchiamo con il tasto destro in qualunque punto del
foglio a quadretti, e apriamo di nuovo il Property Inspector, che questa volta. presenta diverse
proprietà., che riconoscerete subito essere quelle di un oggetto di tipo figure. Modifichiamo la
proprietà. Name in Primo esempio di CUI, il Pointer in circle e il Tag in gui1Ex . Quindi,
B.l. PRINIA.APPLICAZIONE 485

il

'
~v~•
;<tt:;i;' :.• .... •. ~3 •·j f. .
(~
·-~-.
I

'4;~!~:'t' ., .., ......,j •• 1' ,. •• . ::; · .· ... ~d~.:-•

Figura B.2: La finestra Application Options.

salviamo i cambiamenti alla guiExl. :fig e chiudiamo la finestra guide. Infine, da MATLAB,
digitiamo il comando guiEx1 e otterremo la finestra in Figura B.4.
Ovviamente, schiacciando il bottone la finestra si chiude.
A questo punto ci si può chiedere: perché abbiamo posto a on la visibilità. della handle? E in
genera.le , a cosa serve questa opiione? La risposta è la. seguente. In genere, gli oggetti GUI sono
progetta.ti per funzionare come interfacce a se stanti. Tuttavia, anche una finestra GUI è una
normale finestra MATLAB, e come tale è soggetta ai comandi visti nell'appendice A. Questo
comportamento pub dare luo go ad effetti indesiderati, per cui in alcuni casi può essere opportuno I
"nascondere" i puntatori alle finestre GUI; ciò si ottiene ponendo a off la ho.ndle visibility. Un
oggetto con una handle nascosta non consente più l'uso di comandi quali get, aet, findobj. Nel
caso dell'esemp io appena visto invece l'uso del comando cloee(gcf) richiede che la finestra sia
visibile, e il suo puntatore ottenibile con gct {si noti che gef restituisce il puntatore dell'ultima
lI !

l
'\

, BacklngSiora • on
'- BusyActlon ..,. queue
- BunonDownFcn
- Cilpping ~on
j CloseRequestFcn ctosereq
•- Color ~~:, ,,.. ,:,1
Cotormap
,- CreataFrn
' - CunentCharacter o

Figura B.3: Il Property Inspector.


l 486 APPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE

Figura B.4: L'applicazione GUI guiEx1.

finestra selezionata. il cui attributo HandleVieibility eia a on), altrimenti la GUI non potrà
chiudere Be stessa, cosa di cui il lettore potrà facilmente convincersi con il seguente esperimento:

I
si riapra la GUI precedente con il comando

guide guiEx1

e si ponga. l'opzione Command-line accessibilìty a ot!, poi si sa.lvi e si chiuda il tutto e si faccia
ripartire la GUI. Questa volta., schiacciando il bottone non succede nulla, e se sono aperte altre
flne8tre (per esempio create con un comando figure o un plot), saranno queste ultime ad esaero
chiuòe.
Se però da una. parte è vero che ponendo a oft la visibilità proteggiamo la GUI da chiusure
imprev iste, è pur vero che una GUl che contenga grafici o superfici o in genere qualsiasi cosa
legata a degli axe1 deve prevedere l'accessibilità del puntatore agli axes stessi. Perciò esiste una
possibilità "intermedia.": con l'opzione User Speci:tied si possono de6ni1'e le HandleVisibility
per ogni singolo oggetto che compone l11.GUI.
lnfine, va detto che l'esempio proposto è stato scelto solo per la sua semplicità: infatti in
realtà il problema della visibilità del puntatore alla figura GUI dall'interno delle callback si risolve
usando il comando gcbf (Get CallBack Figure) che funziona come gcf 1 quindi basla usare come
callback

cloee(gcbf)

per riaolvere il problema quale che sia la visibilità della figura.

B.2 Oggetti GUI


.I guide dispone di dieci oggetti per il progetto dell'interfaccia utente;
1. Pueh Button: sono i classici pulsanti disponibili in tutte le applicazioni Windows, attiva.ti
dalla pressione del tasto di sinistra del mouse.
2. Toggle Button: come i precedenti, ma bisogna riechiaccìarll per disattivarli.
3. Check Bo,c:sono elementi di una lista il cui stato di a.ttlvailone è in<llcato da un simbolo
di spunto.

...
B.2. OGGETTI GUI 4Bì

4. Radio Button: simili ai precedenti, sono però in genere usati in maniera mutuamente es-
clusiva, ovvero selezionare un oggetto della lista fa si che gli altri siano deselezionati; questa.
operazione non l! però automatica in MATLAB, per cui in seguito verranno illustrate le
operazioni necessarie ad ottenerla.
5. Static Text: si tratta di semplici commenti, stringhe di caratteri non alterabili.
6. Editable Text: a differenza del precedente, il testo può e8sere alterato dall'utente.
7. Slider: si tratta delle "barre di scorrimento" di Windows, e servono a definire valori
va.ria.bili con continuità. in un intervallo.
8. Frame: de6niace una. cornice per raggruppare più controlli in unità logiche. ·1
9. Pop-up Menu: sono menu e. tendine, una versionesemplificato. del menu di flnestra che
vedremo nel prossimo paragrafo.
10. List Box: simili ai precedenti, forniscono una lista di alternative.
11. Axes: sono normali axes, per inserire grafici nelle GUI.

B.2.1 Bottoni
Pa.esiamo ora ad un'applicazione meno banale della precedente, che ci permetterà di usa.re oggetti
GUI per eseguire funzioni MATLAB. Si riconsideri l'esempio boom.in visto a. pag. 479 e proponi-
amoci questa volta di creare una. G UI {guiEx2 ,m) per fa.rio eseguire. Introdurremo un Axea per
disegno.re i proiettili, un Toggle Button per abilitare l'esecuzione e un Pu11h Button per tracciare
i proiettili se l'esecuzione è abilitata o cancellare il contenuto degli axee in caso contrario.
Usando il comando guide, posizioniamo gli Axes, il Push Button e il Toggle Button, Si
noti nel menu Layout abbiamo vari strumenti che aiutano nel disegno, possiamo agganciare gli
oggetti alla griglia o allinearli esplicitamente, selezionandoli (per selezionare più oggetti basta
tener premuto il tasto SHIFT e continuare la selezione) e scegliendo l'opzione Align 0bjects
(Figura B.5).
Quindi. con il Property Inapector definiamo le seguenti proprietà: per l'intera figure poni•
amo il Nam .e a Eeempio boom (e volendo scegliamo qualche colore a piacere); per gli axea poniamo
a ott l'a.ttl'ibuto Visible; per il Toggle Button, poniamo a Abilita la proprietà String e a en1
il Tag; infine, per il Push Button poniamo a Fuoco! la String.
Ora dobbiamo definire le callback. Prima però modifichiamo il file boom.m. Infatti esso non
dovrà più tracciare i proiettili in un generica. figura corrente , ma esatta.mente in quella della GUI,
quindi dovremo passargli le handle degli oggetti nelle GUI. Inoltre. il ciclo 11hile non sarti più f;
infinito, ma dipenderà. dallo stato del Toggle Button. Ecco corne si modificano le prime linee
della function boom.111
function
1 che per comodità. abbia.mo rinominato

boom1(mappa,handles)
boom1 .m:
I
g=9.81;
ax_p=handles.axesl;
I
I
pnt_p=line('marker','.','erasemode','none', ...
'markersize',2,'parent',ax_p);
set(gcbf,'Color',mappa(end,:));
set(ax_p,'color',rnappa(l,:));
set(ax_p,'xlim',(-6000 6000),'ylim',,, ,
[O 30000],'xtick',[J, 1
ytic:k',());
dra11nov:
vhile(get(bandles.en1,'value'}=•1),

Il resto è uguale a quanto visto in precedenza. Si noti che la differenza. essenziale è l'a.ver
passato come parametro in ingresso la struttura handlos 1 che contiene le handle di tutti gli
oggetti nella GUI. Inoltre, i campi di questa struttura. sono proprio i Tag dei singoli oggetti
grafici: tigure1 per la figura, axea1 per gli a.sei,(valoridi default) en1 per Il Toggll Button.
Infine definiremo le due cn.llba.ck del Push Button e del Toggle Button.
488 APPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE

Figura B.5: Preparazione della GUI.

tunction varargout = pushbuttonl_Callback(h, evantdata, , , ,


hAndles, vara.rgin)
¾ Stub for Callback ot the uieontrol handle, .pushbutton1.
boom1(hot,handlee);

tunction varargout • enl_Callback(h, av1ntdata, ...


h1U1dlea, varargin)
Y. Stub tor Callback of the uicontrol nandles.togglebuttonl.
· i f get (gcbo, 'value 1 )==1
set(gcbo,'string','Disabilita');
else
set(gcbo,'string','Abilita');
end
drawnow;

Come si vede, la struttura handles è "gratis", è definita. già nell'm-file che lancia la GUI.
Inoltre, per quanto riguarda. la callback per il Toggle Button, abbiamo usato · il comando gcbo,
che restitu isce la handle dell'oggetto che ha lanciato la ca\lback corrente (in alternativa si poteva
ovviamente usare get (handles. en1), come già si è fatto nella function booml). Ultima consider-
azione sul Toggle Button: qual'è it valore quando il bottone è schiacciato o non schiacciato? La
risposta è nelle due proprietà Max e Kin: quando il bottone è schiacciato la proprietà Value ha il
valore definito da Hu che per inciso è l per default, altrimenti ha il valore Hin. A questo punto
l'applicazione è completa, un esempio di funzionamento è riporta.to in Figura 8.6.
I[ l
B.2. OGGETTI GUI 489
r

f:

Figura B.6: L'applicazione guiEx2.

Altri punti sono degni di interesse in questo esempio. Anzitutto, si noti che dopo aver
schiacciato il Puab Button, la function booml è in esecuzione . Se schiacciamo il Toggll Button,
viene eseguita la ca.llba.ck dello stesso, che si limita a cambiarne il nome. 11 punto è che viene
eseguita. una fun~one mentre è gici in esecuiìone un'altra /un~ione. Cib è poseibile solo se la.
proprietà. Intarruptible (o.ssociata. In questo ca.so a.I Puah Button, ma. si tra.tta. di una proprietà
dì tutti gli oggetti gra.lici} è tiettata a. on (valore di default}. In questo ca.eo infatti, l'esecuzione
si a.rresta. alle. prima delle seguenti istruzioni:
• dravno\l
• figure
• gatframe
• pausa
• vaitfor
Raggiun ta una di queste istruz ioni , MATLAB sospende l'esecuzione e processa l'evento che
ha generat o l'interruzione. Se invece la proprietà Interruptible è settata. a oft solo quando
l'esecuzione è terminata si può processare l'evento che aveva generato l'interruzione, il che è
ormai possibile solo se esso è stato inserito in una coda. temporanea. A ciò provvede l'attributo
BusyAction, se settato a. queue. È chiaro altresì che se invece questo attributo è settatu a.
canee! l'interruzione è persa. Ricapitolando, un evento non è processato solo se la BusyAct ion
dell'oggetto che la genera è c:a.ncel ed è nel frattempo in esecuzione una funzione lanciata da un
oggetto con la proprietà Interrupt ible pari a. ott.
Si noti infine che mt!ntre l'applicazi on e è attiva è possibìle passa.re su altre finestre M ATLAB.
Talvolta però si vuole che l 'utent~ sia. costretto a rima.nere su una. sola. finestra., come nel ca.so

i'
. , j

,. I
.,,
I•
490 A.PPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE

di finestre io cui c'è una richiesta (quelle del tipo "Sei sicuro di ... ?"). Per ottenere questo
comporta.mento, si pone la proprie tà WindovStyle della finestra principale al valore modal.

I B.2.2 Radio e text


\
Sempre considvrando il nostro esempio, proponiamoci di aggiungere un'ulteriore opzione: con-
servare la traccia del proiettile o rimuoverla, mostrando solo il proiettile che vola. Per fare ciò
basta porre l'attributo EraaeHode delPoggetto Lina che definisce il proiettile al valore xor; inoltre
conviene aumentare le dimensioni del proiettile (attributo HarkerSize),
Per semplicità Inoltre consideriamo che la scelta del tracciamento possa emiere fatto solo
all'inizio di ogni sequenza. di sparo, non dura nte l'esecuzione. La modalità di impiego quindi di
questa G UI sarà:
1. definisci il tipo di tra.cciamentoj
2. abilita l'esecuzione;
3. spara;
4. disabilita. l'esecuzionej
e cosl via. Per cambiare il tracciamento bisogna quindi prima disabilitare l'esecuzione, poi
ripartire dal punto 1.
Aggiungiamo quindi alla nostra GUI due Radio Button, che dovremo rendere mutuamente
esclusivi (come detto in precedenza, MATLAB non lo fa da sé), che raggrupperemo in un Frame,
e aggiungeremo anche uno Statie Text esplicativo (Figura B.7).

Figura B.7: Aggiunt:i. ,:· 0~getti GUI.

Per aggiungere Re.dio Button e Static Text 8\H l"ume, dovremo selezionare quest'ultimo,
schiacciare il tasto destro del mouse e selezionare l'opzione Send to Baclt, per portare sullo
efon~o Il trn1111
1 altrimenti Il Framecopre gli altri comandi.
Defht!nmo quindi le seguenti proprletè.:
• per lo Sta.tic Text
- String -+ Traccia:
• per il primo Radio Button:
- String ➔ on
- Tag ➔ rbi

• per il secondo Ra.dio Button:


- String -+ off

1
B.2. OGGETTI GUI 491

- Tag ➔ rb2

Per quanto riguarda la scelta del tipo di tracciamento, è sufficiente che ci sia un controll o,
all'interno della function boom1 del contenuto dell'attributo Valu• dei Radio Button: infatti,
quando uno di questi oggetti è sele-iionato il ano Value passa al valore definito daJl'attibuto Max.
Ecco quindi il frammento di nuovo codice da. inserire nel file boom! .111:
pnt.p•lin•(•~ark•r','.','par•nt•,ax_p); I
it (g•t(handle1.rb1,'Value')••1) ,f
, .
■ •tCpnt_p, 1 1ra11mod1','non•','mark1r1iz1•,~);
elt1
11t(pnt_p,'1ra11mode','xor','marker1ize',12);
end
Come si vede, se i Radio Button sono resi mutuamente esclusivi, è sufficiente controllare
uno solo dei valori. Ora dobbiamo definire le callback dei Radio Button, che hanno lo scopo di
renderli mutuamente esclusivi :

function varugout • rbl_Callback(h, eventdata, ...


handles, varargin}
7. Stub for Callback of the uicontrol handl• ■ .rb1.
esclu1ioneHutua(handle1.rb2);
X-------------------------------------------------
fW1ction varargout • rb2_Callback(h, ev,ntdata, . ..
handles, varargin)
¼ Stub for Callback of the uicontrol handles.rb2.
esclusioneHutua(handles.rbl)i
X-------------------------------------------------
function 11clu1ion1Mutua(h_radio)
11t(b.radio, 1
Valu1 1 ,0);

Come si vede, il punto centrale è la runction - ■ clusioneHutua.

B.2.3 Altri con1andi G UI


Finora. abbiamo sempre usato la mappa hot . Proponiamoci ora. di cambiarla. tramite un comando
che permetta di fare selezion i in un elenco di voci: Il Popup Menu. A questo scopo apriamo nucorn
guide e inseriamo un Popup H•nu, magari riorganizzando la GUl, quindi selezioniamo Il Popup
Menu,apriamo il Property In1peetor e definiamo la propr ietà Tagal valore popmap,mentre per la
proprietà String inseriremo un insieme di mappe che compariranno nel menu a tendina; quindi
apriamo il mini editor che compare schiacciando il botton cino nella ca.selle di propriet~ String e
inseriamo i valori hot, cool , jet, prism, copper e gray .
A questo punto, basta. solo modificare la. callba.ck del Push Button di sparo, come segue :

tunetion varargout • pu1bbutton1.Callback(h, eventdata , , ..


handl11 1 varargin)
Y. Stub tor Callback of the uicontrol handl11 .pu1hbuttoni,
mappaind•get(bandlea.popmap,'Value');
mappaCorr•get(he.ndles.popmap,'String'):
eval(( 'boom1(',mappaCorr{mappaind},',handles)']);

Si capisce che il l'attribut o Vs.lue restituisce l'indice della voce sele~ionata nel menu, mentre
String cont iene l'insieme delle voci. li motivo per cui si è usa to il comando eval è che in realtà
la. voce è restituita eotto forma di stringa di caratteri.
In Figura 8 .8 abbia.mo un esemp io di esecuzione della GUt.
Per completezza , prima. di abbandonarlo, riportiamo l'intero file boomi .111 , con tutte le mod•
ifiche fino a questo punto apportate:

,..
.I
,: I
li I
,I

I
492 ..\PPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE

I
I
-_.~·r,)~

.'"{i•,
-;~l;t.l~
.
......i:.!:
. ·,'it~.
i}.1
~~i' 1·
•f~

~~--~
,,
:ff_:t...,

·~
,•:~:.
I
. 't
~~

.-:~

., · t~ ~- ~ .. ~r
..,,·....
J.'-i\-tA.·
·!tr:r~·f"'i.~t··
•ll:~;:._~)
..\·~~i~~ ~'?-t4'~~
·J,~;;;~~~-!
· ~L,~'fl
.J ~ • '-~'1.11'f~ ,(1_1./i~~t

Figura B.8: Aggiunta di un Popup Menu.


I
l
r

tunction boom1(mappa,handles)
g=9.Bl;
ax_p=handles.axesl;
pnt_p~lìne('marker','.','parent',ax_p);
if (get(handles.rb1, 'Value')•al)
1et(pnt_p,'erasemode','none 1
, 'markeraize',2):

else
set{pnt_p,'erasemode','xor','markersize',12);
end
set (gcbt, 'Color' ,mappa(end, : ) ) :
set (ax_p, 'Color 1 ,mappa( l,;), 'Vie111 , (O 90));
set(ax_p,'xlim',(-5000 5000],'ylim',(O 30000),,,.
'xtick', (), 'ytick', (), 'visible', 'on');
dra.wnov:
vhile(get(handle1.enl,'valu1 1
)••1),
vO•randn(1)•1000;
tetaO•rand(1)•pi/2+pi/4:
iO•tix(ra.nd(1)•64)+1:
cOamappa(iO,:);
set(pnt_p,'color',cO);
vOx=vO•cos(tetaO);
vOy•vO•ain(tetaO);
t•O;y=O;x•O;
while (y>•O)t(x>-SOOO)l(x<6000)t(y<30000),
tst+.1;
x=vOx•t;
y=vOy•t-.S•g•t-2;
. set(pnt_p, 'xdata' ,x, 'ydata' ,y);
'\
B.2. OGGETTI GUI 493

dra11no11
end
end

A questo punto l'esempio è sufficientemente sfruttato, quindi passiamo ad una versione


tridimensionale di boom1, che ci permetterà di presentare altri comandi.
Ecco il file -boom3d.m:

function boom3d(mappa,handlea)
g=9.81 i
ax_p=handles.axea1;
pnt_p=line('marker','.','parent•,a.x_p);
if (get(handlea.rb1,'Value')••1)
set(pnt_p,'erasemode','none','markeraize',2);
elu
1et(pnt_p,'era1em0de','xor','markar1iz1',12);
end
1at(gcbf,'C0lor•,mappa(1nd,:));
aat(u_p,'Color',mappa(1,:)):
sat(ax_p,'xlim',(-6000 6000),'ylim',(-6000 6000), ...
'zlim', [O 30000), 'xtick', [), •ytick', [), .. ,
•zt iclc • , (] , 'Vie11' , (-37. 6 30) , •viai bla' , 'on') ;
1
view(3);
drawnow;
11hile(get(handle1.1n1, 1 valua')••1),
vO=randn(1)•1000;
teta0•rand(l)•pi/2+pi/4;
fiO•rand(l)•pi/2+pi/4;
i0•fix(ra.nd(1)•64)+1;
cO=mappa(iO, :) ;
set(pnt_p,'color',cO);
v0xav0•coa(teta0)•coa(fi0);
v0y•v0•c01(tata0)•ain(fiO);
v0zav0•ain(teta0);
t•0;y•0;x:0;z:0;
while (z>=O)t(x>-6000)t(x<6000)t ...
(y>-6000)l(y<6000)t(z<30000),
t=t+.1;
x•v0x ♦ t i
Y"'V0y•t;
z•v0z•t-.6•g•t-2;
1at(pnt_p, 'xdata' ,x, 1 ydata 1 ,y, 'zdata' ,z);
dra11nov
end
end

Come si vede, è identico al precedente, tranne che per qualche variante che riguarda la terza r
dimensione. Proponiamoci quindi di variare l'angolo rli azimut dell'Axu tramite uno Slider
e poterlo imporre tramite un Edit Text. Useremo anche due Static Text per aumentare la
leggibilità . In Figura B.9 è riportata una esecuzione della GUI.
È inoltre presente anche un Check Box che descriveremo più avanti. Per il momento, si
I
osservi che l'Edit Text contiene solo il valore numerico dell'angolo, ed è preceduto e seguito
dalle due stringhe Azimut = e gradi che sono degli Static Text. L'angolo di azimut varia fra
-180° e 180°, e ciò sarà indicato ovviamente nelle proprietà Hu e Hin dello Slider. Inoltre, la
proprietà Value dà il valore corrent~ e Slider shp ha due componenti 1 la prima per indicare l
,.
1.,

l~
494 1lPPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE

- • lii!30

NlmUI • ....53 ; qred!

I • I
Figura B.9: Sliders e a.Itri comandi.

"\
l'avanzamento quando si schiaccia sulla freccia, la seconda. quello che sì ottiene achia.ccla.ndo su
una. wna vuota dello Slid•ri per la prim1\ definiremo un valore di 0.0278, pari a 10/360, in
modo che la freccia faccia. va.ria.re l'azimut di 10°, per il secondo Invece avremo il valore 0,24,
ovvero 90/360 per spostarsi di 90° (si noti che questo valore ~ sempre calcolato come rapporto
fra il valore effettivo e !'interva.llo fra. massimo e minimo). Inoltre , la. callback dello sl!der dovrà
definire il valore che appare sull'Edit Tnt, e viceversa, imponendo un valore di azimut nell 'Edi t
Text esso dovrà riflettersi sullo Slidu . Ecco quindi in sintesi i valori delle proprietà:
• per lo Slider:
- Max -+ 180
- Min ➔ -180
- SlìderStep X ➔ 0.0278
- SliderStep y -+ 0.25
- Value -+ -37
- Tag ➔ 11id1rAzimut
• per l 'Edit Tut
- String ➔ -37
- Tag -+ testoAz

Ora. do bbiamo definire le callùack.

tun ction varargout • elid1rAzillut~Callback(h, eventdata, . ,. i


~
handlea, varargin)
¼ Stub for Callback ot the uicontrol handles,eliderA~imut. i
1et (h&ndlea .t est0Az, 'Strin g ', num2str {round( g,t(gcbo,'Value'))));
Y. ---------------------------- ----- -- ------ - ---- ------ -- ----
l
j

l
•· l
'I
'I

B.3. MENU 495

function varargout: testoAz_Callback(h, aventdat~,


handles, varargin)
%Stub tor Callback at the uicontrol handl11.editl.
set(ha.udles.sliderAzimut, 'Value',str2num(get(gcbo,'String')));

Si noti che le due caJlback aggiornano vicendevolmente i rispettivi oggetti. lofine, l'azione

l
effettiva. del cambiamento del punto di vista è effettuata. all'interno della funzione boom3d, all'in - !.
!I
terno del primo ciclo vhile, con le istruzioni: ,1
, r·
•!.
•·'
• I
azm~get(handles.sliderAzimut,'Value'); ,.
set(ax_p,'View•,(azm, 30));drawnow; l
!
Ovviamente, in maniera a.naloge. è possibile definire una barra di scorr imento verticale per
cambiare l'elevazione. A questo scopo, è sufficiente definire, nella proprie ti Poaition dello Slider
un valore di vidth minore di quello di height e la barra si trasforma. automa..ticamente in uno
slider verticale.
Infine, aggiungiamo un Checkbox , definiamone la Tag al valore check3d e usiamolo per
definire una. rappresentazione bidimensionale o tridimensionale; per ottenere questo effetto, basta
modificare la callback del Pu1h Button come seg ue :

function varargout: pushbutton1_Callback(h, eventdata, ...


handles , ve.re.rgin )
Y. Stub tor Callback ot the uicontrol ha.udles.pushbutton1 .
mappaindaget(handles.popmap,'Value');
mappaCorr•get(handles.popmap,'String');
if get(handlea.check3d,'Value'),
set(handle1.test0Az,'Viaible 1
1 'on');

1et(handlea.text4,'Visible 1 ,'on 1 );
1et(handlea.textS, 1
Visible 1 ,'on 1 );
1et(handles.sliderAzimut, 1 Visible','on');

eval ( ['boom3d(',mappaCorr{mappalnd},',handles)']);
elu
set(handles.testoAz,'Visible', 'off');
set(handles.sliderAzimut,'Visible','otf');
set(handles.text4,'Visible','off 1 );

set{handlea.text6,'Visible','oft');
eval(('booml(',mappaCorr{mappaind},' ,handles)']):
end

La. definizione della visibilità. serve ad evitare la visualizz,tzione dello Slider dell'Edit Text
e dei due Sta.tic Text Azimut = e gradi nel ca.so bidimensionale.

B.3 Menu
In questo para.grafo sono tre.tta.ti gli oggetti di tipo uimenu e uicontextmenu: i pr1m1 sono i
cla.saici menu a tendine ( ed eventu ali sotto-menu) che si a.ffia.ncano ai menu definiti nelle finestre
standard; i secondi sono i menu che appaiono quando clicchia.mo su un oggetto con il tasto
destro. Anche in quP..8toparagrafo procederemo con un esempio, più semplice del precedente, per
illustrare le caratteristiche di questa classe di oggetti.
Partiamo quindi da un file di eeempio che fa uso del comando pcolor (si veda. pag. 99). Si
consideri una matrice 11 x 11 che contenga i numeri naturali da. 1 e. 121 e ad essa si associ una
matrice in cui gli elementi omologhi divi8ibili per 3 sono contrsssegnati do 11 gli altri da Oi sì
visualizzi questa seconda matri ce con pcolor e si decida una gradazione di colori !nterpolota:

:I
.
:J
I•.
l
496 APPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE

C=1:121;
Csreshape(C,11,11);
c1..re111(C,3)=•0;
· pcolor(C1);
shading interp

Per prima cosa quindi creiamo una GUI, chiamiamola guiEx4 1 in cui inseriamo {con guide)
degli axes con un Tag pari al valore aui. Alla creazione, vogliamo visualizza.re l'immagine
definita dalle istruzioni precedenti, quindi definiamo la callback

tunction varargout 2 asai_CreateFcn (h, eventdata,


ha.ndles, varargin)
Y. Stub tor CreateFcn ot the uea ba.ndle1.a11i.
C•1:121;
C•reihape(C,11,11);
C1arr1111(C,3)••0;
p•pcolor(Cl};
set(gcbt, 1 UeerOata1 ,{C,p});
axis{'off');
shading interp

Come 11ivede, il codice è idemico a quello riportato in precedenza, tranne per il fatto dì aver
definito la ma.trlce e e il puntatore all1 immagine come de.ti della finestra della GUI. Infatti, la
proprietà UHrData, comune a tutti gli oggetti grafici, può essere semplicemente vùita come un
contenitore, una variabile di appoggio in cui inserire dati. In questo modo, da ora in poi quando
ci servirà. la matrice C non dovremo più genera.da, ma la otterremo semplicemente con il comando
get. Ciò tra l'altro spiega anche perché abbiamo scelto di inserire C nella. tigun: è l'oggetto
grafico la cui handle è la più facile da ottenere.
Il seguente problema è la definizione di un menu a tendine per definire la mappa. di colori
usata e lo shading. A questo scopo, usiamo il bottone menu editor in guide, che lancia ìl Manu
Editor. Al suo interno aceglìs.mo il primo bottone, Nev Manu e definiamo il primo menu con le
seguenti proprietà:
• Label: ➔ tColori
• Tag: ➔ 111enuCol
Si noti che l'uso del carattere t fa si che la prima lettera sarà. sottolineata, creando uno
"shortcut" Windows, in modo che ALT+C faccia aprire il menu folori.
Ora, all'interno del menu, creiamo due sottomenu, con il bottone New Henu Item, con le
seguenti proprietà:
• per il primo sottomenu:
Label : ➔ 11:Happe
Tag: -t 111enuHap
• per il secondo:
- Label: ➔ 11:Stumature
Tag: ➔ sfmHap
- si selezioni la voce Separa tor above thie ì tam

Infine, per ognuno di questi sotto menu si definiscano ulteriori sottomenu, come visibile in
Figura B.10. 'i
In questo modo abbia.mo definito la struttura dei menu. Si osservi che in Figura B.10 è l
definito anche un menu Divisibilità, che per il momento ignoreremo. I
l

!
I
B.3. !vIENU

l
Figura B.10: Il Henu Editor.

A questo punto bisogna specificare le azioni da eseguire quando vengono selezionati i singoli
menu. Ancora una volta ci riferiremo alla proprietà Callback. Questa volta perb le callbaclc
non sono cree.te da guide, ma. è nostro compito scriverle completamen 'te. Nel caso di istruzioni
molto semplici Il compito è banale. Ad esempio, per le sfumature, pOSBiamoscrivere direttamente
l
nella casella Callback del menu edit or ahading tlat, shading taceted e ahadìng interp per
i rispettivi sottomenu. Le cose invece iniziano a complicarsi nella definizione delle mappe di
colore, in cni l'istruzione inizia a diventa.re più articolata; ad esempio, all'interno del sottomenu
Ho-eavremo
l
set(gcbf,'Colormap',hot)

e cosi via per gli altri sottomenu .


È chiaro che, appena il numero di istruzioni inizia ad aumentare, diventa disagevole digitare
tutto nella casella Callback, quindi dovremo scrivere delle vere e proprie function qa memorizzare
nel file guìEx4. rn.
Ad esempio, finora abbiamo considerato gli elementi della matrice C divisibili per 3, ma
ora proponiamoci di generalizzare l'analisi, includendo anche la divisibilità. per altri numeri pri-
mi. Definiamo quindi il menu A:Divisìbilità , e al suo interno 5 sottomenu per contemplare la
divisibilità per 2, 3, 5, 7 e 11.
Per ogni sottomenu, deAnia.mo una label (per 2, per S, e così via.) e una ta.g (menul, menu2,
ecc.). Quindi, nella casella Callback del primo sottomenu, quello con tag pari a menu1, scriviamo
guiEx4('menu1_cb',gcbo,(],guidata(gcbo}}

e cos\ via per le callback degli altri sot tomenu. L'istruzione precedente ha. il seguente significato :

I
guiEx4 è il file in cui è memorizzato il codice, menuLcb il nome della function da invocare, poi
abbiamo il puntatore all'oggetto corrente, una variabile vuota, da lasciare per future estensioni
e infine la funzione guidata, che crea. la struttura handles vista in precedenza.
I.
h

l
il
li
498 AP PENDICE D. CREAZIONE DI UN'INTERFACCIA UTENTE

Ecco quin<li come si presentà la funcLion r.enuLcb

fun ctio n varargout = menul_ cb(b, aveatdata , handlea , varargin)


X• gat{gcbf ,'U aerData' );
C"'X{l};
p•X{2};
C1.. rem(C,2} ==0;
aet(p, 'CData ' , Cl};
deealaziona(handlaa,1)

A questo punto i com andi dovrebber o essere chiari. L'unica novità è la funct ion d•Hleziona,
il cui comp ito è la.gestione del segno di spunto nelle voci del sottomenu. A questo scopo, si Umlta.
R.dellmlne.re I segni de. tutti I eottomenu e poi Inserirne uno nella poeiilone fissata. de.Isecondo
pl\ratne~ro:

fun ctio n deaaleziona (h,n)


:for i•1 :5 I

eval ( (' ■ et (b .manu•, numlatr(i}, ', ''c:hecked' •, • 'o ft' ')•))i


end
eval(('eet(h .manu',num2etr (n), ', ''c:hecked'', '' on '')' ) );

analogamente, in 111enu:Lcb inseriremo l' istruzi one deseleziona(ha.ndles ,2), ecc . Per concludere,
in Figura 8.11 è riportata u na esecuzione del programma.

I
. i

i'
I

Figura B.11: Il programma guiEx4 in esecuzione.

I.
B.4. USO DEL l'vIOUSE 499

B.4 Uso del mouse


Prima. di parlare degli attributi orientati all'uso del mouse è opportuno richiamare l'attributo
CurrantPoint; esso, sia. che sia visto come attributo di oggetti figure che di axes, contiene il
valore delle coordinate attuali del cursore del mouse; la differenza di comportamento è che nel
primo ce.so le coordinate sono espreS1Senelle Uni te correnti della flgul'e, mentre nel secondo le
unità di misura. sono quelle degli assi e il punto è visto sempre in tre dimensioni, anche per grafici
bidimensionali, infatti

get(gca,'CurrentPoint')

fornisce una matrice 2 x 3 in cui ogni riga contiene una tripla di coordinate {x, y, z ); nel ca.so
di grafici bidlmensiona.11 la teru coordinata (la quota.) è ovviamente flttizia., mentre nei ca.si
tridimensionali si tratta delle due coordinate estreme del eegmP.nto perpendlcolan a.Ilo schermo e
delimitato da.I pa.ralleplpedo che racchiude gli assi. SI noti c.he le coordinate sono ca.lcolate e.nche
se il puntatore non è ali 'interno degli assi correnti.
In questa maniera possiamo conoscere in ogni istante la posizione del puntatore in due di-
versi sistemi di coordinate, che possiamo chiama.re "assoluto" (le coordinate della figure, che a
loro volta possono essere espresse nelle diverse unità di misura coneentite dall 'attrìbuto Units)
e "utente" (le coordinate di axea, espresse nelle unità definite cll\gli Msi), Ora ci serve una
maniera. per eseguit1:1azioni tramite il mouse, delle CallBaclc. Gli oggetti dì tipo figure hanno
tre proprietà: 'WindowButtonDownFcn e 'WindovButtonUpFcn che sono delle callba.ck legate rispetti-
vamente allo schiacciare e rilasciare il pulsante del mouse, e WindowButtonHotionFcn, che è legata
al movimento del mouse; qua.le semplice esempio si digitì:

p=plot(0,0,'.' ,'Erasemode', 'none');


,et(gcf,'WindowButtonMotionFcn', .•.
['h•get(gca,''CurrentPoint'');•, ...
'ut(p, '':zdata' ',h(1,1) • "ydata'' ,h(1,2)) '))

per ottenere una traccia visibile del movimento del mouse sulla figure. corrente.
Tutti gli a.Itri oggetti hanno le. sola proprietà ButtonDovnFcn, une. callback attivata qunn<lo
il pulsante del mouse è schiacciato in prossimità dell'oggetto stesso.
La possibilità di distinguere fra pressione e rilMcio del pulsante del mouse, propria del solo
oggetto figure, è usata frequentemente per definire azioni quo.li lo "zoom" del!& finestra . Se ad
esempio vogliamo definire un& possibilità di ingrandJmento sull'Insieme di Mandelbrot presentato
a pag. 99, poselamo usare le seguenti Istruzioni. Si noti per inciso che la funzione predefinita
z.oolll(pa.g. 82) non può essere impiege.ta, perché un oggetto frattale possiede Infiniti livelli di
dettaglio e richiede l'esecuzione dl nuovi calcoli a.d ogni ingrandimento, quindi non è sufficiente
alterare i limiti degli assi correnti.
Memorizziamo i limiti correnti dell'e..reaau cui tracciare l'insieme di Mandelbrot nell'attributo
Uee~Data della figura corrente. Quindi definiamo un a.xaa e delle callba.ck per le azioni di te.sto
schiacciato e rilasciato, che devono aggiornare i limiti dell'area. Per quanto riguarda la struttura
dei dati, creiamo una ma.trice che contiene le coordinate del punto in cui è stato schia.ccia.to il
bottone del mouse in prima riga e quelle del punto in cui è stato rilasciato in seconda.
Infine, usiamo un pulsante per attivare il calcolo dell'lngrandimento 1 • La. rel&tiva callba.ck
lancia la runction mand, che è una v&rlante di quella. presentata. a. pa.g. 89 1 snellita nel numero di
punti da. considerare:

function mand(P)
x=linspace(P(1,1),P(2,1),60);
y~lìnspace(P(1,2),P(2,2},60);
1 Ovviamente il calcolo può essere eseguito come ultima istruzione di WindovButtonUpFcn ,
ma ciò implicherebbe che una pressione accidentale del bottone del mouse forzerebbe un inutile
ricalcolo.
500 APPENDICE B. CREAZIONE DI UN'INTERFACCIA UTENTE

(X,Y]•meshgrid(x,y);
C=X+j•Y; .
w~100•ones(size(C));
Zazeros(size(C));
tor n.,1:60,
Z•Z.•Z+C;
h•find(abe(Z)<2);
if -1sernpty(h),
W(h)an•ones(size(h) );
else
break
end;
end;
pcolor(X,Y,W);
u:ia( 'off');
ahading interp

Infine possiamo usare quattro !dit Text, con Tag xmin, xzcax,ymin e ymu sia per visualizzare
le coordinate scelte con il mouse che per selezionare da tastiera l'area su cui rappresentare
l'insieme di Mandelbrot. In figura B.12 è riportata una esecuzione del programma, dopo un
ingrandimento.
Di seguito sono mostrati i codici sorgenti delle callback . Si osservi l'azione di aggiornamento
degli Edìt Text

Figura B.12: La GUI per l'insieme di Mandelbrot.

tunet io n varargout a figurel_WindovButtonUpFen(h, eventdata,


ha.ndles, varargin)
'l. Stub tor WindowButtonUpFcn of the figure ha.ndles.figurel.
B.4. USO DEL MOUSE 501 I
i
pc•gat(handlae.a11i,
qcagat (gcbt,'UserData');
qc( 2,1:2)=pc(1,1 :2);
qc•sort(qc);
'CurrentPoint');
I
sat(gcbf, ' UaarOata',qc);
sot(handles.xmin,'String',num2atr(qc(1,1}));
1at(handlaa.XJDax, 1 String 1 ,num2atr(qc ( 2,1)));
sot(handlas.yrain,'String',num2str(qc(1,2)));
aet(handlas.ymax,'String',num2etr(qc(2,2)) );
r
!
¼ ------------------------------------------------------
fu.nction varargout • puahbuttonl_Callback(h, evantdata, ...
ba.ndlas, varargin}
¼ Stub tor Callback ot the uicontrol handles.puahbutton1.
mand(get(gcbt,'User')); !
tunction varargout • tigurel.lHndovButtonDownFcn(h,
evantdata, handl11 1 varargin)
,,. )
¼ Stub tor WindovButtonDovnFcn of the figure handles.tigure1.
pc•gat(handlu. aui, 'CurrantPoint ');
qc=gat(gcbf,'UserData')
qc(1,1:2)=pc(1,1:2);
aet(gcbf,'UserData',qc);
;

¼ ---------------------------------------------------------
l
functìon varargout • xmìn.Callback(h, eventdata, •..
handles, varargin)
¼ Stub tor Callback ot tha uicontrol handles,adìtl.
psgat(gcbt,'UaarData');
p(1,1)•atr2num(get(gcbo, 1
String'});
set(gcbf,'UserData',p);
'l, -- ----- -- ------------------------ ---- ---------------------
tunction varargout • x.ma.x_Callback(h, eventdata, •..
handles, vuargin) ·
7, Stub for Callback of the uicontrol handles.edit2,
p•get(gcbf,'U■ erData');
p(2,1)•atr2nu.m(get(gcbo,'String'));
1et(gebf, 1 U1erData 1 ,p);

function varargout • ymin.Callback(h, eventdata, ...


bandles, varargin)
X Stub for Callbaek of ~h• uicontrol handles.odit3.
p•gat(gebf,'U■ erData');
p(1,2)•■ tr2nu.m(get(gcbo,'String'));
11t(gcbf,'U ■ •rOata' 1 p)j

function varargout• yaiu.Calloack(h, 1v1ntdata, .•.


handle ■ , varugin) ·
X Stub for Callback of the uicontrol handlea.edit4.
pagat(gcbf,'UsarData');
p(2,2)matr2nu.m(get(gcbo,'String'));
11t(gebf,'U1erOata',p);

l
l 11
,.
,.
Bibliografia

Analisi numerica ed algebra lineare


Ahlfors L. V., Comple:z:Analysis, McGraw-Hill, New York, 1966.
Barnett S., Mr,trii: Methods /or Engineers and Scientists, McCraw-Hill, London, 1979.
Bellman R. 1 Jntroduction to Matri:t Analyaia, McGra.w-Hill, New York, 1870.
Coddington E. A., Levleon N., Theorv o/ Ordinary Diiferential Equo.tiona,McCraw•Hlll, New
York, 1955.
Comincioli V., Analisi Numerica, McCraw-Hill, New York, 1990.
Dongarra J. J., J. R. Bunch, C. B. Moler, G. W. Stewart. LINPACK User'a Guide, SIAM,
Philadelphia, 1979.
Cambridge Univereity Prese,Cambridge, 1966,
Eggleatone H. G., Con1.1e:1.it11,
Gantma.cher F. R., The Theory of Matricea, Cheleea, New York, 1959.
Golub G., C. van Loan, Matri~ Computations, Johne Hopkine Universlty Presti, Baltimore ,
1983.
Horn R. A., C. R. Johnson, Matri:z:Analysis, Cambridge University Press, Cambridge, 1985.
Lipschutz S., Linear Algebra, Scuaum, McGraw-Hi!I, New York, 1968.
MacDuffee C. C., The Tlieory o/ Matrices, Ch.elsea, New York, 194G.
MacLane S., G. Birkhoff, Algebra, Macmìllan, New York, Ul67.
Marden M., The Geometry o/ the Zeroa o/ Polynomial in a Comp/e:r; Variable, American
Mathematìcal Society, New York, 1949.
Press W. H., B. P. Flannery, S. A. Teukolsky, W. T. Vetterling, Numerica/ Recipes, Cambridge
Univereity Prese, Cambridge, 1987.
Rudin W., Real and Comple'l:Analysis, McGraw-Hill, New York, 1966.
Stoer J., R. Burlish, lntroduction to Numerica/ Analysìs, Sprìnger Verla.g,New York, 1980.
Wldder D. V., Ad11ancedCa/culua, Dover Publlcatlons, New York, 1989.

Sistemi dinamici e teoria del controllo


Anderson B. D. O., and J. B. Moore, Optimal Con.trol, Lin.ear Quadrotic Methods, Prentice
Hall, Englewood Cliffs, New Jersey, 1989.
Aetrom K. J., B. Wittenmark, Computer-Contro/led Syatem3, III ed., Prentice-Hall, New York,
1997.
504 Bibliografia

Balestrino A., G. Celentano, Teoria dei Sistemi, Liguori Editore, Napoli, 1982.
Bolzern P., R. Scattolini, N. Schiavoni, Fondamenti di Controlli Automatici, McGraw Hill,
Milano, 2000.
Cannon R. H., Dynomics of Phyaical Syatems, McGraw-Hill, New York, 1967.
Chen C., Linear Syatem· Theory and Design, Holt, Rinehart and Winaton, New York, 1984.
Chiacchìo P., S. Chiaverinl, Esercizi di Controlli Automatici, Llguori Editore, Napoli, 1996.
Desoer C. A., and M. Vidyasage.r, Feedback Sy,tems: Input-Output Propertiea, Ace.demlc Presa,
New York, 1975.
Franklin G. K., J. D. Powe!l, A. Emami-Naeini, Feedback. Control o/ Dynamìc Systems, III ed.,
Addison-Wesley, Reading, Massa.chusetts, 1995.
Franklin G. F., and J. D. Powell, Digitai Contro/ of Dynamic Syatema, III ed., Addiaon-Wesley,
Reading, Masaachusets, 1997.
Gandolfo G., Mathematical Methods and Models in Economie Dynamics, North-Holland, Am-
sterdam, 1971.
Hoppenatee.dt F. C., and C. S. Peakln, Mathematics in Medicine and the Li/e Sciences, Sprlnger
Verlag, New York, 1992.
Ja2winski A. H., Stochastic Processes and Filtering Theory, Academic Press, New York, 1970.
Kailath T., Linear Systems, Prentice Hall, Englewood Cliffs, New Jersey, l!l80.
Khal!l H. I{., Nonlinear Sy.ttema, Ma.cmillan, New York, 1992.
Kueera. V., Diacrete Linear Control, John Wiley, New York, 1979.
Luenberger D. G. 1 Jntroduction to Dynamic Systems, John Wiley, New York, 1979.
Maciejowskì J. M ., Multiuariable Feedback Design, Addison-Wesley, Wokingha.m, 1989.
Marro G., Controlli Automatici, Zanichelli, Bologna, 1987.
McKendrick A. G., Mathematics Applied to Medical Problema, Royal Society, Edinburgh, 1926.
Meirovitch L., Element.s o/ Vibrotìon Analysis, 2nd edn., McGraw-Hill, New York, 1986.
Sciavicco L., and B. Siciliano, Modeling and Control o/ Robot Manipulators, McGraw-Hill, New
York, 1996.
Smith C. A., A. B. Corripio, Principles and Practice o/ Automatic Procesa Control, II ed., John
Wiley, New York, 1997.
Thompson J. M. T., and H. B. Stewart, Noniinear Dynamics and Chaos, John Wiley, Chich•
ester, 1986.
Vidyaaage.r M., Nonlineor Syatems Analysis, Prentice Hall, Englewood Cliffs, New Jersey, 1993.

Testi su MATLAB
Cavallo A., R. Setola, F. Vasca, Using MATLAB, Simulink and Control Syatem Toolboz. A
Practical ApproacA, Prentice Hall, London, 1996.
MathWorks Inc., MATLAB. The Language o/ Technica/ Computìng. Using MATLAB, Math-
Works Jnc., Natick, Ma.ssachusets, 2001.
MathWorks lnc., SIMULINK. Dynamic Syatem Simulation /or MATLAB. Using Simulink,
MathWorks Inc., Natick, Ma.ssachusets, 2001.
Math Works Inc., Control Systern Toolboz. For Use with M ATLA B. Getting Started, Math-
Works Inc., Natick, Massachusets, 2001.
Bi bliografìa 505

Sha.mplne L. F., J. Kienenka, M. W. Reichelt, Soluing Boundary Value problemi Jor Ordinarv
Differential Equationa in MA T LA B with bvp4.c,
ftp://ftp.mathworks.com/pu b / doc / papers/bvp /tutorial. pdf.

Miscellanea
Bailey N. T. J., The Mathematical Theory o/ Epidemica, Hafner, New York, 1967.
I
Boulez P., Penaer la Muaique.aujourd'lwì, Schott's Sòhne, Mainz, 1963.
Devaney R. L., A First Course. in Chaotic D11namicalSyatema, Addison Wesley, Ree.dlng,
Maasa.chueetts, 1992.
Prìeberg F. K., Musica e:z:Machina, Verlag U\lstein, Berlin, 1960.
Quenau R ., Btiton, Chiffres et Letters, Gat\imard, Paris, 1965.
Schonberg A., Harmonielehre, Universal Edition, Vienna, 1922.
Zaripov R. C., .Kibemetika i Muzyka, Ne.kua. Akademli SSSR, Moscow, 1971.

\.
Indice analitico

\ , 40, 52, 60 asech, 43


l, 46, 56 asin, 43
+, 40, 52 asinh, 43
-, 40, 52 AspectRatio, 474
•, 40 , 52 Assignement, block, 315
/, 40, 52 atan, 43
~,40,53 atan2, 43
'•, '10 11.tanh,43
./, 40 Atomic Subey11tem 1 block, 265
. -, 40 11.ugatate, 372
• ', 52 Auto Correlator, block, 333
: , lO, 29, 30 Autovalori e autovettori, 6 l
;, 7 Averanging Power Spectral Density, block,
<, 45 333
(,a, 45 Averanging Spectrum Analyzer, block, 333
... , 45 axea, 467,470,474
>, 45 uia, 81, 467, 474
>=, 45
• t 46 Backlash, block, 311
-,., 45 balraal, 371
Band-Limited White Noise, block, 324
abs, 41 bar, 85
Abs, block, 304 Base del nullo, 59
acku, 424 BaBe ortonormale, 59
aco1 1 43 Bitwiae Logica! Operator, block, 304
aco1h, 43 Blocchi pet'Sonalizzati, 256
acot, 43 Blocchi personaJiHazione, 269
acoth, 43 Blocchi proprietà, 194
acsc, 43 bode, 391, 45_1
acsch, 43 Box, 475
Action Port, block, 268, 330 breù, 125
Algebra.icConetraint, block, 236, 304 Bue Crea.tor, block, 315
a.ll., 56, 58 Bue Selectlon, block, '2~1
alpha, 102 Bus Selector, block, 315
Alpha.Data, 480 Bue Signa!, 249
alphamap, 103 BusyActiÒn, 489
and , 46 ButtonDownFcn, 470, 499
angle, 41
Annotazioni in Simulink, 190 c2d, 44L, 446
ans, 40 Campionamento, 440
eny, 56, 58 eanon, 365
append, 371 Caratteri, 32, 475
area, 85 Cardlolde, LOB,454
uec , 43 cart2pol, 44
INDICE ANALITICO 507

cart2aph, 44 Conve1sione continuo-discreto, trasformazione


Cartesia.n to Palar, block, 334 bilineare, 4.44
Cartesia.n to Spherical, block, 334 Conversione discreto-continuo, 44.6
case, 124 Conversione tra rnµpresenta.zioni, 364
cat, 11, 24 convhull, 117
caxis, 97,475 cos, 43
Ca.yley-Ha.rnilton, 113 cosh, 43
CData, 480, 48 l cot, 43
cdt2rd!, 61 coth, 43
ceil, 40 cputima, 40
cell, 14 CreateFcn, 470
celldiap, 26 Criterio di Nyquist, 394, 406, 419
cellplot, 26 Cross Correlo.tor, block, 333
Celsious to Fahrenheit, block, 334 cec, 4:1
Check Box, 486 csch, •13
ctrb, :IGl
Children, 468, 470, 476
ctrbf, 363
Chirp Signa.i, block, 324
CurrentAxes, 473
chol, 63
CurrentFigure, 471
Cicloide, 107
Curre11tObject, 473
clau, 142
CurrentP01nt, 473, 499
clc, 15 c:ylinder, 94
clear, 15
CLim, 475
D Flip-Flop, block, 333
CLimMode, 475
D La.tr:h Flip-f'lop, block, 333
Clipping, 470, 478
d2c, 4<16
clock, 40
d2c:D\1 •146
Clock, block, 204, 325, 333
Data Store Memory, block, 316
cloH, 73
Data Store Read, block, 316
Coefficiente di smorzamento, 343, 403, 447, Data Store Write, block, 316
453 Data Type Conversion, block, 212, 316
Color, 472, 475, 481 date, ,10, 130
Colore, 74, 96 datevec, 130
Colore, gradazioni di, 98 dblquad, 165
Colore in Simulink, 195 ddamp, 447
Colore, ma.ppe di, 96 ddcgain, 448
colormap, 96, 472 Dea.d Zone, block, 312
Colorme.p, 472 Debugger, 132, 288
ColorOrder, 475 deconv, 111
Columb & Viscous Friction, block, 311 Degre~s to Ra.dius, block, 334
Combinatoria.I Logie, block, 284, 305 DeleteFcn, 470
compan, 65 DeMux, block, 249
Complex to Ma.gnitude-Angle, block, 305 Demux, block, 317
Complex to Ree.!-Jmag,block, 306 DerivaLive,black, '294
computer,40 d11tic 11 45o
cond, 68 d1t, 54
Configurable Subsystem, block, 329 dgram,448
conj, 41 diag, :11
Consta.nt, block, 325 Diary, 471
contour, 92 Diary File, 471
Controllabilità, 361, 366 di!f, 164
Controllo digitale, 455, 458 Digitai Clock, block, 205, 325
Controllo ottimo, 425, 456 dimpulse, 41,0
conv, 111 dinitial, 450
Conversione continuo-discreto, 439 Direct Look-Up Tuble (n-D), block, 300
508 INDICE ANALITICO

Discrete Filter, block, 297 Fa.hrenheit to Celeious, block, 334


Discrete Sta.te-space, block, 298 Fattorizzazione di Cholesky, 62
Discrete Trans(er Fcn (with initial output), Fattorizza.2ione LU, 59
block, 331 Fa.ttorizzazione QR, 63
Discrete Transfer Fcn {with initial state), Fattorizzazione spettrale, 61
block, 331 Fcn, block, 206, 251, 300
Discrete Transfer Fcn, block, '297 fua.ndle, puntatori a funzioni, 163
Discrete Zero-Pale, block, 297 figure, 73,467,469,472
Discrete Zero-Polo (with initial output), block, File .M, 125
331 Filtro di Ka.lman, 430, 455
Discrete Zero-Polo (with initia.l sta.te), block, timinsearcb, 166
332 tind, 57, 58
Discrete-Time Integra.tor, block, 298 findobj, 469
Discretizzazione, 287 fi11d1tr, 33
dilplAy, 145 fini te, 58
Display, block, 322 First-Order-Hold, 444
dlinmod, 287 First-Order Hold, block, 299
dlmraad, 18 tb:, 40
dlqe, 455 Flìp Block, 195
dlqav, 455 Flip Name, 194
dlqr, 455 tlipdim, 34
dlqry, 456 fliplr, 34
dlsim, 450 Hipud, 34
Dot Product, block, 206 1 306 Floa.tlng Ber Plot , block, 333
dreg, 456 Floa.ting Scope, block, 202, 322
Drop Shadows, 194 tloor 1 40
d11ort1 448 tminbnd 1 166
datep, 450 Font in Simulink, 194
FontAngle, 4.761 4.81
echo, 131, 471 FontName, 476, 481
Echo, 471 FontSize, 476, 481
EdgeColor, 480 FontStrikeThrough, 476, 481
Editabte Text, 487 FontUnderline, 476, 481
Editing, 481 FontWeight, 476, 481
eig, 61_ fo-r, 42, 124
eliminazione gB.Ussiana, 59 .For Itera.tor, block, 267, 330
Enabled, block, 265, 329 Forma. canonica, 372
Enabled Subaystem, block, 265 Forma di Kaiman, 362, 363
eps, 39 forma.t, 19
Equazione di Riccati, 425, 428, 455 Fermat, 471
Equazioni di fferenzia.ll 1 223 FormatSpadng, 471
Equazioni differenzia.li in Simulink, 228, 285 fplot, 90
Era.seMode, 479-481 Frame, 487
esort, 345 Fratti semplici, 113, 340
Espansione scalare, '247 From File, block, 204, 326
estim, 429 From Workspace, block, 203, 204, 325
eval, 130 From, block, 258, 317
e:xist, 58 function, 126
e:xp, 43, 51 Function-Call G enerator, block, 317
exp1111 56
twun, 56
axpm1, 56 tzero, 165
Extent, 481
aye, 31 Gain, block, 206 1 306
gca, 468
FaceColor, 480 gcbt, 486
INDICE ANA.LITICO 509

gcbo, 488 inv, 53


gcd, 41 InvertHardcopy, 473
gct, 468 invhilb, 65
geo, 468 iparmute, 35
get, 468 isa, 142
Goto Tag Visibility, block, 259, 318 iu111pty, 58
Goto, block, 258, 317 iaieee , 58
gradient, 164 iaint, 58
gram, 371 ia111ember 1 119 ·.._
grid, 75, 475 ilnan, 58
griddat& 1 116 i11tr, 58
GridLineStyle, 475 Iterazione, programmazione, 124
Ground, block, 326
Group, 256 j, 39, 42
gtext, 76 JK Flip-Flop, block, 334

hadamard, 65 label in Simullnk, 191


handle, 467 icm,41
bankel, 65 legend 1 81
help, 20, 21 length 1 28
help, creazione di, 127 light, 470
hess, 64 line, 467,470,478
Hide Name, 194 Linea.rizzazione, 286
hilb, 65 LineStyle, 480
hi•t, 89 LineWidth, 475, 478, 480
Hit Croseing, block, 233 1 318 linmod, 286
hold 1 79, 81 1 475 linapaca 1 29
Horizonta.lAlignment, 481 List Box, 487
horzcat, 154 load, 15, 16
log, 43
i, 39, 42 log10, 43
IC, block 1 319 log2, 43
If, block, 267, 330 Logica.I Operator, block, 307
i1 ...• 1.. , 124 loglog, 84
imag, 41 logm, 56
ima.ge, 470, 480 logspac11, 29, 392
Import Data, 16 Look Up Table (2-D), block, 208, 301
impuhe, 380 Look Up Table (n -D), block, 208, 302
ind2sub, 28 Look Up Table, blor,k, 208, 301
lnt, 39 loop algebrici, 234, 236
initia.l, 384 lqe, 431
ialine, 163 lqe2, 432
Inport, block, 204, 257, 326 lqed, 432
input, 131 lqew, 432
int2•tr, 34 lqr, 426
Integrator, block, 205 1 234, 294 lqr2, 428
in terp1, 115 lqrd, 427
interp2, 116 lqry, 427
interp1t, 115 lailzi, 382
Interpolation (n-D) PreLook- Up, block, 301 laqnonneg, 60
Interpo\ation (n-D) Using Prelook-Up, block, lu, 59
209 Luogo delle radici , 401, 416, 4.53
Interpolazione, 115
[nterruptible, 470, 489 111agic1 65
intersect, 118 Magnitude-Angle to Complex, bloclc, 307
510 INDICE ANALITICO

Manuat Switch, block, 312 or, 46


ma.rgin,408 orth, 59
Margine di ampiezza , 407 Osservabilità, 363
Margine di fase, 407, 411 Osservatore, 428
Marker, 480 other11ise, 124
MarkerSfae, 478, 480 Outport, block, 202, 257 , 322
mask , 259 overloading, 146
Math F\mctìon, block, 307
MATLAB Fcn, block, 302 Pa.perPosition, 473
Matrice echalon, 63 PaperSize, 4 73
Matrice, di Heseenberg, 64 PaperType, 473
Matl'lce, numero di condizlonameuto, 68 Pe.perUnite, 473
MnLrix Concatena.tlon, block, 319 Parametri di un blocco, l!J5
Matrix Gain, block, 308 Parent, 468, 470
mu, 53 pascal, 65
mean, 54 pateh, 470
Memory, block, 238, 294 pause, 131
MenuBa.r, 473 pcolor, 481, 495
Merge, block, 319 pennute , 35
muh, 92,480 pi, 39
m11hc, 93 PID Controller (with Approximated Deriva-
muhgrid, 92, 116 tive), block, 332
MeshStyle, 480 PIO Controller, block, 332
meshi:,93 pie, 85
Metodo di Eulero, 224 pinv, 60
min, 53 placa, 424, 429
Minimi quadra.ti, 60 plot, 73, 78, 79 1 467, 468, 478
MlnMax, l>lock, :108 plot3, 94, 478
minreal, 371 plus, 146
minus, 146 Pointer, 4 72
mouse, uso in Simulink, 191 PointerLocation, 472
Multip ort Switch, block , 312 PoiolerWindow, 471
Mux, block, 249, 320 pol2cut, 44
polar, 85
NaN , 39 Polar to Ca.rteaia.n, biock, 334
nargin, 39, 128 Polinomio di Chebyshev, 121
nugout, 39, 128 Polinomio di Legendre, 122
ndim1, 28 Polinomio minimo, 120
NextPlot , 4 75 Polinomio, caratteristico, i 11
ngrid, 410 Polinomio, rappresentazione, 111
nichols, 395,409,452 poly, 54, 111
Nome di un blocco, 190 polyder, 113
norm, 54 polytit, 115
not, 46 Polyn omial, block, 302
null, 119 polyva.l, 112
nu.m211tr,34 polyvalm, 112
NumberTitle, 473 Pop-up Menu, 487
nyquiat , 394, 406, 408, 452 Poaition, 473, 47<1,481
pov2, 43
obev, 363, 429 Power Spectral Density, llluck, 333
obsvt , 363 PreLook-Up Index Search, block, 209, 303
Oggetti grafici, 467 print, 10'1
ones, 31 Probe, block, 212, 320
Operatori punto, 40 Prodotto scalare, 40
opt iruset, 166 Product, block, 206, 308
INDICE ANALITICO 511

Pseudo-inversa, 60 Rotazione piana, 63


Pulsa.zione naturale, 343, 403, 447, 4.53 round, 40
Pulse Generator, block, 326 Rounding Function, block, 309
Puntatori, 467 rret, 63
Punto di equilibrio, 287 rsf2csf, 64
Push Button, 486
pmap, 354, 402 S-Function Builder, block, 303
S-Function, block, 303
qr, 63 Sample Time Colora, 281
quad, 165 Saturation, block, 314
ctuadl, 166 ■ ave, 15, 16
Que.ntizer, block, 313 Sce.ler Expanslon, 247
Schemi Slmulink, 181, 189
Radio Button, 487 achur, 64
Radians to Degrees, block, 334 Schur, decomposizione, 64
Ramp, block, 327 Scope, block, 184, 201, 322
rand, 31, 65, 89 ScreenSize, 472
ra.ndn, 31 1 65 Script file, 125
Random Number, block, 327 Sl!C 1 •13

rank, 54, 128 ■ ech, 43


ret, 41 Segno.li 1-D, 248
Rate Lirniter, block, 313 Segno.li2- D, 248
rata, 41 Segnuli vir tue.lì, 210
rcond, 58 Seleci.ed, 470
real, 41 Selector, block, 251, 321
realmax, 39 Selezione multipla, 193
rulmin, 39 Seleiione, programmazione, 124
Ree.1-tmag to Complex, block, 309 umilogx., 84, 476
rectugle, 470 Sequ«>nia, prograinmatlone, 124
reg, 433 urie,, 346
Regolatori standard, 390, 417 ut, 468
Relational Operator, block, 309 setdiff, 118
Relay, block, 314 setxor, 120
rem, 41, 46 agrid, 404
Rendering, 473 shading, 98
Repee.ting Sequence, block, 327 sigma, 394, •152
repma.t, 31 aign, 41
reahape, 35 Sign, block, 310
Reshape , block, 320 Signa! Properties, 192
residue, 113,378,449 Signa! Dimcnsions, 247
Resize, 473 Signa! Generator, block, 327
Reti corretrici, 421 Signa! Specification, block, 212, 321
Reti correttrici, 410 sin , ·13
Retroazione, 423, 433 Sine Wave, block, 328
Retroazione di stato, 424 linh, 43
:return, 132 1ize, 28
Riduzione di modelli, 369, 370 alice , 103
rlocfind, 404 Slider, 487
rlocus, 402 Slider Gain, block, 310
root, 469,470 sort, 53
roots, 112 sortro11s, 56
rose, 90 Spectrum Analyier , block, 333
rot90, 34 1ph2cart , H
Rotate Block, 195 Spherical to Cartesian, block, 334
R.otation, 481 epline, 115
512 INDICE ANALITICO

1qrt, 40 TickLength, 475


1qrtm1 56 Tipi di linea e punto, 74
squeeze, 25 title, 75
SR Flip-Flop, block, 334 .'ritle (attributo), 476, 481
u, 368 To File, block, 202, 251, 323
.u2sa, 365 To Workapace, block, 199, 323
udau., 360 ~ toeplitx, 65
ssaehct, 371 Toggle Button, 486
Stabilità, 406, 416 trac:e, 54, 126
stair, 88 Transfer Fcn (witn initia.l outputs), block,
Sta.te Space, block, 246, 295 332
State-Space {with initial outputs), block, 332 Transfer Fcn (wìth initìal states), block, 332
Static Tex.t, 487 Transfer Fcn, block, 295
stem, 88 Tranaport Delay, block, 235, '296
step, 379 Trasformazione di Hausolder, 63
Step, block, 328 tra.sperenn, 473
STOP Simulation, block, 236, 323 Traapoeizione, 51, 52
str2mat 1 32 Trlangolarizza2ione 1 59
1tr2num, 34 Trlgger, block, 265 1 329
atrcmp, 33 Trigonometrie Function, block, 311
1trcmpi, 33 t-ril, 65
1trncmp, 33 tri1111 287
1trncmpi , 33 triu, 65
istrrep , 33 Type, 469 1 470
,truet, 13 turo, 354
1trvcat 1 33
1ub2ind, 28 uicontextmenu, 470, 495
aubplot, 83, 467 uicontrol, 470
1ub1asgn, 153 uimenu , 470, 495
subsref, 144 Uniform Random Number, block, 328
Subsystem, block, 265 union, 118
sum, 54 unique, llO
Sum, block, 310 Unit Delay, hlock, 299
aurf , 92, 480 Unità immaginaria, 30, 42
aurfa.ce, 470, 480 Unite, 471, 472, 474, 481
1urfc:, 93 UserDe.ta, 470
surfl, 100, 480
avd, 62 V~i singolar!, 62, 394
111itch, 124 vander, 65'2
Switch Ce.se, bloclc, 314, 331 Variabili locali, 126
Switched derivntive for \inearization, block, Varìable Tranaport Delay, block, 235, 296
334 Vero, 46
Switchect transport de\ay for linearlaatlon, v,rtcat, 154
block, 334 VerticalAlignment, 481
Viell, 91, 47fi
Tag, 470 View (attributo}, 475
tan, 43 Visible, 470
t&nh, 43
Termina.tor, block, 323 11hile, 124
testi, ìn Simulink, 190 While Iterator, block, 268, 331
text, 76, 470, 481 Wide nonsca.lar line, 247
Text, -176 Width, block, 212, 248, 321
tu:tread, 19 11ilkin11on , ij5
tfdata, 339 WindowButtonDownFcn, 499
TickDir, 475 Window Bu tton MotìonFcn, 499
INDICE ANALITICO 513

WindowButtonUpFcn, 499

XColor, 476
XData, 480, 481
Xdata., 479
XDir, 476
XGrid, 476
XLabel, 476
xlabel, 75
Xlabel, 481
XLim, 476
XLimMode, 476
xor, 46
XScale, 476
XTick, 476
XTickLabel, 476
XY Graph, b\ock, 202, 324

YData, 480, 481


Ydata, 479
yla.bel , 75
Ylabel, 481

ZData, 480
Zdata, 479
Zeri di tre.Bmiseione, 354
Zeri, dì polinomio, 112
Zero Order Hold, b\ock, 300
zero-crossing detection, 233
Zero-Pole (with initial outputs), block, 333
Zero-Pote (with initial :itates) , block, 333
Zero-Pole, block, 296
zeros , 31
~grid, 453
ZOH, 442
zoom,82
zpkdata, 340

l .
...

Potrebbero piacerti anche