Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel...

33
Introduzione a MATLAB Introduzione a MATLAB Università degli Studi di Napoli Federico II CdL Ing. Elettrica Corso di Laboratorio di Circuiti Elettrici Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2 Parte 2 1

Transcript of Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel...

Page 1: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Introduzione a MATLABIntroduzione a MATLAB

Università degli Studi di Napoli Federico IICdL Ing. Elettrica

Corso di Laboratorio di Circuiti Elettrici

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

Parte 2

1

Page 2: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

L’operatore : (due punti)L’operatore : (due punti)Permette di costruire rapidamente vettori:

>> V=60:-5:5V =

60 55 50 45 40 35 30 25 20 15 10 5

>> k=1:10k =

1 2 3 4 5 6 7 8 9 10

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

60 55 50 45 40 35 30 25 20 15 10 5

Consente di selezionare gli elementi di una matrice:

=354

975

238

AB=A(1,:)

B =8 3 2

>> C=A(:,2)

C =375

2

Page 3: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

StringheStringheIn MATLAB è possibile operare, oltre che su numeri, anche su parole (stringhe di caratteri)

>> a='Ingegneria‘a =

Le stringhe si manipolano come i vettori

Un testo in MATLAB è un vettore di caratteri

La stringa va inserita tra apici ‘ ‘

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

a =Ingegneria

>> size(a)ans =

1 10

La stringa va inserita tra apici ‘ ‘

La stringa ‘Ingegneria’ è unamatrice [1××××10]

3

Page 4: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

sin - Seno.

asin - Arcoseno

cos - Coseno.

acos - Arcocoseno

tan - Tangente

atan - Arcotangente.

Funzioni elementariFunzioni elementari

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

exp - Esponenziale

log - Logaritmo naturale

log10 - Logaritmo (base 10)

sqrt - Radice quadrata

abs - Valore assoluto

max - Massimo

min - Minimo

4

Page 5: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

File .m File .m –– EditorEditor di file .mdi file .mUn file .m (M-file) è un programma riconoscibile da Matlab.

E’ un file di testo contenente codice MATLAB

In Matlab è presente un editor di files .m

Per accedere all’editor: File → New → M-file

Con il comando Save il file sarà salvato nella Current Directory

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

5

Page 6: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

I vantaggi di un file .m sono notevoli. Infatti, si può:

� Eseguire un algoritmo senza dover digitare ogni

Se si crea un file prova.m e si digita al prompt il comando

>>prova

Matlab eseguirà tutte le istruzioni contenute nel file.

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

� Eseguire un algoritmo senza dover digitare ogni volta una lunga serie di comandi

� Ottenere una documentazione del lavoro svolto

� Cambiare dati senza dover digitare nuovamente tutti i comandi

� Scambiare programmi con altri utenti

6

Page 7: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Creare il file risolvi.m con il quale risolvere il seguente sistema di equazioni algebriche lineari

Utilizzare il metodo dell’inversa.

EsercizioEsercizio

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

594

0447

5734

321

321

321

−=+−=++=++

xxx

xxx

xxx

7

Page 8: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

% Esempio di m-file. Il simbolo % permette di commentare ogni comando

% Cancello dalla memoria tutte le variabili e pulisco la command windowclear all; clc;

% Matrice A dei coefficienti delle incogniteA=[4 3 7; 7 4 4; 4 -9 1];

% Vettore colonna b dei termini notib=[5; 0; -5];

% Controllo se il sistema è ben-condizionato% Se l'indice rcond << 1 il sistema è mal-condizionato

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

% Se l'indice rcond << 1 il sistema è mal-condizionatodisp('Indice rcond')disp(rcond(A))

% Ricavo il vettore colonna x delle incognitex=inv(A)*b;

% Mostro i risultatidisp('Valori delle incognite')disp(' x(1) x(2) x(3)')disp([x(1) x(2) x(3)])

8

Page 9: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

� Creare la matrice A[3*4]

� Estrarre da A il vettore b

File .m File .m –– Esercizio Esercizio –– esempio1.mesempio1.m

7 11 3 6

22 5 6 12

4 3 2 8

A

= − −

{ }4 3 2 8b =4

3

� Creare il vettore bt (trasposta di b)

� Calcolare s, prodotto scalare tra la prima riga di Ae il vettore bt

� Risultato: s=115Anno Accademico 2009-2010.

Introduzione a MATLAB – Parte 2

3

2

8

b =

9

Page 10: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

% Esempio n.1 di utilizzo Matlab

% Ripulisco la Command Windowclc;

% Cancello dalla memoria tutte le variabiliclear all;

% Creazione della matrice AA=[7 11 3 6; 22 -5 -6 12; 4 3 2 8];

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

A=[7 11 3 6; 22 -5 -6 12; 4 3 2 8];

% Estrazione del vettore bb=A(3,:);

% Trasposta di bbt=b';

% Prodotto 1^riga di A per bts=A(1,:)*bt

10

Page 11: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Immissione di dati da tastiera: inputImmissione di dati da tastiera: input

