Sei sulla pagina 1di 14

Fondamenti di Automatica

Introduzione
Introduzione al programma MatLab MatLab (Matrix Labolatory) è un linguaggio di
programmazione orientato ad applicazioni
scientifiche e numeriche. È caratterizzato da:
‰ vasto insieme di funzioni e comandi predefiniti
‰ possibilità di implementare le proprie funzioni
di libreria personalizzate, come in un normale
linguaggio
Fondamenti di Automatica (01AYS)
Massimo Canale ‰ disponibilità di un ampio pacchetto di tools
Dipartimento di Automatica e Informatica per diverse applicazioni (Analog and Digital
Politecnico di Torino Signal Processing, Simulazione di sistemi
dinamici)

Introduzione
Modalità interprete (1)
Può essere utilizzato in due modalità ƒ usata di solito per poche e semplici operazioni
¾ Modalità interprete dei comandi: equivale (es: MatLab usato come calcolatrice)
ad un uso “shell”. Esegue i comandi via via ƒ per controllare il risultato dell’esecuzione degli
che vengono scritti sulla tastiera dopo al script (es: verifica su alcune variabili o lettura
prompt (“ >> “) dei grafici finali)
¾ Predisponendo dei “file script”, cioè dei file ƒ per lanciare gli script
di tipo testo (ma con estensione ‘.m’) ƒ per utilizzare l’help in linea
contenenti la sequenza di istruzioni che
normalmente sarebbero state introdotte da
tastiera.

M. Canale 1
Fondamenti di Automatica

Modalità interprete (2) Esempio: MatLab come calcolatrice


ƒ Si presenta ƒ Permette di valutare espressioni numeriche di
attraverso la qualsiasi complessità.
Command ƒ Esempio: per calcolare 4+sin(0.2ππ)+ e(0.74π) si
Window che digita al prompt
fornisce ƒ >> 4 + sin(0.2*pi) + exp(0.74*pi)
l’accesso ƒ ans=
diretto ƒ 14.2354
all’interprete ƒ Il risultato viene memorizzato nella variabile
dei comandi “ans” che contiene sempre l’ultimo valore
(prompt) calcolato (eventualmente richiamabile per
calcoli futuri)

Esempio: MatLab come calcolatrice Esempio: MatLab come calcolatrice


ƒ MatLab mette a disposizione (sia al prompt che negli ƒ Calcolare il modulo di 2+3i:
script) un vasto insieme di funzioni predefinite. Le più >> abs(2+3*i)
comuni sono ans=
¾ Funzioni trigonometriche: sin, cos, tan, acos, asin, atan… 3.6056
¾ Esponenziale e logaritmo (naturale ed in base 10): exp, log,
log10…
ƒ Calcolare 20log10(|2+3i|/π
π):
>> 20*log10(abs(2+3*i)/pi)
¾ Funzioni per operare sui numeri complessi: abs (modulo),
angle (fase), real (parte reale), imag (parte immaginaria)… ans=
1.1966
ATTENZIONE:
tutte le funzioni trigonometriche considerano gli
angoli introdotti in RADIANTI.

M. Canale 2
Fondamenti di Automatica

Valori non validi Script (1)


ƒ Nel caso in cui alcune operazioni numeriche ƒ I file script rendono l’uso di MatLab molto più
agevole, poiché permettono di scrivere dei veri
forniscano valori numericamente non accettabili e propri programmi per eseguire operazioni
MatLab segnala un “Warning” e fornisce come anche molto complesse.
risultato Inf (infinito) oppure NaN (not a ƒ In caso di errori è sufficiente correggere il
number). codice errato e lanciare nuovamente lo script
ƒ Esempi: senza dover reinserire manualmente tutti i
>> 5/0 >> 0/0 comandi.
Warning: Divide by Warning: Divide by ƒ Uno stesso script può essere riutilizzato
zero. zero. semplicemente modificandone i parametri (es:
ans = ans =
per la simulazione di sistemi).
Inf NaN

Script (2) Script (3)

