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 -