>> a=input('Inserisci il numero desiderato= ')Inserisci il numero desiderato= 8

a =8

>> b=input('Inserisci la stringa desiderata= ', 's')Inserisci la stringa desiderata= Lezione

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

Inserisci la stringa desiderata= Lezione

b =Lezione

>> c=input('Inserisci il vettore desiderato= ')Inserisci il vettore desiderato= [5 7 11]

c =5 7 11

11

Page 12: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

�� ciclo ciclo forfor …. end…. end

MATLAB come linguaggio MATLAB come linguaggio di programmazionedi programmazione

�� ciclo ciclo ifif … end… end

�� ciclo ciclo whilewhile … end… end

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

12

Page 13: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Controllo di flusso: ciclo Controllo di flusso: ciclo forfor …. end…. end

Il ciclo for ha la seguente struttura:for variabile= espressione

istruzioni

Il ciclo for consente di ripetere un certo numero di volte leistruzioni in esso contenute

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

end

for k=1:4y(k)=2^k;

end

>> y

y =

2 4 8 16

13

Page 14: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

L‘uso eccessivo di cicli for può allungare i tempi di calcolo

Basta fare una verifica con le istruzioni sotto riportate. Ilvettore V viene ricavato in due modi diversi: nel caso a) siusa un ciclo for; nel caso b) si usa il prodotto elemento perelemento.

Il risultato è lo stesso, ma i tempi di calcolo sonoIl risultato è lo stesso, ma i tempi di calcolo sonoestremamente diversi!

a) R=[1:1:1e+4]; I=[1:1:1e+4]; for k=1:1e+4; V(k)=R(k)*I(k); end;

b) R=[1:1:1e+5]; I=[1:1:1e+5]; V=R.*I;

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

14

Page 15: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Controllo di flusso: ciclo if … endControllo di flusso: ciclo if … end

Il ciclo if ha la seguente struttura:if espressione

istruzioniend

Il ciclo if consente di eseguire istruzioni solo se unadeterminata espressione risulta vera

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

end

if k==2y=1;

elseif k==4y=0;

end

if k==2y=1;

end

if k>0y=1;

elsey=0;

end

15

Page 16: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

% Esempio n.2 ciclo if … end

clc; clear all;

% Immissione dati da tastieraA=input('Inserisci un numero=');

if A==5

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

if A==5disp('Ho immesso il numero 5');

elseif A==3disp('Ho immesso il numero 3');

elsedisp('Il numero immesso è diverso da 3 e diverso da 5');

end

16

Page 17: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

== uguale~= diverso da

Per il controllo di flusso occorrono gli operatori relazionali

gli operatori relazionali più comuni sono:

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

< minore di<= minore o uguale> maggiore di>= maggiore o uguale

17

Page 18: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

I cicli possono essere innestati, uno dentro l’altro.

for variabile1 = espressione1for variabile2 = espressione2

istruzioniend

end

for k=1:3for j=1:2

>> a

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

Esercizi: Creare una matrice unità [5×5]Creare una matrice [5×4] triangolare superiore

for j=1:2a(j,k)=k*j;

endend

a =1 2 32 4 6

18

Page 19: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Controllo di flusso: while if … endControllo di flusso: while if … endIl ciclo if consente di eseguire un blocco di istruzioni finchèuna determinata espressione risulta vera. Quando l’espressionerisulta falsa, il flusso del programma esce dal ciclo.

Il ciclo while ha la seguente struttura:while espressione

istruzioni

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

num=10;eps=.1;k=0;while eps<num

k=k+1; a(k)=num;num=num/2;

end

>> a

a =

10.0 5.0 2.5 1.25 0.625 0.3125 0.1563

istruzioniend

19

Page 20: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Il comando breakIl comando breakIl comando break consente di uscire rapidamente da un ciclofor o while. Se break è presente in un ciclo innestato, essoconsente l’uscita solo dal ciclo interno.

clear all; clc; k=0;

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

k=0;while 1

n=input('Scrivi un numero= ')if n<0, break, endk=k+1;m(k)=n^2;

end

Il ciclo continua finchènon viene inserito unnumero minore di zero

20

Page 21: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Esercizio Esercizio –– esempio3.mesempio3.m

Creare un file .m con cui valutare l’epsilon di macchina

L’epsilon di macchina ε è il numero più piccolo che sommato ad 1 restituisce un valore maggiore di 1 :

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

1 1ε + >

ε dà indicazioni sul massimo numero di cifre significative

In Matlab la costante eps contiene il valore dell’epsilon di macchina

2.2204 16eps e= −

21

Page 22: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

% Esempio n.3 % Calcolo dell'epsilon di macchina nella forma 2^-k

% Ripulisco la Command Window e cancello le variabiliclc; clear all;

k=0;epsilon=1; % Comincio dal numero 2^0while 1~=1+epsilon

epsilon = epsilon/2; % Dimezzo il valore di epsilon

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

epsilon = epsilon/2; % Dimezzo il valore di epsilonk=k+1;

end