ƒ In uno script possono essere introdotti tutti i ƒ L’interprete cerca lo script nella directory
comandi utilizzabili al prompt. “work” oppure nella directory corrente.
Prima di lanciarlo è perciò necessario
ƒ Lo script deve avere estensione “.m” posizionarsi nella directory corretta
(es: “pippo.m”) (utilizzando il comando “cd nome directory”)
ƒ Uno script viene lanciato al prompt
digitandone il nome ƒ Di default la directory di lavoro è “work”
es: >> pippo
(il contenuto del file viene interpretato ed eseguito
dall’interprete dei comandi) ƒ Per lavorare sulle directory si possono inoltre
usare tutti i classici comandi DOS (cd, dir,
mkdir,…)

M. Canale 3
Fondamenti di Automatica

Esempio Script (4)


ƒ Esempio di comandi per passare dalla directory “work”
alla directory “files”: ƒ Negli script è possibile inserire dei commenti
» pwd utilizzando il carattere “%” (ciò che segue non
ans =
restituisce la verrà eseguito)
e:\programmi\matlab\work
» dir directory corrente es. % questo è un commento
. .. es. % 5+3 la somma non viene eseguita
» cd .. ƒ Per disabilitare l’output su video dei comandi
» dir
. .. bin help toolbox files contenuti nello script si pospone al comando il
simulink work carattere “;”
» cd files es. a= 5;
» pwd b= a+3 % su video compare solo
ans = % il valore di b
e:\programmi\matlab\files

Creazione di uno script Editor di MatLab

ƒ Selezionando la voce “M-file” dal menu File/New si


accede all’editor integrato in MatLab per la creazione
degli script

M. Canale 4
Fondamenti di Automatica

Variabili (1)

ƒ È possibile definire variabili di vario tipo, per la


costruzione di espressioni simboliche
es. >> a=4; b=2;
Lo spazio di lavoro >> a*b
ans =
8
ƒ A differenza di quasi i tutti i linguaggi di
programmazione le variabili non vanno
dichiarate. La dichiarazione coincide con
l’assegnazione ed il tipo è scelto
automaticamente da MatLab

Variabili (2) Variabili (3)

ƒ Ogni variabile definita viene conservata in ƒ Per cancellare una variabile si usa il comando
memoria, nel Workspace “clear nomevariabile”
es. >> clear pippo
ƒ Il comando “whos” mostra una lista delle ƒ Per liberare completamente la memoria si può
variabili in uso e dello spazio di memoria usare “clear all”
utilizzato es. >> clear all
es. >> whos
Name Size Bytes Class ƒ Per ragioni di “pulizia” è meglio liberare sempre
pippo 1x1 8 double array il Workspace prima di ogni esecuzione di uno
pluto 1x1 8 double array script. Per questo motivo conviene mettere
Grand total is 2 elements using 16 bytes
l’istruzione “clear all” in testa ad ogni script.

M. Canale 5
Fondamenti di Automatica

Variabili (4) In caso di bisogno…


ƒ Mediante i comandi “save” e “load” è possibile
ƒ Il comando “help nomefunzione” restituisce una
salvare su file le variabili del Workspace
rapida descrizione e la sintassi della funzione
9 save nomefile var1 var2 …
salva nel file nomefile.mat le variabili elencate stessa
9 load nomefile var1 var2 …
ƒ Digitando il solo comando “help” si ottiene
carica dal file nomefile.mat le variabili elencate l’elenco di TUTTE le funzioni di MatLab divise
9 save nomefile per categorie
salva tutto il workspace in nomefile.mat ƒ Attenzione: i nomi sono in inglese, pertanto se
9 load nomefile per esempio cercate la sintassi del comando
carica tutte le variabili contenute in nomefile.mat radice quadrata dovrete digitare “help sqrt”
(help square root)

… guardate qui!
ƒ Sito web di Mathworks:
www.mathworks.com
Cercando la voce “support” è possibile trovare i
manuali di MatLab in formato .pdf
ƒ “Guida Operativa a MatLab, SimuLink e Control Matrici e Vettori
Toolbox”, A. Cavallo, R. Setola, F. Vasca
Liguori Editore, 1994

ƒ http://webservices.polito.it/matdid/3ing_eln_L5811_TO_0/

M. Canale 6
Fondamenti di Automatica

Creazione di matrici e vettori Creazione di matrici e vettori: esempio 1


