30.06.2013 Views

Laboratorio di Stima e Filtraggio: Introduzione a Matlab - Automatica

Laboratorio di Stima e Filtraggio: Introduzione a Matlab - Automatica

Laboratorio di Stima e Filtraggio: Introduzione a Matlab - Automatica

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Laboratorio</strong> <strong>di</strong> <strong>Stima</strong> e <strong>Filtraggio</strong>:<br />

<strong>Introduzione</strong> a <strong>Matlab</strong><br />

Chiara Masiero<br />

masiero.chiara@dei.unipd.it<br />

DEI - UniPD<br />

8 Maggio 2013<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 1 / 1


Sommario<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 2 / 1


<strong>Matlab</strong>: cos’è?<br />

<strong>Introduzione</strong><br />

MATrix LABoratory: nasce come software<br />

per il calcolo numerico (vettoriale e<br />

matriciale) a fine anni ’70.<br />

Applicazioni: sistemi <strong>di</strong> controllo, comunicazioni, progettazione<br />

elettronica, ottimizzazione, statistica, biologia computazionale,<br />

finanza, elaborazione <strong>di</strong> immagini, calcolo parallelo. . .<br />

http://www.mathworks.com/products/matlab/<br />

Un’alternativa open source: GNU Octave<br />

http://www.gnu.org/software/octave/<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 3 / 1


<strong>Introduzione</strong><br />

<strong>Matlab</strong>: come si presenta?<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 4 / 1


<strong>Matlab</strong>: l’interfaccia<br />

Elementi fondamentali<br />

1 Command window<br />

2 Workspace<br />

3 Current <strong>di</strong>rectory<br />

4 Command history<br />

5 E<strong>di</strong>tor<br />

<strong>Introduzione</strong><br />

Possiamo impartire le istruzioni. . .<br />

1 . . . tramite la command window: ogni istruzione viene eseguita<br />

imme<strong>di</strong>atamente, ma chiudendo il programma per<strong>di</strong>amo il nostro<br />

lavoro;<br />

2 . . . scrivendole nell’e<strong>di</strong>tor e salvandole in uno script. In questo modo<br />

possiamo conservare il programma in memoria. Inoltre, l’e<strong>di</strong>tor fornisce<br />

anche strumenti che semplificano la programmazione.<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 5 / 1


Definizione delle variabili<br />

Istruzioni <strong>di</strong> base<br />

Definire una variabile numerica:<br />

» a = 5<br />

Definire una stringa:<br />

» s = ’hello’<br />

Definire un vettore<br />

» vettore = [6 2 1 4]<br />

Definire una matrice<br />

» matrice = [1 2; 3 4]<br />

Definire una matrice a elementi complessi:<br />

» C = [2 3+1i; 4; 5-3*1i]<br />

Per sopprimere l’echo: terminare le istruzioni con il punto e virgola:<br />

» k = 10;<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 6 / 1


Gestione delle variabili<br />

Istruzioni <strong>di</strong> base<br />

Lista delle variabili definite nel workspace:<br />

» who<br />

Descrizione delle variabili definite nel workspace:<br />

» whos<br />

Salvataggio <strong>di</strong> tutte le variabili nel file data.mat:<br />

» save data<br />

Salvataggio della sola variabile a:<br />

» save data a<br />

Cancellazione <strong>di</strong> tutte le variabili dal workspace:<br />

» clear all<br />

Cancellazione della sola variabile a:<br />

» clear a<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 7 / 1


Istruzioni <strong>di</strong> base<br />

Vettori: operazioni <strong>di</strong> base - 1<br />

Definire il vettore v = [ 2 4 6 8 ]:<br />

» v = [2 4 6 8]<br />

Lunghezza <strong>di</strong> un vettore:<br />

» l = length(v)<br />

Vettore trasposto (e ad elementi coniugati): » v’ ans = 2 4 68<br />

Sommare gli elementi:<br />

» sum(v) ans = 20<br />

Moltiplicare gli elementi:<br />