% Il ciclo è eseguito una volta in più del necessario% Correggo i valori di epsilon e di kepsilon=epsilon*2k=k-1; % epsilon=2^-k

22

Page 23: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

EserciziEsercizi

Creare un file .m per risolvere il seguente sistema:

1.Usare il metodo dell’inversa

1 2 3

1 2 3

1 2 3

3 5 2 0

6 5 4

8 4 6 5

x x x

x x x

x x x

+ + =− + + = + − =

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

1.Usare il metodo dell’inversa

2.Usare il metodo di Cramer (con un ciclo for .. end)

Soluzionex1-2.1275; x2= 2.1667; x3= -2.2255

23

Page 24: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

EserciziEsercizi

� Creare un file .m per risolvere il precedente sistema:

1. Usare il metodo di Gauss

2. Usare la fattorizzazione LU *

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

2. Usare la fattorizzazione LU *

*) Suggerimento: al prompt digitare il comando help lu

24

Page 25: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

EserciziEsercizi

1. Creare un file .m con cui valutare il più piccolo numero xminrappresentabile in Matlab nella forma 2^k

xmin è il numero per il quale si ha: min 02

x =

2. Creare un file .m con cui valutare il più grande numero

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

2. Creare un file .m con cui valutare il più grande numero xmaxrappresentabile in Matlab nella forma 2^k

xmax è il numero per il quale si ha: max *2 infx =

xmin=4.9407e-324 xmax= 8.9885e+307

25

Page 26: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

GraficiGrafici

Se x e y sono due vettori della stessa lunghezza, il comandoplot(x,y)permette di tracciare il graficox-y

x=[-2*pi:pi/10:2*pi]; y=sin(x); plot(x,y)

Il comandoplot permette di costruire grafici

0.6

0.8

1

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

26

Page 27: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

plot(x,y,’s’)

Il comandoplot consente di specificare il colore, lo stile, Imarker della linea da tracciare. A tal fine, è necessario inserirela stringa ‘s’ :

la stringa ‘s’ ha la forma del tipo ‘s’=‘colore-marker-stile’

Ad esempio:

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

colore: b (blue)g (green)r (red)y (yellow)c (cyan)k (black)

marker: . (punto)o (cerchio)s (quadrato)+ (croce)* (stella)d (rombo)x (ics)

stile: - (continua): (puntata)-. (punto-linea)-- (tratteggiata)

27

Page 28: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

plot(x,y,'ro--')

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

plot(x,y,'mv')plot(x,y,'k*:')

plot(x,y,'gd-')

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

plot(x,y,'mv')plot(x,y,'k*:')

28

Page 29: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Il comandohold on consente di tracciare più curve su unostesso grafico

0.6

0.8

1

>> x=[-2*pi:pi/10:2*pi]; y=sin(x); plot(x,y)

>> z=cos(x); hold on; plot(x,z,'r+-')

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

29

Page 30: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Possiamo inserire un titolo al grafico

>> title(Funzione seno')

Possiamo dare un’etichetta agli assi x e y

>> xlabel(‘x [rad]')>> ylabel(‘sin(x)')

MATLAB assegnaautomaticamenteil rangedegli assi. Si puòusareil

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

MATLAB assegnaautomaticamenteil rangedegli assi. Si puòusareilcomando axis([xmin xmax ymin ymax]) per scegliere il range inmodo autonomo

>> axis([-2*pi 2*pi -1 1])

Il comandogrid consente di mostrare una griglia

>> grid

30

Page 31: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

0

0.2

0.4

0.6

0.8

1Funzione seno

sin(

x)

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

-6 -4 -2 0 2 4 6-1

-0.8

-0.6

-0.4

-0.2

x [rad]

31

Page 32: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Il comando Il comando subplotsubplotIl comando subplot permette di costruire più grafici nellastessa finestra

subplot(m,n,p)

Suddividela finestrain unamatrice(m×n) di grafici

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

Suddividela finestrain unamatrice(m×n) di grafici

Seleziona il grafico p-esimo

subplot(2,3,1)

Ottengo una finestra con (2×3) grafici e lavoro sul grafico 1

32

Page 33: Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel file. Anno Accademico 2009-2010. ... L‘uso eccessivo di cicli for può allungare

Creare il file usa_subplot.m con il quale tracciare su un unico grafico le funzioni: sin(x); cos(x); sin(x)^2; cos(x)^2; cos(x)*sin(x); cos(x)+sin(x)

0 5 10-1

-0.5

0

0.5

1Funzione sin(x)

0 5 10-1

-0.5

0

0.5

1Funzione cos(x)

0 5 100

0.2

0.4

0.6

0.8

1Funzione sin(x)2

Anno Accademico 2009-2010. Introduzione a MATLAB – Parte 2

0 5 10 0 5 10 0 5 10

0 5 100

0.2

0.4

0.6

0.8

1Funzione cos(x)2

0 5 10-0.5

0

0.5Funzione sin(x)*cos(x)

0 5 10-1.5

-1

-0.5

0

0.5

1

1.5Funzione sin(x)+cos(x)

33