ƒ Le matrici (ed i vettori) vengono create in modo 1 2 
ƒ Es. Creazione della matrice A=  
analogo alle variabili, introducendo i valori 3 4 
secondo una determinata sintassi.
separatore di colonna
ƒ MatLab si occupa di allocare la memoria e di >> A= [1,2;3,4]
controllare la dimensione della matrice finale A =
1 2 separatore di riga
¾ Gli elementi di una stessa riga sono separati 3 4
dalla virgola (“,”) oppure da uno spazio >> A= [1 2;3 4]
¾ Le colonne sono divise dal punto e virgola (“;”) A =
¾ La matrice è racchiusa tra parentesi quadre 1 2
3 4
(“[ ]”)

Creazione di matrici e vettori: esempio 2 Accesso a singoli elementi

ƒ Es. Creazione del vettore B= [6 7 8] ƒ Ai singoli elementi di una matrice si accede


>> B= [6,7,8] specificandone l’indice di riga e colonna
B = ƒ Es. Nel caso della matrice A= 1 7 
3 4 
6 7 8  
9
ƒ Es. Creazione del vettore C=   >> A(1,2)
>> C= [9;10] 10 ans =
7
C =
Infatti “7” è il valore collocato in riga 1 e colonna 2
9
10 ATTENZIONE: La numerazione degli indici parte dal
valore 1, diversamente dai normali linguaggi di
programmazione (es. nel C si parte da 0)

M. Canale 7
Fondamenti di Automatica

Accesso a righe o colonne Sottomatrici


ƒ Per accedere a intere righe o colonne si ƒ Data una matrice definita come
inserisce il simbolo “:” nella locazione desiderata >> B=[1,2,3;4,5,6]
B=
ƒ Es. Selezionare la prima riga di A 1 2 3
>> A(1,:) 4 5 6
ans=
1 7 ƒ la sottomatrice indicata si estrae indicando il range
di righe e colonne d’interesse con l’operatore “:”
ƒ Es. Selezionare la prima colonna di A >> B(1:2,2:3)
>> A(:,1) ans=
ans= equivale a “seleziona gli
2 3 elementi dalla riga 1 alla 2
1 equivale a “seleziona
5 6 sulle colonne dalla 2 alla 3”
3 tutte le righe della prima
colonna”

Operazioni su matrici (1) Operazioni su matrici (2)


1 2 
ƒ Sulle matrici è possibile utilizzare gli operatori “+,- ƒ Data la matrice A=  
,*,^” a patto che siano compatibili le dimensioni 3 4 
degli operandi ƒ La matrice trasposta si ottiene con ’:
>> A’
ƒ L’operatore di divisione assume il seguente ans=
significato: 1 3
A/B ⇒ A*B-1 2 4
A\B ⇒ A-1*B ƒ L’inversa chiamando la funzione “inv()”:
ƒ Gli operatori “.*”, “./”, “.^” permettono operazioni >> inv(A)
ans=
su vettori elemento per elemento. -2.0000 1.0000
es. [1 2 3] .* [2 2 2] = [2 4 6] 1.5000 -0.5000

M. Canale 8
Fondamenti di Automatica

Operazioni su matrici (3) Matrici particolari


ƒ Altre funzioni di utilità generale per operare sulle ƒ eye(n) ⇒ matrice identità di dimensione nxn
matrici sono: ƒ zeros(n,m) ⇒ matrice composta di soli zero di
¾ det(): calcola il determinante della matrice
dimensione nxm
¾ size(): restituisce la dimensione della matrice
ƒ ones(n,m) ⇒ matrice composta di soli uno di
¾ rank(): calcola il rango della matrice dimensione nxm
¾ poly(): restituisce il polinomio caratteristico ƒ rand(n,m) ⇒ matrice nxm con elementi distribuiti
associato alla matrice in modo uniforme tra 0 e 1 (generati in modo
¾ eig(): calcola gli autovalori. Se usata come pseudocasuale)
[X,Y]= eig() allora le colonne di V sono gli
autovettori della matrice, Y è una matrice
diagonale di autovalori

Vettori Vettori come sequenza di valori (1)


