44
CORSO DI LAUREA IN INGEGNERIA GESTIONALE Politecnico di Milano Per il corso di FONDAMENTI DI AUTOMATICA Silvia Strada INTRODUZIONE A MATLAB

INTRODUZIONE A MATLAB - home.deib.polimi.ithome.deib.polimi.it/strada/teaching_files/FondamentiAutomatica_ges... · specifica la cartella di lavoro: nella finestra sono presenti

  • Upload
    buithu

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

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

5

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.

L’Ambiente Matlab

9

Help

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

La Command Window

14

Preferences della Command Window

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

28

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