Introduzione a Matlab - Automazione@ingre

Transcript

Introduzione a Matlab - Automazione@ingre
CONTROLLI AUTOMATICI E SISTEMI ELETTRICI LINEARI
Ingegneria Meccatronica
CONTROLLI AUTOMATICI e
SISTEMI ELETTRICI LINEARI
INTRODUZIONE A MATLAB
Emilio Lorenzani
Tel. 0522 522443
e-mail: [email protected]
http://www.dismi.unimore.it/
Organizzazione della parte di corso tenuta
da Emilio Lorenzani
- 6 ore di introduzione a Matlab all’inizio del corso
- Sintesi del controllo di macchine elettriche alla fine del corso
Utilizzo di Matlab e Simulink (toolbox di Matlab):
- Modellizzazione di un sistema fisico
- Sintesi e analisi del controllo di macchine elettriche
Verifica delle prestazioni dell’azionamento elettrico, attraverso la simulazione
numerica.
Introduzione a Matlab -- 2
Utilizzo di Matlab
•
Per il corso di Controlli Automatici e Sistemi Elettrici Lineari
• Strumento software per la testare i concetti appresi a lezione e per
la verifica degli esercizi svolti a lezione
• Modellizzazione di sistemi fisici e individuazione del miglior
controllore per massimizzare le prestazioni
•
Come Ingegneri
• Ambiente di sviluppo software utilizzato nelle aziende per la
modellistica, il progetto di sistemi di controllo, per la loro
implementazione e per il loro sviluppo completo.
Introduzione a Matlab -- 3
Matlab
Matlab è un programma per l'analisi numerica e la simulazione di
sistemi dinamici.
• Analisi: Modellizzazione e analisi del comportamento dei sistemi dinamici
• Sintesi dei sistemi di controllo: ci sono delle funzioni che possono essere
utilizzate per la sintesi di controllori
• Simulazione: E’ possibile verificare le prestazioni di un sistema
simulandone il comportamento
• Programmazione: E’ possibile sviluppare algoritmi utilizzando i costrutti
messi a disposizione per la programmazione
• Grafici: Consente di analizzare e visualizzare graficamente dati di interesse
Introduzione a Matlab -- 4
MATLAB – area di lavoro
Visualizzazione
variabili
linea di comando
Come calcolare 2 − sin 0.2𝜋 2 + 𝑒 2 + 3 ?
>> sqrt(2)-sin(0.2*pi)^2+exp(2)+3
ans=12.4578
Introduzione a Matlab -- 5
MATLAB
•
Matlab (MATrix LABoratory) è un software per il calcolo
scientifico sviluppato inizialmente per la gestione ed
elaborazione di vettori e matrici.
Per introdurre una variabile basta assegnarle un nome e un valore in
questo modo (il simbolo = permettere di assegnare un valore ad una
variabile):
>> x=12
La variabile x vale 12. Omettendo il ; viene riscritto a video il nome
della variabile e il suo valore. Se si digita soltanto un valore e non lo si
assegna a una variabile, Matlab assegna di default tale valore alla variabile
ans
MATLAB fa differenza tra lettere minuscole e maiuscole.
Introduzione a Matlab -- 6
Matlab
Matlab è un ambiente a riga di comando: quando si apre il programma ci
si trova a un prompt dal quale possibile immettere un comando.
In Matlab qualsiasi dato è trattato come una variabile.
Esempio dichiarazione variabili:
>> a=5
%variabile scalare
>> b=[4 6]
%vettore riga
>> c=[-5; 2]
%vettore colonna
>> d=[2 3; -1 7] %matrice quadrata
Non occorre dichiarare preliminarmente le variabili
separatore di linea: punto e virgola (;) o Enter
Separatore di colonna: virgola (,) o spazio bianco
Introduzione a Matlab -- 7
MATLAB
Esso contiene un nucleo di funzioni di base general purpose molto vaste
…tutte le funzioni matematiche, comandi grafici, risoluzione sistemi di
equazioni, ecc…
HELP di MATLAB è fondamentale!!
Esistono, poi delle estensioni, i Toolbox , che consentono di estendere le
funzionalità del programma base, aggiungendo strumenti specialistici.
Durante il corso impareremo a utilizzare il programma sia per l'Analisi di
sistemi dinamici sia per la Sintesi di sistemi di controllo.
Introduzione a Matlab -- 8
Matlab
•
Le variabili immesse dal prompt costituiscono il workspace (spazio di
lavoro) di Matlab.
•
Per sapere quali sono le variabili presenti nel workspace in un dato
momento si utilizza il comando who ( whos per sapere tipo variabile
ed occupazione di memoria)
•
Per cancellare una variabile dal workspace si utilizza il comando clear
<nome variabile>
•
Per cancellare tutte le variabili dal workspace si utilizza il comando
•
•
save <nome> per salvare il contenuto del workspace
load <nome> per caricare in memoria dati precendemente
clear all
memorizzati
Introduzione a Matlab -- 9
Vettori e Matrici
Possiamo definire una matrice con la seguente sintassi:
>> A=[1,2,3,4;5,6,7,8;9,10,11,12]
Gli elementi della stessa riga sono separati da , mentre le varie righe
Dal ;. La virgola può anche essere omessa.
E’ possibile estrarre da una matrice un singolo elemento oppure una
sottomatrice.
>> element = A(1,2)
>> subA = A(1:3,1:2)
associa alla variabile element il valore
dell'elemento di riga 1 e colonna 2 della
matrice A. In particolare sarà element=2
associa alla variabile subA la
sottomatrice composta dalle prime 3
righe e dalle prime 2 colonne. In
particolare sarà subA=[1,2;5,6;9,10];
Introduzione a Matlab -- 10
Vettori e Matrici
Un vettore è una particolare matrice.
• >> c=[4;5;6];
Vettore colonna
• >> r=[4,5,6];
Vettore riga
Si può far generare a Matlab un vettore automaticamente.
I vettori vengono utilizzati per rappresentare segnali o per la tracciatura di grafici
>> t=[0:0.1:10]
Il comando genera un vettore riga con valori che vanno da 0 a 10
con passo 0.1.
Si può operare con le variabili: costruire una variabile utilizzando i valori
memorizzati in altre variabili, costruire vettori con variabili scalari, oppure
matrici con vettori e altri matrici, ecc…
Introduzione a Matlab -- 11
Operazioni sui vettori
» a=[ 1, 2]
» b=[ 3 ; 4]
» c= a*b
» c=b*a
% vettore riga 1x2
% vettore colonna 2x1
% moltiplicazione riga per colonna, c risulta uno scalare
% moltiplicazione riga per colonna, c una matrice 2x2
» a1= [5, 6] % vettore riga 1x2
» A=a .* a1 %Prodotto elemento per elemento
» B=a.^2
%Quadrato elemento per elemento
Introduzione a Matlab -- 12
Vettori e Matrici
Possiamo estrarre vettori riga e vettori
colonna da una matrice.
>> c1 = A(:,2)
>> r1= A(1,:)
associa alla variabile c1 la seconda
colonna della matrice A. In particolare
sarà c1=[2;6;10]
associa alla variabile r1 prima riga della
matrice A. In particolare sarà
r1=[1,2,3,4];
Introduzione a Matlab -- 13
Vettori e Matrici
Esistono comandi che generano automaticamente alcune matrici notevoli
A=eye(n);
A=zeros(n);
A=ones(n)
A è la matrice indentità di ordine n
A è una matrice quadrata di ordine n
i cui elementi sono zero
A è una matrice quadrata di ordine n i cui
elementi sono uno
Introduzione a Matlab -- 14
Operatori comparativi
In Matlab il valore 0 rappresenta il valore booleano FALSE mentre
tutti gli altri valori numerici rappresentano il valore booleano TRUE.
Si dispone di 6 operatori:
Esempio
a=2
b=1
Y=a>b
X=b==a
Y è pari ad 1
X è pari a 0
Se l'espressione è vera ritorna un 1 altrimenti 0.
Un paragone tra due matrici viene eseguito elemento per elemento.
Introduzione a Matlab -- 15
Operatori Logici
Operatori Binari: Il formato dell'operazione logica è
Risultato=operatore(A,B). Gli operatori sono:
Esempio
>> a=1
>> b=0
>> c= a & b
oppure
>> c=and(a,b)
Operatori Monari: Il formato dell'operazione logica è
Risultato=operatore (A). Gli operatori sono:
c= 0
Esempio
>>A=[ 1 2 3 0 ]
>>B=any(a)
B=1
>>C=all(a)
C=0
Introduzione a Matlab -- 16
Principali comandi sulle matrici
Trasposta
>>B=A’ ( oppure >>B=transpose(A) )
Assegna a B(i,j) il valore A(j,i) =AT
Determinante
>> d=det(A)
Assegna alla variabile d il valore del determinante di A, se A è quadrata
Rango
>> r=rank(A)
Assegna alla variabile r il valore del rango di A.
Introduzione a Matlab -- 17
Principali comandi sulle matrici
Inversa
>>I=inv(A)
Assegna a I l’inversa della matrice A (se esiste!)
Traccia
>> t=trace(A)
Assegna alla variabile t il valore della traccia di A
Autovalori
>> e=eig(A)
Assegna alla variabile e un vettore contenente gli autovalori di A.
Introduzione a Matlab -- 18
L’help online 1/2
•
Digitando Help dal prompt di comando compare la lista completa dei
toolbox presenti. Digitando help < nome toolbox> si ha l'elenco
completo delle funzioni disponibili per quel toolbox. Digitando help
<nome funzione> si accede alla descrizione di quel comando.
•
Dal menu Help