ƒ I vettori possono essere usati in MatLab anche per ƒ I valori contenuti all’interno del vettore possono
altri scopi, oltre che come matrici: essere equispaziati linearmente. Ciò si ottiene in
¾per rappresentare una sequenza di valori diversi modi:
(per esempio nella simulazione un vettore 1. Specificando valore iniziale, passo di incremento
può contenere la “base tempi” da applicare al e valore finale, tutti separati da “:”
sistema oppure i valori della simulazione) >> V=(1:0.5:3) valore
finale
¾per rappresentare un polinomio (in MatLab V=
valore iniziale 1.000 1.5000 2.000 2.5000 3.0000
un polinomio è visto come un vettore
Il passo di default è 1, che può essere omesso
contenente i suoi coefficienti) >> V=(0:5) passo
V= d’incremento
0 1 2 3 4 5

M. Canale 9
Fondamenti di Automatica

Vettori come sequenza di valori (2) Vettori come sequenza di valori (3)
2. Utilizzando la funzione “linspace(a, b, n)” dove ƒ È anche possibile generare degli spazi non lineari
ƒ a indica il valore di partenza utilizzando apposite funzioni. La più comune è
ƒ b indica il valore finale “logspace(a, b, n)” che genera un vettore di
lunghezza n di valori equispaziati logaritmicamente
ƒ n il numero di elementi del vettore tra 10a e 10b.
Omettendo n la lunghezza di default è 100 Omettendo n viene generato un vettore di
>> V= linspace(1, 3, 5)
lunghezza 50.
V=
1.000 1.5000 2.000 2.5000 3.0000 ATTENZIONE:
tutti i vettori così generati sono VETTORI RIGA

Vettori come polinomi Operazioni sui polinomi (1)


ƒ In MatLab un polinomio viene rappresentato come ƒ Sui polinomi così rappresentati NON è POSSIBILE
il vettore dei suoi coefficienti, ordinati secondo le applicare i normali operatori (+, -,*,/) perché
potenze decrescenti. MatLab li interpreterebbe come applicati alle
ƒ Per esempio il polinomio matrici
p(s)= s4+3s3-15s2-2s+9 ƒ Si devono perciò utilizzare delle funzioni, dopo
verrà rappresentato internamente come aver “caricato” il vettore dei coefficienti del
p= [1 3 –15 –2 9] polinomio
ƒ Attenzione ai coefficienti nulli! Per esempio ƒ Per esempio, dopo aver definito il polinomio
p(s)= s4+9 p(s)= 3s2+2s+1 come
verrà rappresentato internamente come >> p= [3 2 1]
p=
p= [1 0 0 0 9] 3 2 1

M. Canale 10
Fondamenti di Automatica

Operazioni sui polinomi (2) Alcuni esempi (1)


ƒ sono utilizzabili le funzioni: ƒ Usando il polinomio p definito precedentemente
1. roots(p) ⇒ calcola le radici del polinomio 1. >> roots(p)
2. polyval(p, num) ⇒ calcola il valore del ans=
polinomio in “num” -0.3333 + 0.4714i
-0.3333 – 0.4714i
3. p= conv(p1, p2) ⇒ esegue il prodotto tra 2. >> polyval(p, 1)
polinomi (il risultato è un polinomio) ans=
4. [q, r]= deconv(p1, p2) ⇒ esegue la 6
divisione tra polinomi (il risultato è 3. >> d= polyder(p)
contenuto nei polinomi quoziente e resto) d=
6 2
5. p= polyder(p1) ⇒ calcola la derivata prima
(il risultato è un polinomio)

Alcuni esempi (2) Funzioni razionali fratte


ƒ Definendo i polinomi p1= [2 1] e p2= [1 1] si ƒ Le funzioni razionali fratte sono definite come
ottiene per esempio rapporti di polinomi.
1. >> r= conv(p1, p2) ƒ Solitamente una funzione razionale fratta si
r=
presenta nella forma
2 3 1
N ( s)
F (s) =
ATTENZIONE: D( s )
per i polinomi non è definita un’operazione di ƒ Sono caratterizzate dai loro zeri e dai loro poli.
somma
ƒ Molto spesso è necessario scomporle in fratti
semplici e serve perciò calcolarne i residui.

