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

Post on 08-Aug-2020

2 views 0 download

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

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

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

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

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

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

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

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

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

§ 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

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

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

§§ 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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