Help window: Non è altro che l'help che si può ottenere da

Help Desk: Un help in HTML molto completo e di
linea di comando messo sotto forma di finestra grafica di più
agevole consultazione. Analogamente si può eseguire il
comando doc <nome comando> per ottenere in forma
grafica le funzioni disponibili.
facilenavigazione fornito anche di svariati esempi
Per avere maggiori informazioni sugli operatori visti finora e su
altri operatori su matrici consultare la sezione dell' help window
matlab/matfun
Introduzione a Matlab -- 19
L’help online 2/2
Cliccando con il mouse su fx si apre una nuova tipologia di HELP
- Si possono individuare le funzioni di interesse per macrosettore
- Si inseriscono le parole chiave della funzione
Introduzione a Matlab -- 20
Costrutti per la programmazione MATLAB
• Utilizzati per una programmazione evoluta
• Molto simili ai costrutti del C
• Consentono elaborazioni complesse dei dati
Costrutti fondamentali:
• IF
• FOR
• WHILE
Introduzione a Matlab -- 21
IF
•
Utilizzato quado l'esecuzione di un certo numero di istruzioni è
vincolato dal soddisfacimento di un certa espressione logica.
Sintassi:
if (espressione logica)
istruzioni;
else
istruzioni;
end
Introduzione a Matlab -- 22
IF: Esempio
Controllo di tem peratura di una stanza
if (temperatura > 25)
ariafredda = 1;
else
ariafredda=0;
end
Introduzione a Matlab -- 23
FOR
•
Utilizzato quando un blocco di istruzioni deve essere ripetuto un ben
determinato numero di volte.
Sintassi:
for indice=init:step:end
istruzioni;
end
Step è l’incremento del contatore ad ogni ciclo. E’ opzionale, se omesso
vale 1
Introduzione a Matlab -- 24
FOR: Esempio
Si vuole costruire una m atrice 3x3
k = 3;
for m = 1:k
for n = 1:k
a(m,n) = 1/(m+n -1);
end
end
Otteniamo a=[1, 1/2, 1/3; ½, 1/3, ¼; 1/3, ¼, 1/5]
Introduzione a Matlab -- 25
WHILE
•
Utilizzato quando un blocco di istruzioni deve essere ripetuto finché
una condizione logica risulta vera.
Sintassi:
while (espressione logica)
istruzioni;
end
Esem pio: Controllo di tem peratura di una stanza
while (Temperatura>20)
ariafredda=1;
end
Introduzione a Matlab -- 26
BREAK
•
Utilizzato quando si deve interrompere un ciclo (for o while) prima del
previsto.
Esempio
… % inizializzazione di y(i) svolta in precedenza
for i=1:1000
a(i)=y(i)
if (a(i) > 1000)
break;
end
end
Per maggiori informazioni consultare l'help a matlab/lang
Introduzione a Matlab -- 27
Script di Matlab: sequenza di comandi
•
Una sequenza di comandi diretti può costituire un
programma.
•
Si digitano le istruzioni non nella finestra dei comandi ma
bensì attivando un apposito programma per editare i testi,
l’editor.
Un file «Untitled.m» vuoto si apre cliccando sul rettangolino
bianco in alto a sinistra. Il file si può successivamente
salvare con nome.
Per inserire i commenti nel programma basta farli precedere dal simbolo %
Introduzione a Matlab -- 28
M-files
Matlab dispone di un editor a cui si accede mediante il comando edit. I
file prodotti con questo editor vengono salvati con l’estensione .m e sono
eseguibili da MATLAB.
Possiamo costruire dei file, con estensione .m, che contengono una serie
di comandi e costrutti Matlab. Chiamando il file dal prompt dei comandi
eseguiamo tutti i comandi in esso contenuti. Assicurarsi che la directory
nella quale è stato salvato sia inclusa nel Path di Matlab (elenco di cartelle
dove Matlab va a cercare i nomi dei files che si digitano). File – Set Path
Un m-file è come uno script (batch). E’ solo un modo di
raggruppare i comandi. Le modifiche sulle variabili non
sono locali ma si riflettono direttamente sul workspace
Esempio: Costruire un M-file per la risoluzione di un sistema lineare
Introduzione a Matlab -- 29
Esempio: Risoluzione di un sistema lineare
Si risolva il seguente sistema
Abbiamo un sistema del tipo Ax=b.
Passi per la risoluzione:
1.
Costruire A e b
2.
Verificare se A è invertibile
3.
Trovare la soluzione: x = inv(A)*b
Introduzione a Matlab -- 30
M-files
%
% Risolvere un sistema di equazioni lineari
%
clear
close all
%
A = [1,1,1,-1; 1,1,-1,0; 1,-1,1,0; 1,2,-3,0];
B = [1;2;0;2];
%
% Ax = B
%
% x = inv(A)*B
%
x = inv(A)*B
% identifica una riga di commento
Introduzione a Matlab -- 31
M-function
Possiamo aggiungere alla funzioni preesistenti, funzione costruite da noi
per risolvere problemi specifici.
Le variabili definite all'interno di una function sono LOCALI
Sintassi:
function [output]=nomefunction(input)
istruzioni;
end; %(optional)
All'interno del blocco di istruzioni le variabili output vengono definite e il
loro valore viene fornito al termine della funzione stessa.
Non occorre usare return come in C.
Anche le function vengono salvate con estensione .m
Introduzione a Matlab -- 32
Function
Esempio. Calcolo di alcune funzione statistiche di un vettore
function [mean,stdev] = stat(x)
n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2/n));
Il blocco va salvato in un file .m di nome stat.m, e si può utilizzare come di
seguito, purché il file stat.m sia nella stessa directory o in una directory
inserita nel path (File->Set Path...)
dati = rand (10,1); % crea
[m,var] = stat(dati);
un vettore di numeri casuali
Introduzione a Matlab -- 33
Grafici in Matlab
Per visualizzare graficamente l'andamento di una variabile si
utilizza il comando plot.
plot(x,y)
Crea un grafico nella cui ordinata sono presenti i valori del vettore y
e nella cui ascissa i valori del vettore x.
ATTENZIONE!!!!!
I vettori x e y devono avere le stesse dimensioni!
Esempi: visualizzare graficamente
semplici funzioni come sin(t), cos(t)
Introduzione a Matlab -- 34
Grafici in Matlab
Il comando plot traccia un grafico sull'ultima figura aperta, cancellando il
grafico precedente.
Per creare una nuova figura si usa il comando figure
Il comando hold consente di “bloccare” l'immagine sul
grafico. Il prossimo comando plot disegnerà sulla stessa finestra ma non
cancellerà il grafico precedente.
È possibile tracciare grafici di diversi colori e con diverse
tipologie di linea.
Per ulteriori dettagli: help plot
Introduzione a Matlab -- 35
plot
clear
close all
x = 0:0.1:4*pi;
y = sin(x);
plot(x,y)
figure
stem(x,y)
axis([0,2*pi, -1,1])
title('Funzione sin(x)')
pause
grid on
Introduzione a Matlab -- 36
Plot 3D
clear
close all
[x, y] = meshgrid(-1:.25:1);
z = sin(x.^2 + y.^2);
surf(x, y, z)
figure
[X,Y] = meshgrid(-2:.2:2, -4:.4:4);
Z = X .* exp(-X.^2 - Y.^2);
surf(X,Y,Z)
Introduzione a Matlab -- 37