M. Canale 11
Fondamenti di Automatica

Calcolo dei residui (1) Calcolo dei residui (2)


ƒ Con l’istruzione “residue” è possibile calcolare i ƒ Esempio. ƒ Con residue si ottiene:
coefficienti (residui) della decomposizione in Decomponendo in » num=[1 1];
fratti semplici di una funzione razionale fratta fratti semplici la » den=conv(conv([1 0],[1 2]),[1 3]);

ƒ La sintassi è del tipo [r,p,k]=residue(num,den)


s+1 »r [r,p,k]=residue(num,den)
funzione: F(s) =
s(s+2)(s+3) -0.6667
=

dove ƒ si ottiene: 0.5000 residui


¾r sono i residui calcolati R1 R R p =
0.1667

¾p sono i poli della funzione razionale fratta + 2 + 3 = -3


s +3 s +2 s -2 poli
¾k è il resto della divisione num/den
0
− 0.6 0.5 0.16 k =
+ +
¾num, den sono il numeratore ed il
[]
s +3 s +2 s
denominatore della funzione da decomporre resto

Calcolo dei residui (3)


ƒ In modo assolutamente speculare si possono
ottenere i vettori del numeratore e del
denominatore di una funzione razionale fratta a
partire dalla sua scomposizione in fratti semplici.
ƒ Si usa per questo la stessa funzione residue, Rappresentazione grafica
invocata però come [num, den]= residue(r, p, k)
con lo stesso significato dei simboli.

M. Canale 12
Fondamenti di Automatica

Grafici (1) Grafici (2)


ƒ Molto spesso in MatLab è necessario ricorrere ƒ Per il tracciamento di grafici con assi in scala
all’uso di grafici per visualizzare il risultato lineare si usa l’istruzione plot(x, y, options) dove
dell’elaborazione prodotta. ¾ x è il vettore contenente gli elementi
ƒ Come impostazione di default MatLab disegna dell’asse delle ascisse
tutti i grafici in una stessa finestra, ¾ y è il vettore contenente gli elementi
sovrascrivendoli. Nel caso in cui si voglia tenere a dell’asse delle ordinate
video più di un grafico si deve usare l’istruzione
¾ options (facoltativo) permette di specificare,
“figure”, che crea una nuova finestra grafica.
ad esempio, il colore del tratto
ƒ È consigliabile disegnare un grafico per ogni
finestra. Per pulire il video da finestre precedenti ƒ Con la stessa sintassi esistono funzioni per grafici
si può utilizzare (al prompt o negli script) il in scala semilogaritmica o logaritmica, su un asse
comando “close all” o su entrambi (semilogx(), semilogy(), loglog())

Grafici (3): esempio Grafici (4)


>> close all ƒ È anche possibile sovrapporre su di uno stesso
>> figure tracciato più di un grafico.
>> plot(t, y, ‘r’) ƒ In questo caso non si deve usare l’istruzione
“figure” (che aprirebbe una nuova finestra) ma si
deve inserire tra le “plot” l’istruzione di “hold on”,
che fa sì che il nuovo grafico non cancelli il
precedente ma vi si sovrapponga.
ƒ L’istruzione hold off disabilita la funzione di
sovrapposizione dei grafici.

M. Canale 13
Fondamenti di Automatica

Grafici (5): esempio Grafici (6)


All’interno di uno ƒ Altre funzioni utili per operare sui grafici:
script si possono ¾ grid on ⇒ aggiunta della griglia al grafico
avere i comandi: ¾ title('…'), xlabel('…'), ylabel('…') ⇒ titoli e etichette
figure
plot(x,y,’r’,
al grafico ed agli assi
xx,yy,’b’) ¾ gtext ⇒ permette di inserire testo in una figura
% oppure ¾ zoom on/off ⇒ attiva/disattiva la funzione di zoom
figure
plot(x,y,’r’)
¾ axis([xmin, xmax, ymin, ymax]) ⇒ cambia la scala
hold on del grafico
¾ ginput(num) ⇒ acquisisce dal grafico num punti
plot(xx,yy,’b’)

e si ottiene il grafico attraverso la posizione del mouse


a lato ¾ subplot ⇒ per aver più grafici in parallelo

M. Canale 14