Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10)...

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

Transcript of Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10)...

Page 1: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

Introduzione a MATLABIntroduzione a MATLAB

Università degli Studi di Napoli Federico IICdL Ing. Elettrica

Corso di Laboratorio di Circuiti Elettrici

Parte 2

1

Page 2: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

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

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

Consente di selezionare gli elementi di una matrice:

⎥⎥⎥

⎢⎢⎢

⎡=

354975238

AB=A(1,:)

B =8 3 2

>> C=A(:,2)

C =375

>> k=1:10k =

1 2 3 4 5 6 7 8 9 10

2

Page 3: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

>> a='Ingegneria‘a =Ingegneria

>> size(a)ans =

1 10

Le stringhe si manipolano come i vettori

Un testo in MATLAB è un vettore di caratteri

La stringa va inserita tra apici ‘ ‘

La stringa ‘Ingegneria’ è una matrice [1×10]

3

Page 4: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

sin - Seno.asin - Arcosenocos - Coseno.acos - Arcocosenotan - Tangenteatan - Arcotangente.exp - Esponenzialelog - Logaritmo naturalelog10 - Logaritmo (base 10)sqrt - Radice quadrataabs - Valore assolutomax - Massimomin - Minimo

Funzioni elementariFunzioni elementari

4

Page 5: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

§ 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

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

>>prova

Matlab eseguirà tutte le istruzioni contenute nel file.

6

Page 7: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

Utilizzare il metodo dell’inversa.

59404475734

321

321

321

−=+−=++=++

xxxxxxxxx

EsercizioEsercizio

7

Page 8: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

% 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-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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

§ Creare la matrice A[3*4]

§ Estrarre da A il vettore b

§ 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

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

7 11 3 622 5 6 124 3 2 8

A⎡ ⎤⎢ ⎥= − −⎢ ⎥⎢ ⎥⎣ ⎦

{ }4 3 2 8b =4328

b

⎧ ⎫⎪ ⎪⎪ ⎪= ⎨ ⎬⎪ ⎪⎪ ⎪⎩ ⎭

9

Page 10: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

% 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];

% 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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

§§ ciclo ciclo forfor ……. end. end

§§ ciclo ciclo ifif …… endend

§§ ciclo ciclo whilewhile …… endend

MATLAB come linguaggio MATLAB come linguaggio di programmazionedi programmazione

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

12

Page 13: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

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

istruzioniend

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

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

end

>> y

y =

2 4 8 16

13

Page 14: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

Il 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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

Controllo di flusso: ciclo Controllo di flusso: ciclo ifif …… endend

Il ciclo if ha la seguente struttura:if espressione

istruzioniend

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

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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

% Esempio n.2 ciclo if … end

clc; clear all;

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

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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

== uguale~= diverso da< minore di<= minore o uguale> maggiore di>= maggiore o uguale

Per il controllo di flusso occorrono gli operatori relazionali

gli operatori relazionali più comuni sono:

17

Page 18: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

for variabile1 = espressione1for variabile2 = espressione2

istruzioniend

end

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

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

a(j,k)=k*j;end

end

>> a

a =1 2 32 4 6

18

Page 19: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

Controllo di flusso: Controllo di flusso: whilewhile ifif …… endendIl 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.

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

Il ciclo while ha la seguente struttura:while espressione

istruzioniend

19

Page 20: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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;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 un numero minore di zero

20

Page 21: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

Esercizio Esercizio –– esempio3.mesempio3.mCreare 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 :

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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

% 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 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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

EserciziEserciziCreare un file .m per risolvere il seguente sistema:

1. Usare il metodo dell’inversa2. Usare il metodo di Cramer (con un ciclo for .. end)

1 2 3

1 2 3

1 2 3

3 5 2 06 5 4

8 4 6 5

x x xx x xx x x

+ + =⎧⎪− + + =⎨⎪ + − =⎩

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

23

Page 24: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

EserciziEsercizi

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

1. Usare il metodo di Gauss2. Usare la fattorizzazione LU *

*) Suggerimento: al prompt digitare il comando help lu

24

Page 25: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

EserciziEsercizi1. Creare un file .m con cui valutare il più piccolo numero

xmin rappresentabile 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 xmax rappresentabile 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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

GraficiGrafici

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

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

Il comando plot permette di costruire grafici

-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

26

Page 27: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

plot(x,y,’s’)

Il comando plot consente di specificare il colore, lo stile, I marker 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:

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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

-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-')

28

Page 29: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

Il comando hold on consente di tracciare più curve su unostesso grafico

-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

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

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

29

Page 30: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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 assegna automaticamente il range degli assi. Si può usare il comando axis([xmin xmax ymin ymax]) per scegliere il range in modo autonomo

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

Il comando grid consente di mostrare una griglia

>> grid

30

Page 31: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

0

0.2

0.4

0.6

0.8

1Funzione seno

x [rad]

sin(

x)

31

Page 32: Introduzione a MATLAB · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

subplot(m,n,p)

Suddivide la finestra in una matrice (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 · exp - Esponenziale log - Logaritmo naturale log10 - Logaritmo (base 10) sqrt - Radice quadrata ... § Eseguire un algoritmo senza dover digitare ogni ...

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

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

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