Introduzione a Matlab
Emanuele Maiorana
Corso di Trasmissioni Numeriche
Trasmissioni Numeriche - Introduzione a Matlab
Roadmap
Saranno presentate le caratteristiche
MATLABTM (MATrix LABoratory)
di
base
del
sistema
• Operazioni elementari su scalari, vettori e matrici
• Script
• Funzioni
• Visualizzazione
• Demo
• Simulink
Trasmissioni Numeriche - Introduzione a Matlab
Intro
MATLAB è uno strumento di analisi dati e di visualizzazione
largamente usato da ingegneri elettronici e non per attività di
ricerca e simulazione.
MATLAB utilizza funzioni esattamente come script C (o C++),
consentendo agli utilizzatori anche di crearne di propri.
La differenza fondamentale dal C è che le funzioni MATLAB sono
scritte specificatamente per operazioni su grandi array, e si basa
su una rappresentazione vettoriale di ogni variabile.
L’utilizzo di MATLAB, a differenza del C, utilizza pesantemente la
memoria del computer, e i tempi di elaborazione sono molto
elevati. Di contro, offre una facilità di utilizzo e una intuitività delle
funzioni molto maggiore.
Trasmissioni Numeriche - Introduzione a Matlab
Interfaccia grafica
Help
Finestra di
Workspace e
Directory
Modifica cartella di lavoro
Chiusura Finestra
Inserimento comandi e funzioni
Inserimento comandi
Utilizzo comandi precedenti
Barra separatrice (modificabile)
Trasmissioni Numeriche - Introduzione a Matlab
Edit window
• Ambiente di editing degli M-files (scripts e functions)
• Puo’ essere usato qualsiasi editor di testo
• Matlab dispone di un text-editor integrato
Commenta le linee selezionate e specifica lo
stile di formattazione nel menu Text
Trova e sostituisci stringhe
Impostando
Breackpoints si può
mettere in pausa i
programmi durante
l’esecuzione e
valutarne
l’andamento
Tenendo il cursore
su una variabile
viene mostrato il
suo valore attuale
Trasmissioni Numeriche - Introduzione a Matlab
Comandi di recupero informazioni
On-line help
• help argomento: fornisce l’help sull’argomento indicato
• helpwin: help interattivo completo
Workspace information
• who, whos: elenca le variabili correntemente in uso
• clear: rimuove tutte le variabili in uso
• clear x,y,z
• clear all
Directory information
• pwd: mostra la directory di lavoro corrente
• cd: cambia la directory di lavoro corrente
• dir: mostra il contenuto della directory di lavoro corrente
• ls: stesso comportamento di dir
Trasmissioni Numeriche - Introduzione a Matlab
Inserimento comandi
Per inserire comandi, basta digitare il comando al prompt.
Es.1:
>> pi
ans =
3.1416
>>
Matlab crea una variabile ans a cui assegna il valore richiesto (in questo
caso pi greco)
Es.2:
>> help DCT
DCT Discrete cosine transform.
Y = DCT(X) returns the discrete cosine transform of X.
The vector Y is the same size as X and contains the
discrete cosine transform coefficients.
Y = DCT(X,N) pads or truncates the vector X to length N
before transforming.
If X is a matrix, the DCT operation is applied to each
column. This transform can be inverted using IDCT.
See also fft, ifft, idct.
Reference page in Help browser
doc dct
Trasmissioni Numeriche - Introduzione a Matlab
Grandezze Scalari
Esempi di comandi
>> 13*9
ans =
117
>> sqrt(167)
La variabile ans viene utilizzata da MATLAB per
la memorizzazione il risultato più recente non
assegnato ad altre variabili
ans =
12.9228
>> sin(pi/6)
ans =
0.5000
>> i
ans =
0 + 1.0000i
i e j se non assegnate rappresentano l’unità
immaginaria
Trasmissioni Numeriche - Introduzione a Matlab
Assegnazione variabili
Esempi di assegnazione scalari e vettori/matrici
>> x=5.5
>> b=[1 ; 2 ; 3 ; 4 ; 5 ; 6]
x =
b =
5.5000
1
2
3
4
5
6
>> y=x^2
y =
30.2500
>> A = [1 2 3; 4 5 6; 7 8 9]
>> z=y-x
A =
z =
1
4
7
24.7500
2
5
8
3
6
9
>> a=[1 2 3 4 5 6]
>>
a =
1
2
3
4
5
6
Trasmissioni Numeriche - Introduzione a Matlab
Operazioni sulle Variabili
Operazioni fondamentali
>>B
1 2
4 5
7 8
Si può utilizzare il tasto ENTER
anche se l’espressione non è
ancora completa, ma MATLAB
non la esegue fino al suo
completamento
= [
3
6
9]
B =
1
4
7
2
5
8
>> isequal(A,B)
ans =
3
6
9
Funzione Booleana: restituisce
1 se le variabili sono uguali, 0
in caso contrario
1
Restituisce le dimensioni della
matrice, nell’ordine di righe e
colonne
>> size(A)
ans =
3
3
Trasmissioni Numeriche - Introduzione a Matlab
Operazioni sulle Variabili
Operazioni fondamentali
Ordine: prima righe, poi colonne
>> A(2,3)
ans =
6
Il carattere : viene utilizzato per indicare un intero
intervallo (tutte le righe in questo caso)
>> A(:,2)
ans =
2
5
8
Matrice Trasposta
>> A'
ans =
1
2
3
4
5
6
7
8
9
>>
Trasmissioni Numeriche - Introduzione a Matlab
Operazioni sulle Variabili
Operazioni fondamentali
Matrice Inversa; può restituire errore nel caso
di matrici singolari o quasi singolari
>> inv(A)
ans =
1.0e+016 *
0.3152
-0.6304
0.3152
-0.6304
1.2609
-0.6304
0.3152
-0.6304
0.3152
Prodotto Righe per Colonne tra due matrici
>> A*B
ans =
30
66
102
36
81
126
42
96
150
>> A.*B
ans =
1
16
49
4
25
64
9
36
81
Prodotto Puntuale: si ottiene premettendo il
carattere . all’operazione da realizzare.
L’operazione viene effettuata elemento per
elemento
Trasmissioni Numeriche - Introduzione a Matlab
Operazioni sulle Variabili
Operazioni fondamentali
>> A^2
>> C = [1 2 3; 4 5 6]
ans =
C =
30
66
102
36
81
126
42
96
150
1
4
2
5
3
6
>> C^2
??? Error using ==> mpower
Matrix must be square.
>> A.^2
ans =
>> C.^2
1
16
49
4
25
64
9
36
81
ans =
1
16
>>
4
25
Esempio
di
operazione
di
potenza
su
una
matrice.
L’operazione può essere fatta
direttamente solo nel caso di
matrici quadrate
Utilizzando l’operatore puntuale
si ottiene l’operazione elemento
per elemento
9
36
>>
Trasmissioni Numeriche - Introduzione a Matlab
Vettori e Matrici
In MATLAB è importante ricordare che tutti i vettori sono
indicizzati partendo da 1.
x(1)
Nel caso di sequenze con riferimento temporale assoluto sarà
necessario prevedere un secondo riferimento dei tempi.
Es.: x(n) = sin(n/2)[u1 (n+10)-u1(n-11)]
>> nx = -10:10;
>> x = sin(pi/2*nx)
x =
Columns 1 through 11
-0.0000
-1.0000
0.0000
1.0000
-0.0000
-1.0000
0.0000
1.0000
…
Trasmissioni Numeriche - Introduzione a Matlab
Notazione a colonna
Il carattere : indica un ciclo implicito, usato per creare vettori:
>> x=1:5
x =
1
2
3
4
5
>>
Si può introdurre anche un incremento non intero:
>> x=1:.1:2
x =
1.0000
1.1000
1.9000
2.0000
1.2000
1.3000
1.4000
1.5000
1.6000
1.7000
1.8000
Es.: Visualizzare la funzione x(n) = sin(n/2)[u1 (n+10)-u1(n11)]
Trasmissioni Numeriche - Introduzione a Matlab
Matrici
Per inserire matrici, si usano parentesi quadre:
>> a=[2, 3; 1, 2]
a =
2
1
3
2
>>
Non e’ necessario dimensionare la matrice: la memoria richiesta
e’ allocata automaticamente.
Per evitare la visualizzazione automatica della risposta è
necessario
terminare il comando con un ;
>> a=[2, 3; 1, 2];
>>
non produce nessun output.
Trasmissioni Numeriche - Introduzione a Matlab
Matrici
E’ possibile costruire matrici automaticamente:
>>
a=zeros(2)
a =
0
0
0
0
>>
mentre:
>> a=zeros(2,3)
a =
0
0
0
0
0
0
>>
Funzioni di Matlab (come zeros) accettano un numero variabile di
elementi in input.
• ones (genera matrici di 1)
• rand (genera matrici di numeri casuali)
• eye
(genera le matrici identità)
Trasmissioni Numeriche - Introduzione a Matlab
Operazioni su vettori
Matlab esegue automaticamente le operazioni algebriche sulle
matrici:
>> a=ones(2,3);
>> b=ones(2,3);
>> a+b
ans =
2
2
2
2
2
2
>>
o anche:
>> a=2*eye(2)
a =
2
0
0
2
>>
Trasmissioni Numeriche - Introduzione a Matlab
Funzioni di matrici
>> a=zeros(1,2)
a =
0
0
>> b=cos(a)
b =
1
1
>>
Per calcolare una potenza invece devo agire sulle singole
componenti. Questo si ottiene con l’operatore . (punto):
>> x=[-1,2];
>> x^2
??? Error using ==> mpower
Matrix must be square.
>> x.^2
ans =
1
4
Trasmissioni Numeriche - Introduzione a Matlab
Funzioni di matrici
Per manipolare l’orientamento delle matrici si possono utilizzare le
funzioni:
>> flipud(A)
ans =
7
4
1
8
5
2
9
6
3
>> fliplr(A)
ans =
3
6
9
2
5
8
1
4
7
6
5
4
9
8
7
>> rot90(A)
ans =
3
2
1
Trasmissioni Numeriche - Introduzione a Matlab
Operatori relazionali
Sono utilizzabili in MATLAB i seguenti operatori relazionali
• == : uguale
• ~= : diverso da
• < : minore di
• <= : minore o uguale
Esempio:
>> x = 2;
>> x == 0
>> x == 2
ans =
ans =
1
0
>> x ~= 3
ans =
1
Trasmissioni Numeriche - Introduzione a Matlab
Operatori relazionali
Possono essere applicati anche alle matrici:
>> a=[1 2; 0 -1];
>> a > 0
ans =
1
0
>> a >= 0
1
0
ans =
1
1
1
0
>>
Trasmissioni Numeriche - Introduzione a Matlab
Cicli IF
Il ciclo basato su if ha la struttura:
if expression
statements
end
L’utilizzo di elseif necessita la seguente struttura
if expression1
statements1
elseif expression2
statements2
else
statements3
end
Es.:
if ((attendance >= 0.90) && (grade_average >= 60))
pass = 1;
end;
Trasmissioni Numeriche - Introduzione a Matlab
Cicli FOR
Il ciclo for ha la struttura:
for variable = expression
statements
end
Di solito espressione è un vettore:
>> s=0;
>> for i=1:10
s=s+i;
end
>> s
s =
55
>>
calcola la somma dei primi 10 numeri interi
Trasmissioni Numeriche - Introduzione a Matlab
Cicli annidati
I cicli for possono essere uno dentro l’altro. Es.:
>> n=4;
>> for i=1:n
for j=1:i
a(i,j) = 1;
end
end
crea una matrice triangolare inferiore:
>> a
a =
1 0 0
1 1 0
1 1 1
1 1 1
0
0
0
1
Es.:
>> a = zeros(k,k) % Preallocate matrix
for m = 1:k
for n = 1:k
a(m,n) = 1/(m+n -1);
end
end
>> a
a =
1.0000
0.5000
0.3333
0.5000
0.3333
0.2500
0.3333
0.2500
0.2000
Trasmissioni Numeriche - Introduzione a Matlab
Cicli annidati
L’utilizzo dei cicli for, applicato su Matrici
particolarmente pesante per l’elaborazione.
in
MATLAB,
è
Esempio: utilizzo della funzione tic toc
>> tic; for i = 1:10ˆ6, sin(i);end; toc;
Elapsed time is … seconds.
>> tic; i=1:10ˆ6; sin(i); toc;
Elapsed time is … seconds.
Trasmissioni Numeriche - Introduzione a Matlab
Cicli WHILE … END
Il ciclo while ha la seguente struttura
while expression
statements
end
Esempio
>> i=1;
>> while i<5
i=i+1;
end
>> i
i =
5
Es.:
>> eps = 1;
while (1+eps) > 1
eps = eps/2;
end
eps = eps*2
>> eps
eps =
2.2204e-016
Trasmissioni Numeriche - Introduzione a Matlab
M-files
Un file .m è un programma riconoscibile da Matlab.
La scrittura di files .m permette di:
• testare un algoritmo
• ottenere una documentazione del lavoro svolto
• riutilizzo dei programmi cambiando solo i dati
• distribuzione del codice
Trasmissioni Numeriche - Introduzione a Matlab
Scripts - Functions
Una funzione MATLAB è una parola di codice che accetta in
ingresso diversi parametri, e restituisce degli output dopo
un’elaborazione
• Scripts M-files: sono files di comandi. Non hanno variabili
in entrata e in uscita e operano sulle variabili del
workspace
• Function M-files: sono files di comandi, che hanno
argomenti in entrata e in uscita. Le variabili interne a
questi programmi non influenzano le variabili del
workspace
Non assegnare a nessuno script o funzione il nome di funzioni
predefinite o il nome di una variabile usata!!!
Trasmissioni Numeriche - Introduzione a Matlab
Esempio
% Script di esempio TSES_01_script.m
% Disegno del valore assoluto della funzione sin(2*pi*freq*t)
% su mille campioni equispaziati nell’intervallo t [0,1).
Tmax = 1; % Durata
samples = 1000; % Numero campioni
delta = Tmax / samples; % DeltaT
freq = 1;
t = 0:delta:Tmax-delta;
s = abs(sin(2*pi*freq*t));
%
%
%
%
for i = 1:samples;
t(i) = (i-1) * delta;
s(i) = abs(sin(2*pi*freq*t(i)));
end;
plot (t,s);
grid on;
title('ABS(Sin)');
xlabel('Tempo (Sec.)');
ylabel('Ampiezza');
Trasmissioni Numeriche - Introduzione a Matlab
Funzioni
Funzione: si crea come uno script – ma concettualmente molto
diversa!!!
Il file contenente la funzione DEVE avere estensione .m e DEVE
avere lo stesso nome della funzione
La funzione puo’ ricevere e restituire dei risultati. Il passaggio dei
parametri avviene per valore
IMPORTANTE: le variabili definite all’interno della funzione hanno
visibilita’ locale e NON possono essere riferite dalla shell
Uso della dichiarazione global per l’utilizzo delle variabili nel
Workspace su tutti i programmi
Trasmissioni Numeriche - Introduzione a Matlab
Esempio
function [xmin,xmax]=minmax(a,m,n)
%MINMAX(A,M,N) calcola l'elemento minimo, XMIN, e l’elemento
% massimo, XMAX della matrice A con M righe ed N colonne
%xmin=-Inf; xmax=Inf;
for i=1:m
for j=1:n
if a(i,j) > xmax
xmax = a(i,j);
end
if a(i,j) < xmin
xmin = a(i,j);
end
end
end
• Dove si trova l’errore nella funzione?
• Come si può migliorarla passando solamente la matrice a?
Trasmissioni Numeriche - Introduzione a Matlab
Dichiarazione di una funzione
function [out1,out2,…]=funz(in1,in2,….)
• Gli argomenti in output vanno a sinistra dell’ =, fra [ ]
• Gli argomenti in input vanno a destra dell’ = , fra ( )
• Posso usare un numero di argomenti minore di quello
indicato nella definizione della function, sia in entrata che
in uscita.
• Es.: a=funz(b), assegna a “in1” il valore “b”, e ad “a” il
valore “out1”
Trasmissioni Numeriche - Introduzione a Matlab
Grafici
Per ottenere un grafico si devono effettuare i seguenti passi:
1. Preparare un vettore di ascisse
2. Preparare un vettore di ordinate
3. Fare il grafico
Esempio: grafico di cos(4x)*exp(x), su [0,2]
>> x=0:0.01:2;
>> f=cos(4*x).*exp(x);
>> plot(x,f)
Il comando figure crea una nuova finestra per immagini,
consentendo di visualizzare diversi comandi plot
Trasmissioni Numeriche - Introduzione a Matlab
Grafico di circonferenza
>>
>>
>>
>>
>>
t=0:0.01:2*pi;
x=cos(t);
y=sin(t);
plot(x,y,'g+')
axis equal
Trasmissioni Numeriche - Introduzione a Matlab
Grafico di Sinusoide
Questo esempio utilizza l’operatore colonna per creare una vettore
di x valori inclusi tra 0 e 2, e successivamente ne calcola il seno,
per poi graficare il risultato.
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
Lo script seguente edita gli assi della figura
xlabel('x = 0:2\pi')
ylabel('Sine of x')
title('Plot of the Sine Function','FontSize',12)
Trasmissioni Numeriche - Introduzione a Matlab
Grafici Multipli
y2 = sin(x-.25);
y3 = sin(x-.5);
plot(x,y,x,y2,x,y3)
legend('sin(x)','sin(x-.25)','sin(x-.5)')
Trasmissioni Numeriche - Introduzione a Matlab
DEMO
Matrici
•
•
•
•
Grafici
•
•
•
•
•
•
Basic Matrix Operations
Matrix Manipulation
Integer Arithmetic Examples
Graphs and Matrices
2-D plots
3-D plots
3-D Surface Plots
Images and Matrices
Viewing a Penny
Quake
Toolboxes Communication
• Bit Error Rate Analysis Tool (utilizzo di Simulink)
• Eye Diagram and Scatter Plot
Signal Processing
• Modulation/Demodulation
Trasmissioni Numeriche - Introduzione a Matlab
Simulink
Simulink è un pacchetto software di MATLAB che fornisce le
funzionalità necessarie per:
• la modellizzazione
• la simulazione
• l’analisi dei sistemi dinamici
E’ in grado di supportare:
• sistemi lineari e non lineari
• sistemi tempo discreto, tempo continuo o ibridi.
I modelli necessari per le simulazioni sono realizzabili utilizzando i
blocchi funzionali forniti da MATLAB, che sono anche modificabili
per le esigenze degli utenti.
Trasmissioni Numeriche - Introduzione a Matlab
Consigli fondamentali
1. Nella moltiplicazione di due matrici che rappresentano una
immagine, fare attenzione a scrivere .* invece che *, dato che
quest’ultimo sarebbe interpretato come moltiplicazione righe
per colonne
2. Ricordarsi di inserire il carattere ; al termine di un comando,
specialmente quando si lavora con immagini o video
3. Cercare di evitare il più possibile numerosi cicli for, e in special
modo cicli annidati
Trasmissioni Numeriche - Introduzione a Matlab