» prod(v) ans = 384<br />

Vettore simmetrico:<br />

» fliplr(v) ans = 8 6 4 2<br />

Attenzione: fliplr funziona per vettori riga. Per vettori colonna<br />

utilizzare flipud.<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 8 / 1


Istruzioni <strong>di</strong> base<br />

Vettori: operazioni <strong>di</strong> base - 2<br />

Sia v = [ 2 4 6 8 ]<br />

Estrarre elementi. Attenzione: gli in<strong>di</strong>ci in <strong>Matlab</strong> partono da 1:<br />

» a = v(3) ans = 6<br />

» v_2 = v(2:-1:1) ans = 4 2<br />

In<strong>di</strong>ci degli elementi che sod<strong>di</strong>sfano una con<strong>di</strong>zione:<br />

» find(v>5)<br />

ans =<br />

3 4<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 9 / 1


Istruzioni <strong>di</strong> base<br />

Matrici: operazioni <strong>di</strong> base - 1<br />

Definire la matrice M = [ 2 4<br />

6 8 ]:<br />

» M = [2 4 ; 6 8]<br />

Dimensioni <strong>di</strong> una matrice:<br />

» [num_righe,num_colonne] = size(M)<br />

Estrarre elementi.<br />

» a_12 = M(1,2) ans = 4<br />

» riga_1 = M(1,:) ans = 2 4<br />

» colonna_2 = M(:,2) ans = 4 8<br />

Autovalori e inversione:<br />

» eig(M) ans =<br />

» inv(M) ans =<br />

−0.7446<br />

10.7446<br />

−1.0000 0.5000<br />

0.7500 −0.2500<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 10 / 1


Istruzioni <strong>di</strong> base<br />

Matrici: operazioni <strong>di</strong> base - 2<br />

Sia C = <br />

2 3+i<br />

4 5−3i .<br />

Matrice trasposta e coniugata:<br />

2.0000 4.0000<br />

» C’ ans = 3.0000−1.0000i 5.0000+3.0000i<br />

Siano A = [ 1 2<br />

3 4 ], B = [ 6 7<br />

8 9 ].<br />

Somma <strong>di</strong> matrici: » A + B ans =<br />

7 9<br />

11 13<br />

Prodotto <strong>di</strong> matrici:<br />

» A * B ans = 22 25<br />

50 57<br />

Prodotto elemento per elemento » A .* B ans =<br />

6 14<br />

24 36<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 11 / 1


Polinomi -1<br />

Istruzioni <strong>di</strong> base<br />

In <strong>Matlab</strong> possiamo rappresentare i polinomi come vettori dei<br />

coefficienti a potenze decrescenti. Definiamo p(z) = 2z 3 + 7z − 5:<br />

» p = [2 0 7 -5]<br />

Per valutare il polinomio per z = 3:<br />

» p_in_3 = polyval(p,3)<br />

Per calcolare le ra<strong>di</strong>ci <strong>di</strong> p(z):<br />

» r = roots(p) ans = −0.3198+1.9511i<br />

−0.3198−1.9511i<br />

0.6395<br />

Per ottenere un polinomio monico le cui ra<strong>di</strong>ci siano 3, 2 ± 5i:<br />

» r2 = [3 2+5∗1i 2−5∗1i] ;<br />

» p2 = poly(r2)<br />

ans = 1 −7 41 −87<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 12 / 1


Polinomi - 2<br />

Istruzioni <strong>di</strong> base<br />

Siano p1(x) = x 2 − 3x − 4, p2(x) = 3x 2 − 3x + 8 e p3(x) = x + 4:<br />

p1=[ 1 −3 −4 ];<br />

p2=[ 3 −3 8 ];<br />

p3=[ 1 4 ];<br />

Per calcolare il prodotto <strong>di</strong> p1(x) con p3(x):<br />

» q1 = conv(p1,p3)<br />

ans = 1 1 −16 −16<br />

Per calcolare quoziente e resto nella <strong>di</strong>visione <strong>di</strong> p2(x) per p3(x):<br />

