INTRODUZIONE A MATLAB -...
Transcript of INTRODUZIONE A MATLAB -...
CORSO DI LAUREA IN INGEGNERIA GESTIONALE
Politecnico di Milano
Per il corso di
FONDAMENTI DI AUTOMATICA
Silvia Strada
INTRODUZIONE A MATLAB
Indice
2
★ Matlab
★ L’Ambiente Matlab★ Variabili e Costanti★ Matrici e Vettori★ Grafici★ Script e Funzioni★ Algebra Lineare★ Polinomi
Matlab
3
1 Introduction
1-2
What Is MATLAB? MATLAB® is a high-performance language for technical computing. It integrates computation, visualization, and programming in an easy-to-use environment where problems and solutions are expressed in familiar mathematical notation. Typical uses include:
• Math and computation
• Algorithm development
• Modeling, simulation, and prototyping
• Data analysis, exploration, and visualization
• Scientific and engineering graphics
• Application development, including graphical user interface building
MATLAB is an interactive system whose basic data element is an array that does not require dimensioning. This allows you to solve many technical computing problems, especially those with matrix and vector formulations, in a fraction of the time it would take to write a program in a scalar noninteractive language such as C or Fortran.
The name MATLAB stands for matrix laboratory. MATLAB was originallywritten to provide easy access to matrix software developed by the LINPACKand EISPACK projects. Today, MATLAB uses software developed by theLAPACK and ARPACK projects, which together represent the state-of-the-artin software for matrix computation.
MATLAB has evolved over a period of years with input from many users. Inuniversity environments, it is the standard instructional tool for introductoryand advanced courses in mathematics, engineering, and science. In industry,MATLAB is the tool of choice for high-productivity research, development, andanalysis.
MATLAB features a family of application-specific solutions called toolboxes.Very important to most users of MATLAB, toolboxes allow you to learn andapply specialized technology. Toolboxes are comprehensive collections ofMATLAB functions (M-files) that extend the MATLAB environment to solveparticular classes of problems. Areas in which toolboxes are available includesignal processing, control systems, neural networks, fuzzy logic, wavelets,simulation, and many others.
Matlab
4
1 Introduction
1-2
What Is MATLAB?MATLAB® is a high-performance language for technical computing. Itintegrates computation, visualization, and programming in an easy-to-useenvironment where problems and solutions are expressed in familiarmathematical notation. Typical uses include:
• Math and computation
• Algorithm development
• Modeling, simulation, and prototyping
• Data analysis, exploration, and visualization
• Scientific and engineering graphics
• Application development, including graphical user interface building
MATLAB is an interactive system whose basic data element is an array thatdoes not require dimensioning. This allows you to solve many technicalcomputing problems, especially those with matrix and vector formulations, ina fraction of the time it would take to write a program in a scalar noninteractivelanguage such as C or Fortran.
The name MATLAB stands for matrix laboratory. MATLAB was originally written to provide easy access to matrix software developed by the LINPACK and EISPACK projects. Today, MATLAB uses software developed by the LAPACK and ARPACK projects, which together represent the state-of-the-art in software for matrix computation.
MATLAB has evolved over a period of years with input from many users. In university environments, it is the standard instructional tool for introductory and advanced courses in mathematics, engineering, and science. In industry, MATLAB is the tool of choice for high-productivity research, development, and analysis.
MATLAB features a family of application-specific solutions called toolboxes. Very important to most users of MATLAB, toolboxes allow you to learn and apply specialized technology. Toolboxes are comprehensive collections of MATLAB functions (M-files) that extend the MATLAB environment to solve particular classes of problems. Areas in which toolboxes are available include signal processing, control systems, neural networks, fuzzy logic, wavelets, simulation, and many others.
L’Ambiente Matlab
6
Launch Pad
La Launch Pad consente l’apertura degli help, dei demo e contiene un link diretto ai siti web dei produttori
Attraverso la Launch Pad può essere aperto Simulink
La finestra Workspace contiene l’elenco di tutte le variabili in uso.
Per ciascuna variabile vengono specificate la dimensione (in termini matriciali e in byte) e il tipo di dato.
Workspace
L’Ambiente Matlab
7
Command HistoryLa Command History contiene tutti i
comandi che sono stati utilizzati nella Command Window fino al
momento attuale.
E’ così possibile richiamare direttamente i comandi tramite la Command History senza doverli
riscrivere nella Command Window
La finestra Current Directory specifica la cartella di lavoro: nella
finestra sono presenti tutti i file contenuti nella cartella di lavoro
(file “matlab” e file “non matlab”).
I file “matlab” presenti nella Current Directory possono essere richiamati
direttamente attraverso la Command Window
Current Directory
L’Ambiente Matlab
8
Command Window
La Command Window è la finestra principale dell’ambiente Matlab
Attraverso la Command Window è possibile definire le variabili da utilizzare, eseguire operazioni,
creare grafici, eseguire programmi, richiamare toolbox, etc.
La Command Window
10
E’ il mezzo principaleper “comunicare” con Matlab
Il modo più semplice per utilizzarela Command Window è
scrivere direttamente i comandialla destra del prompt “>>”
Matlab è case-sensitive, “A” e “a” sono due variabili differenti
La Command Window
11
E’ possibile “spezzare” lunghe righe di comando
E’ possibile inserire più comandi sulla stessa riga
La Command Window
12
E’ possibile, utilizzando la tastiera,richiamare e modificare i comandi precedentemente inseriti
Seleziona finoalla fine della linea
↖⇧
ESC
⇧
CANC
FINE⇧
FINE
↖ Muove il cursoreall’inizio della linea
Muove il cursorealla fine della linea
Ripristina (pulisce)la linea
Cancella il carattereche segue il cursore
Cancella il carattereche precede il cursore
Seleziona finoall’inizio della linea
→
↑
←
↓
CTRL →
Richiama la lineaprecedente
Richiama la lineasuccessiva
Muove il cursoreun carattere indietro
Muove il cursoreun carattere avanti
Muove il cursore avantidi una parola
Muove il cursore indietrodi una parola
CTRL ←
La Command Window
13
Formato dei numeri
A =!
43
1.2345 · 10!6 !3"
>> x = [4/3 1.2345e-6 -3]
>> format rational
>> format short
>> format long
>> format short e
>> format long e
>> format short g
>> format long g
>> format hex
>> format bank
>> format +
x = 1.333333333333333e+000 1.234500000000000e-006 -3.000000000000000e+000
x = 1.3333 0.0000 -3.0000
x = 1.33333333333333 0.00000123450000 -3.00000000000000
x = 1.3333e+000 1.2345e-006 -3.0000e+000
x = 1.3333 1.2345e-006 -3
x = 1.33333333333333 1.2345e-006 -3
x = 3ff5555555555555 3eb4b6231abfd271 c008000000000000
x = 1.33 0.00 -3.00
x = ++-
x = 4/3 1/810045 -3
Variabili, Costanti, Matrici e Vettori
15
>> C = [1 0 0]
C =
1 0 0
Vettore Riga(matrice 1×3)
C =!
1 0 0"
>> B = [ 0; 1; 0 ]
B =
0 1 0B =
!
"010
#
$
Vettore Colonna(matrice 3×1)
>> k = 3
k =
3
k = 3Costante >> A = [ 0 1 1; -1 -2 0; 0 0 -1 ]
A =
0 1 1 -1 -2 0 0 0 -1
Matrice 3×3
A =
!
"0 1 1
!1 !2 00 0 !1
#
$
Operazioni e Funzioni
16
>> A*B
ans =
1 -2 0
ProdottoMatriciale
(righe per colonne)
>> 10*A
ans =
0 10 10 -10 -20 0 0 0 -10
ProdottoScalare per Matrice
>> (k+2)*A(2,1)
ans =
-5
Operazioni con unElemento diuna Matrice
>> abs(h)
ans =
2.2361
Modulodi un Numero Complesso
>> sqrt(k)+h
ans =
2.7321 + 2.0000i
OperazioniSpecifiche
>> h = 1 + 2i
h =
1.0000 + 2.0000i
NumeriComplessi
>> (k-5)^2
ans =
4
OperazioniElementari
Operazioni e Funzioni
17
>> H = [1 1 2; 3 1 2; 3 3 0]
H =
1 1 2 3 1 2 3 3 0
A =
!
"0 1 1
!1 !2 00 0 !1
#
$ H =
!
"1 1 23 1 23 3 0
#
$
>> A.*H
ans =
0 1 2 -3 -2 0 0 0 0
ProdottoElemento per
Elemento>> A-H
ans =
-1 0 -1 -4 -3 -2 -3 -3 -1
Sottrazionetra Matrici
>> A*H
ans =
6 4 2 -7 -3 -6 -3 -3 0
ProdottoMatriciale
(righe per colonne)
Operazioni e Funzioni
18
>> Pcol1 = B
Pcol1 =
0 1 0
>> Pcol2 = A*B
Pcol2 =
1 -2 0
>> Pcol3 = (A^2)*B
Pcol3 =
-2 3 0
>> P = [ Pcol1 Pcol2 Pcol3]
P =
0 1 -2 1 -2 3 0 0 0
Creazione di Matricida Vettori
Operazioni e Funzioni
19
>> tA = A'
tA =
0 -1 0 1 -2 0 1 0 -1
Calcolo dellaMatrice Trasposta
di una Matrice
>> det(A)
ans =
-1
Calcolo delDeterminantedi una Matrice
>> poly(A)
ans =
1 3 3 1
Calcolo deiCoefficienti del
Polinomio Caratteristicodi una Matrice >> inv(A)
ans =
-2 -1 -2 1 0 1 0 0 -1
Calcolo dellaMatrice Inversa
di una Matrice
L’Operatore ‘:’
20
a : b
Definisce il vettore riga!a a + 1 a + 2 . . . a + k ! 1 a + k
"
! b " akdove è il più grande intero
>> 0:10
ans =
0 1 2 3 4 5 6 7 8 9 10
>> 2.3:6.7
ans =
2.3000 3.3000 4.3000 5.3000 6.3000
L’Operatore ‘:’
21
>> t = 0:2.5:11
t =
0 2.5000 5.0000 7.5000 10.0000
!a a + p a + 2p . . . a + (k ! 1)p a + kp
"Definisce il vettore riga
!b " a
pkdove è il più grande intero
>> 0:0.1:1
ans =
Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
Columns 8 through 11
0.7000 0.8000 0.9000 1.0000
a : p : b
L’Operatore ‘:’
22
Si può utilizzare l’operatore ‘:’ per lavorarecon sottomatrici e sottovettori
>> A2 = [-2 1; 0 1]
A2 =
-2 1 0 1
>> A2*A??? Error using ==> *Inner matrix dimensions must agree.
>> A2*A(1:2,1:2)
ans =
-1 -4 -1 -2
>> B2 = B(2:3,1)
B2 =
1 0
B(2 : 3, 1)
B =
!
"010
#
$
A(1 : 2, 1 : 2)
A =
!
"0 1 1
!1 !2 00 0 !1
#
$
L’Operatore ‘:’
23
L’operatore ‘:’ consente inoltre di creare utili tabelle
>> s = (0:0.1:1);>> [s;exp(s)]
ans =
Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 1.0000 1.1052 1.2214 1.3499 1.4918 1.6487 1.8221
Columns 8 through 11
0.7000 0.8000 0.9000 1.0000 2.0138 2.2255 2.4596 2.7183
>> n=(0:10)'
n =
0 1 2 3 4 5 6 7 8 9 10
>> pows = [n n.^2 2.^n]
pows =
0 0 11 1 22 4 43 9 84 16 165 25 326 36 647 49 1288 64 2569 81 512
10 100 1024
y = sin x
Grafici
24
>> x = 0:pi/100:2*pi
x =
Columns 1 through 7
0 0.0314 0.0628 0.0942 0.1257 0.1571 0.1885
Columns 8 through 14
0.2199 0.2513 0.2827 0.3142 0.3456 0.3770 0.4084
⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮
Columns 190 through 196
5.9376 5.9690 6.0004 6.0319 6.0633 6.0947 6.1261
Columns 197 through 201
6.1575 6.1889 6.2204 6.2518 6.2832
>> y = sin(x)
y =
Columns 1 through 7
0 0.0314 0.0628 0.0941 0.1253 0.1564 0.1874
Columns 8 through 14
0.2181 0.2487 0.2790 0.3090 0.3387 0.3681 0.3971
⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮
Columns 190 through 196
-0.3387 -0.3090 -0.2790 -0.2487 -0.2181 -0.1874 -0.1564
Columns 197 through 201
-0.1253 -0.0941 -0.0628 -0.0314 -0.0000
>> plot(x,y)
0 1 2 3 4 5 6 7-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Grafici
25
0 1 2 3 4 5 6 7-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
x = [0,2!]
sin
(x)
Grafico della funzione sin(x)
E’ possibile aggiungere etichette agli assi e un titolo al grafico
>> xlabel('x = [0,2\pi]')>> ylabel('sin(x)')>> title('Grafico della funzione sin(x)','FontSize',12)
Grafici
26
E’ possibile disegnare più funzioni nello stesso grafico...
-10 -8 -6 -4 -2 0 2 4 6 8 10-1000
-800
-600
-400
-200
0
200
400
600
800
1000
>> x = -10:0.01:10;>> y1 = x;>> y2 = x.^2;>> y3 = x.^3;>> plot(x,y1,x,y2,x,y3)
Grafici
27
-4 -3 -2 -1 0 1 2 3 4-4
-3
-2
-1
0
1
2
3
4x
x2
x3
...e modificare l’aspetto del grafico a proprio piacimento
>> legend('x','x^2','x^3')>> axis([-4 4 -4 4])>> grid on
Property Editor
29
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Grafico di Prova
Grafici
30
0 1 2 3 4 5 6-2
-1
0
1
2
0 1 2 3 4 5 6-2
-1
0
1
2
0 1 2 3 4 5 6-2
-1
0
1
2
>> x = 0:pi/100:2*pi;>> y1 = sin(x);>> y2 = cos(x);>> y3 = tan(x);
>> subplot(3,1,1); plot(x,y1)>> axis([0 2*pi -2 2])
>> subplot(3,1,2); plot(x,y2)>> axis([0 2*pi -2 2])
>> subplot(3,1,3); plot(x,y3)>> axis([0 2*pi -2 2])
E’ possibile disegnare più grafici contemporaneamente
M-files
31
Gli M-files sono programmi all’interno dell’ambiente Matlab
Gli M-files possono essere:
★ Scripts che semplicemente eseguono una serie di istruzioni Matlab
★ Funzioni che accettano valori in ingresso e producono valori in uscita
Scripts Funzioni
Non accettano valori in ingresso e non forniscono valori in uscita
Possono accettare valori in ingresso e restituiscono valori in uscita
Operano esclusivamente su dati del workspace Matlab
Possono utilizzare variabili locali interne al programma
Servono per automatizzare azioni da ripetere spesso
Servono per introdurre nuove funzionalità all’ambiente Matlab
Scripts
32
>> matriceP
P =
0 1 -2 1 -2 3 0 0 0
% Determinazione della matrice di% controllabilita’ P% A = [ 0 1 1; -1 -2 0; 0 0 -1 ];B = [ 0; 1; 0 ];Pcol1 = B;Pcol2 = A*B;Pcol3 = (A^2)*B;P = [ Pcol1 Pcol2 Pcol3]
matriceP.m
Scripts
33
% Creazione di grafici sinusoidali%x1 = 0:pi/100:2*pi;y11=sin(x1);y12=cos(x1);subplot(2,2,1); plot(x1,y11,'r')axis([0 2*pi -1.2 1.2])subplot(2,2,2); plot(x1,y12,'b')axis([0 2*pi -1.2 1.2])x2 = 0:pi/4:2*pi;y21=sin(x2);y22=cos(x2);subplot(2,2,3); plot(x2,y21,'r:d')axis([0 2*pi -1.2 1.2])subplot(2,2,4); plot(x2,y22,'b:s')axis([0 2*pi -1.2 1.2])
sinusoidi.m
0 2 4 6
-1
-0.5
0
0.5
1
0 2 4 6
-1
-0.5
0
0.5
1
0 2 4 6
-1
-0.5
0
0.5
1
0 2 4 6
-1
-0.5
0
0.5
1
>> sinusoidi
Funzioni
34
function r = f_matriceP(A,B)% F_MATRICEP Matrice P.% Determinazione della matrice di% controllabilita’ P% Pcol1 = B;Pcol2 = A*B;Pcol3 = (A^2)*B;% Matrice di controllabilita’:P = [ Pcol1 Pcol2 Pcol3];r = P;
f_matriceP.m
>> f_matriceP([ 0 1 1; -1 -2 0; 0 0 -1 ], ...[ 0; 1; 0 ])
ans =
0 1 -2 1 -2 3 0 0 0
>> A = [ 1 1 -1; 0 -2 0; 0 0 1 ];>> B = [ 0; 1; 1 ];>> f_matriceP(A,B)
ans =
0 0 -3 1 -2 4 1 1 1
>> vectorP = f_matriceP(A,B)
vectorP =
0 0 -3 1 -2 4 1 1 1
Funzioni
35
function r = f_matriceP(A,B)
% F_MATRICEP Matrice P.
% Determinazione della matrice di% controllabilita’ P%
Pcol1 = B;Pcol2 = A*B;Pcol3 = (A^2)*B;
% Matrice di controllabilita’:
P = [ Pcol1 Pcol2 Pcol3];r = P;
function r = f_matriceP(A,B)
variabili di ingressonome della funzionevariabile di uscitaparola chiave
The “Function Definition Line”
The “H1 Line”Contiene la prima riga dell’help
Testo dell’HelpDescrizione completa delle funzionalità
The “Function Body”Contiene il codice vero e proprio
CommentiGenerici commenti dentro il codice
Funzioni
36
>> calc_contr(A,B)
P =
0 0 -3 1 -2 4 1 1 1
ans =
Il sistema è completamente controllabile
>> calc_contr([ 1 0; 1 2 ], [ 0; 1 ])
P =
0 0 1 2
ans =
Il sistema non è completamente controllabile
function r = calc_contr(A,B)% CALC_CONTR Calcolo Controllabilita’% Calcolo della controllabilita’% attraverso la il calcolo% della matrice P%dimA = size(A);dimB = size(B);if (dimA(1,1) == dimA(1,2)) & (dimA(1,2) == dimB(1,1)) P = B; for n = 1:(dimA(1,1)-1)
new_col = (A^n)*B;P = [P new_col];
end P if det(P) ~= 0
r = ‘Il sistema è completamente controllabile’; else
r = ‘Il sistema non è completamente controllabile’; endelse r = ‘Dimensioni delle matricinon valide’end
calc_contr.m
Funzioni
37
Controllo del Flusso
if logical_expressionstatements
elseif logical_expressionstatements
elsestatements
end
switch expressioncase value1
statementscase value2
statements...otherwise
statementsend
while expressionstatements
end
for index = start:increment:endstatements
end
try,statements,...,statements,
catch,statements,...,statements,
end
Subfunctions
E’ possibile definire, all’interno di una funzione, una o più sottofunzioni
Ciascuna sottofunzione dovrebbe essere finalizzataad una particolare attività da svolgere all’interno della funzione
L’uso delle sottofunzioni rende più semplice e chiaro il codice del M-file
Algebra Lineare
38
Attraverso Matlab è possibile risolvere in maniera semplicesistemi di equazioni lineari
!"
#
x1 = !2x2 = 7x3 = !12
>> X = A\B
X =
-2.0000 7.0000 -12.0000
!"
#
3x1 + x2 = 1x1 + 2x2 + x3 = 02x2 + x3 = 2
>> A = [ 3 1 0; 1 2 1; 0 2 1 ]
A =
3 1 0 1 2 1 0 2 1
>> B = [ 1; 0; 2 ]
B =
1 0 2
Algebra Lineare
39
E’ possibile risolvere anche sistemi il cui numero delle incognite (n)è diverso dal numero delle equazioni (m).
★ Se m < n il sistema è sottodeterminato e avrà infinite soluzioni; in questo caso Matlab fornisce una soluzione “base” con almeno m valori non nulli
★ Se m > n il sistema è sovradeterminato e può non avere soluzioni; in ogni caso Matlab fornisce la soluzione “ai minimi quadrati”
!"
#
x1 + x2 = 12x1 + 3x2 = 0x1 + 2x2 = 2
>> A = [ 1 1; 2 3; 1 2 ]
A =
1 1 2 3 1 2
>> B = [ 1; 0; 2 ]
B =
1 0 2
>> X = A\B
X =
-1.0000 1.0000
x1 + x2 = 2
>> X = A\B
X =
2 0
>> A = [ 1 1 ]
A =
1 1
>> B = 2
B =
2
Polinomi
40
Matlab rappresenta un polinomio attraverso un vettore rigai cui valori corrispondono ai coefficienti del polinomio
ordinati secondo le potenze decrescenti
Matlab fornisce alcune funzioniper eseguire operazioni standard sui polimoni
conv Moltiplicazione tra polinomi (convoluzione)
deconv Divisione tra polinomi (deconvoluzione)
roots Fornisce le radici di un polinomio (soluzioni)
poly Fornisce il polinomio che presenta determinate radici (soluzioni)
polyval Verifica di un polinomio
polyder Derivazione di un polinomio
residue Espansione in fratti semplici (calcolo dei residui)
p(x) = x3 ! 2x ! 4>> p = [ 1 0 -2 -4 ]
P =
1 0 -2 -4
Polinomi
41
La funzione poly invece restituisce un vettore riga che comprendei coefficienti del polinomio che ha le radici passate come argomento
Come già visto in precedenza, la funzione poly serve ancheper calcolare il polinomio caratteristico di una matrice
La funzione roots fornisce le radici di un
polinomio e le memorizza in un vettore colonna
>> roots(p)
ans =
2.0000 -1.0000 + 1.0000i -1.0000 - 1.0000i
>> r = [2; -1+1i; -1-1i]
r =
2.0000 -1.0000 + 1.0000i -1.0000 - 1.0000i
>> poly(r)
ans =
1 0 -2 -4
Polinomi
42
La funzione polyder calcola la derivata di un polinomio
La funzione polyval determina il valore di un polinomio in corrispondenza di uno specifico valore della variabile
La funzione polyval è in grado di determinare il valore di un polinomioanche in senso matriciale
p!(x) = 3x2 ! 2>> polyder(p)
ans =
3 0 -2
p(3) = 33 ! 2 · 3 ! 4 = 17>> polyval(p,3)
ans =
17
Polinomi
43
La funzione residue determina l’espansione in fratti semplicidi una funzione razionale fratta che non presenta radici coincidenti
b(x)a(x)
=r1
x ! p1+
r2
x ! p2+ . . . +
rn
x ! pn+ kx
residue, nella sua versione base, fornisce un vettore colonna di residui
f(x) =!4x + 8
x2 + 6x + 8
>> b = [-4 8];>> a = [1 6 8];>> residue(b,a)
ans =
-12 8
Polinomi
44
La funzione residue può essere utilizzata al contrario (passandocome argomenti r, p e z) per ottenere la funzione razionale fratta
>> [r,p,k] = residue(b,a)
r =
-12 8
p =
-4 -2
k =
[]
residue può anche fornire:
★ un vettore colonna di residui (r)
★ un vettore colonna di poli (p)
★ un vettore riga di termini non frazionari (k)
!4x + 8x2 + 6x + 8
= !12
x + 4+
8x + 2