Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel...
Transcript of Introduzione a MATLAB - Elettrotecnica a... · Matlab eseguirà tutte le istruzioni contenute nel...
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
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
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
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
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
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
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
% 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
� 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
% 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
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
�� 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
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
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
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
% 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
== 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
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
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
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
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
% 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
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
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
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
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
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
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
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
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
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
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
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