» [q2,r2] = deconv(p2,p3)<br />

q2 =<br />

r2 =<br />

3 −15<br />

0 0 68<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 13 / 1


Istruzioni logiche<br />

Istruzioni con<strong>di</strong>zionali e cicli iterativi<br />

<strong>Matlab</strong> può valutare proposizioni logiche. La convenzione è true = 1 e<br />

false = 0.<br />

Alcuni operatori logici: uguaglianza (==), and (&&), or (||),<br />

negazione (∼), >=, ∼=, . . .<br />

Esempi:<br />

>> ((a > 0) || (c > ((a > a =[2 6 41 7 10];<br />

>> a(a


Istruzioni con<strong>di</strong>zionali e cicli iterativi<br />

Istruzioni con<strong>di</strong>zionali<br />

if [con<strong>di</strong>zione]<br />

[istruzioni_1]<br />

else<br />

[istruzioni_2]<br />

end<br />

[con<strong>di</strong>zione] è un’espressione<br />

logica del tipo visto prima<br />

Attenzione a non confondere<br />

l’operatore che valuta<br />

l’uguaglianza (==) con il<br />

simbolo <strong>di</strong> assegnazione (=)<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 15 / 1


Cicli iterativi<br />

Istruzioni con<strong>di</strong>zionali e cicli iterativi<br />

Ciclo for:<br />

for s = 1.0:-0.1:0.0<br />

<strong>di</strong>sp(s)<br />

end<br />

Ciclo while:<br />

k = 1;<br />

while k==1<br />

if (a


Script e funzioni<br />

Script e funzioni<br />

Script : sequenza <strong>di</strong> istruzioni <strong>Matlab</strong>. Si lancia dalla command window :<br />

» nome_file esegue le istruzioni scritte in nome_file.m<br />

Funzione : Scriviamo il file dati_rettangolo.m:<br />

function [area,perimetro] = dati_rettangolo(a,b)<br />

% [area,perimetro] = dati_rettangolo(a,b)<br />

% Calcola l’area ed il perimetro <strong>di</strong> un rettangolo <strong>di</strong><br />

lati a e b<br />

area = a ∗ b;<br />

perimetro = 2 ∗ (a + b);<br />

» [area, perimetro] = dati_rettangolo(a,b)<br />

Le variabili area e perimetro vengono inizializzate con il valore<br />

dell’area e del perimetro <strong>di</strong> un rettangolo <strong>di</strong> lati a e b.<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 17 / 1


Script e funzioni<br />

Alcuni esempi <strong>di</strong> funzioni ed uso della guida<br />

Alcune funzioni utili: real, imag, eye, ones, sin, cos, exp,<br />

log, plot, stem, min, max, conv, deconv, abs, phase,. . .<br />

Per ottenere informazioni su una funzione possiamo invocare help<br />

(per la documentazione estesa, invocare helpwin):<br />

» help abs<br />

ABS Absolute value.<br />

ABS(X) is the absolute value of the elements of X.<br />

When X is complex, ABS(X) is the complex modulus<br />

(magnitude) of the elements of X.<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 18 / 1


Grafici - 1<br />

Grafici<br />

Rappresentiamo la funzione seno sull’intervallo [0, 2π], con intervallo<br />

<strong>di</strong> campionamento pari a T = 0.01:<br />

» T = 0.01;<br />

» x = 0:T:2*pi;<br />

» plot(x,sin(x))<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 19 / 1


Grafici - 2<br />

Grafici<br />

Ren<strong>di</strong>amo il grafico più informativo:<br />

» T = 0.01;<br />

» x = 0:T:2*pi;<br />

» plot(x,sin(x),’r -.’,...<br />

’LineWidth’,3)<br />

» grid<br />

» title(’Plot of sin(x)’)<br />

» xlabel(’x’)<br />

» ylabel(’sin(x)’)<br />

» axis([0 2*pi -1 1])<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 20 / 1


Grafici - 3<br />

Grafici<br />

E’ possibile rappresentare più elementi sullo stesso grafico tramite il<br />

comando hold on:<br />

>> figure<br />

>> x = 0:T:2*pi;<br />

>> y1 = sin(x);<br />

>> y2 = cos(x).^2;<br />

>> plot(x,y1,’r --’)<br />

>> hold on<br />

>> plot(x,y2,’b -.’)<br />

>> grid<br />

>> legend(’sin(x)’,’cos^2(x)’)<br />

>> axis([0 2*pi -1 1])<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 21 / 1


Grafici - 4<br />

Altri tipi <strong>di</strong> grafico:<br />

Grafici<br />

stem: in<strong>di</strong>cato per segnali campionati<br />

stairs: in<strong>di</strong>cato per segnali interpolati con zero-order hold<br />

Altri coman<strong>di</strong> utili per la creazione <strong>di</strong> grafici:<br />

semilogx: scala logaritmica (in base 10) per l’ascissa<br />

semilogy: scala logaritmica (in base 10) per l’or<strong>di</strong>nata<br />

loglog: scala logaritmica (in base 10) per entrambi gli assi<br />

Lanciare » doc plot sulla command window per accedere ad<br />

informazioni esaurienti sulle funzionalità grafiche <strong>di</strong> <strong>Matlab</strong><br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 22 / 1


Esempio riepilogativo<br />

Esempio riepilogativo<br />

% Script che calcola valore massimo e minimo, me<strong>di</strong>a e<br />

deviazione standard<br />

% <strong>di</strong> un vettore aleatorio con <strong>di</strong>stribuzione uniforme<br />

nell’intervallo [a,b].<br />

close all, clc<br />

lunghezza_vettore = 100;<br />

% Generazione casuale a partire da una <strong>di</strong>stribuzione<br />

uniforme tra a e b<br />

a = -6;<br />

b = 4;<br />

v = a + (b-a).*rand(lunghezza_vettore,1);<br />

% Calcoliamo il valore massimo e minimo del vettore<br />

[valore_min, i_min] = min(v);<br />

[valore_max, i_max] = max(v);<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 23 / 1


Esempio riepilogativo<br />

% Calcoliamo me<strong>di</strong>a e deviazione standard.<br />

me<strong>di</strong>a = mean(v);<br />

<strong>di</strong>ff = v - me<strong>di</strong>a;<br />

dev_std = sqrt(sum(<strong>di</strong>ff. ∧ 2)/length(v));<br />

<strong>di</strong>sp([’Me<strong>di</strong>a = ’,num2str(me<strong>di</strong>a)]);<br />

<strong>di</strong>sp([’Deviazione standard = ’,num2str(dev_std)]);<br />

% Produciamo il grafico richiesto<br />

figure<br />

stem(v);<br />

hold on<br />

stem(i_min,valore_min,’k x’,’MarkerSize’,8)<br />

stem(i_max,valore_max,’g s’,’MarkerSize’,8)<br />

valor_me<strong>di</strong>o = me<strong>di</strong>a*ones(lunghezza_vettore);<br />

plot(valor_me<strong>di</strong>o,’r–’)<br />

grid on<br />

legend(’v’,’valore minimo’,’valore massimo’,’valor me<strong>di</strong>o’)<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 24 / 1


Esercizio riepilogativo<br />

Esercizio riepilogativo<br />

Scrivere un programma <strong>Matlab</strong> che<br />

1 Calcoli la somma dei polinomi p = x 3 − 2x + 8 e q = 17x 2 − 5<br />

(attenzione alla corrispondenza tra coefficienti e grado dei monomi)<br />

2 Rappresenti sullo stesso grafico p, q e p + q sull’intervallo [−30, 30];<br />

Estensione: scrivere una funzione che sommi e rappresenti polinomi<br />

generici.<br />

C. Masiero (DEI - UniPD) <strong>Introduzione</strong> a <strong>Matlab</strong> 8 Maggio 2013 25 / 1

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!