Matlab
Ing. Francesco Licandro
Corso Fondamenti di Telecomunicazioni
A.A. 2004- 2005
1
MATLAB: MATrix LABoratory
Matlab – Ing. Francesco Licandro - 2005
2
Interfaccia Grafica
Matlab – Ing. Francesco Licandro - 2005
3
Struttura dell’ambiente MATLAB
„
Command Window (o Shell)
„
„
„
„
Graphic Window
„
„
Finestra Principale
Prompt “>>”
Usata per eseguire comandi, lanciare script,
etc…
Contiene l’output dei comandi grafici
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
Matlab – Ing. Francesco Licandro - 2005
4
MATLAB windows
Matlab – Ing. Francesco Licandro - 2005
5
Comandi generali
On-line help
help argomento : fornisce l’help su argomento
helpwin: help interattivo
Workspace information
who, whos: elenca le variabile correntemente in uso
clear: rimuove tutte le variabili in uso
clear x,y,z: rimuove le variabili x,y,z
Directory information
pwd: mostra la directory di lavoro corrente
cd: cambia la directory di lavoro corrente
dir: mostra il contenuto della dir. di lavoro corrente
ls: ---- come dir -----
Matlab – Ing. Francesco Licandro - 2005
6
Operazioni su scalari
>> 13*9
ans =
117
>> sqrt(167)
ans =
12.9228
>> sin(pi/6)
ans =
0.5000
NOTA: pi=3.1415…
i,j se non assegnate rappresentano
l’unita’ immaginaria.
>> i
ans =
0 + 1.0000i
>> complex(real,imag);
NOTA: variabile “ans”
Contiene il risultato
“piu’ recente”
Matlab – Ing. Francesco Licandro - 2005
7
Creazione di una matrice
Elemento per elemento
>>A = [1 2 3 4; 5 6 7 8];
Che succede
se
si toglie il ‘;’?
Chiamata a funzione
>>B = zeros(10,2);
Da file testo
>>C = load(‘dati.txt’);
Spazio di lavoro
>>who
>>whos
Matlab – Ing. Francesco Licandro - 2005
8
Assegnazione di variabili
>> b = [1; 2; 3; 4; 5; ]
b =
1
2
3
4
5
>> x = 5.5;
>> y = x^2;
>> z = y-x
z =
24.7500
>> a = [1 2 3 4 5 6]
a =
1 2 3 4 5 6
>> A = [1 2 3; 4 5 6; 7 8
9]
A =
1 2 3
4 5 6
7 8 9
Matlab – Ing. Francesco Licandro - 2005
9
Arrotondamenti
Domanda: come si determina la parte intera di un numero in virgola mobile?
Risposta: provare i seguenti comandi di Matlab™: fix, round, floor, ceil.
Esempio:
>>x = [-5.8, -3.2, -2.5, 0., 0.5, 2.1, 3.9]
>>fixX = fix(x)
>>roundX = round(x)
>>floorX = floor(x)
>>ceilX = ceil(x)
Output:
x=
fixX =
roundX =
floorX =
ceilX =
-5.8
-5
-6
-6
-5
-3.2
-3
-3
-4
-3
-2.5
-2
-3
-3
-2
0
0
0
0
0
Matlab – Ing. Francesco Licandro - 2005
0.5
0
1
0
1
2.1
2
2
2
3
3.9
3
4
3
4
10
Help di Matlab
„
Per eseguire l’help di
Matlab, scriver nella shell
dei comandi:
>> help
E’ possibile eseguire l’help
di una funzione scrivendo
help nomefunzione.
ad esempio:
>> help inv
„
Matlab – Ing. Francesco Licandro - 2005
11
Variabili predefinite
„
i, j
unità immaginaria
„
pi
Pigreco
„
Inf
infinito (ad es.: 3/0)
„
NaN
not a number (as es.: 0/0, Inf/Inf)
„
sin, cos, tan, asin, acos
funzioni trigonometriche (in radianti)
„
sinh, cosh, asinh, acosh funzioni iperboliche
„
sqrt, log, log10, exp
funzioni varie
„
rem
resto della divisione intera (divisione–
modulo)
Matlab – Ing. Francesco Licandro - 2005
12
Operatori elementari
„
Trasposta
>>B = A’;
„
Determinante, rango, inversa
>>B = det(A);
>>C = rank(A);
>>D = inv(A);
„
Dimensione
>>size (A,1)
>>size (A,2)
>>length(A)
Matlab – Ing. Francesco Licandro - 2005
13
Operatori di intervallo
„
In cui si specifica l’incremento
>>1:10
>>1:2:10
>>10:-1:1
„
In cui si specificano gli estremi e/o il numero di
elementi
>>linspace(1,100,10)
>>help linspace
>>logspace(1,2,10)
>>help logspace
Matlab – Ing. Francesco Licandro - 2005
14
Operatori di confronto
„
Operatori di confronto:
„
„
„
„
„
„
„
<
<=
>
>=
==
~=
minore
minore o uguale
maggiore
maggiore o uguale
uguale
diverso
Operatori logici:
„
„
„
~
&
|
NOT
AND
OR
Matlab – Ing. Francesco Licandro - 2005
15
Caratteri speciali
I simboli possono essere creati utilizzando la combinazione
del tasto ALT e il tastierino numerico.
Ad esempio:
per
per
per
per
produrre
produrre
produrre
produrre
il
il
il
il
simbolo:
simbolo:
simbolo:
simbolo:
{ premere ALT + 123 (tastierino numerico)
} premere ALT + 125 (tastierino numerico)
| premere ALT + 124 (tastierino numerico)
~ premere ALT + 126 (tastierino numerico)
Matlab – Ing. Francesco Licandro - 2005
16
Elementi e sottomatrici
„
Come accedere a singoli elementi di una
matrice:
>>A(1,3) % Visualizza l’elemento della
prima riga e terza colonna
„
Tecniche per definire sottomatrici:
>>A(1:2,1)
>>A(:,1)
>>A([1 3 5],1)
>>A([5 3 1],1)
Matlab – Ing. Francesco Licandro - 2005
17
Cancellare righe e colonne
„
„
Si possono cancellare righe o colonne da una
matrice utilizzando luna semplice istruzione:
Esempio
Per cancellare la seconda riga della
matrice X:
X(2,:)=[]
Analogamente per cancellare una colonna:
X(:,3)=[]
Matlab – Ing. Francesco Licandro - 2005
18
Dimensione di una matrice o vettore
Domanda: come determinare il numero di righe e colonne di una matrice?
Risposta: occorre utilizzare l’istruzione size.
Esempio:
>>A = zeros(3,5)
>>nRows = size(A,1);
>>nCols = size(A,2);
>>disp(['nRows = ',num2str(nRows),' nCols = ,num2str(nCols)]);
Output:
A =
0 0 0 0
0 0 0 0
0 0 0 0
nRows =
0
0
0
3 nCols = 5
Matlab – Ing. Francesco Licandro - 2005
19
Vettori, indici e tempi
„
„
In MATLAB tutti I vettori sono indicizzati partendo
…
dall’indice
1
x(1)
Nel caso di sequenze con riferimento temporale
assoluto sarà necessario prevedere un secondo
vettore dei tempi
Matlab – Ing. Francesco Licandro - 2005
20
Operazioni con matrici
Matlab – Ing. Francesco Licandro - 2005
21
Rappresentazione grafica di
vettori
„
Essenzialmente si usano tre funzioni per
graficare:
„
„
„
„
„
„
plot: rappr. di tipo continuo o per punti
stem: rappr. a impulsi (tipica per sequenze)
bar: diagramma a barre (tipico di istogrammi)
Per ulteriori opzioni:
>> help plot (ovvero help stem, help bar)
Se invocate con un solo argomento (vettore),
graficano i valori degli elementi del vettore
rispetto all’indice
Se gli argomenti (vettori) sono due, utilizzano il
primo come indice (ascissa) e il secondo per i
valori (ordinata)
Matlab – Ing. Francesco Licandro - 2005
22
Eempio 1
Matlab – Ing. Francesco Licandro - 2005
23
Gestione delle figure
Di default MATLAB ridirige l’output dei comandi
grafici sulla figura creata piu’ recentemente
(all’inizio, Figure n.1)
>> figure crea una nuova figura e vi dirige l’output
>> figure(N) dirige l’output sulla figura N (la crea se
non esiste)
>> hold on sovrappone grafici sull’ultima figura
attivata
>> subplot(r,c,i) o subplot rci suddivide la figura
corrente in una matrice di sottografici a r righe e
c colonne e attiva il sottografico i-esimo
(contando per righe)
„
Matlab – Ing. Francesco Licandro - 2005
24
Subplot
Domanda: come disegnare con Matlab™ quattro diagrammi in un’unica finestra?
Risposta: si utilizza l’istruzione subplot(n,m,i) che permette di disegnare n righe ed m
colonne di diagrammi puntando nella fattispecie sul diagramma i-esimo contando da
sinistra a destra e dall’alto in basso.
Esempio:
subplot(2,2,1);
al #1
plot(x1,y1),title
subplot(2,2,2);
plot(x2,y2),title
subplot(2,2,3);
plot(x3,y3),title
subplot(2,2,4);
plot(x4,y4),title
% 4 diagrammi (2 x 2), inizio a puntare
‘diagramma 1';
% punto al #2
‘diagramma 2';
% punto al #3
‘diagramma 3';
% punto al #4
‘diagramma 4';
Nota: il carattere ‘%’ permette di inserire dei commenti nello script
Matlab – Ing. Francesco Licandro - 2005
25
Marcatori stile-colore
„
E’ possibile specificare, colore, stile della linea e
marcatori, attraverso il seguente comando:
plot(x,y,’marcatore-stile’)
dove ‘marcatore-stile’ rappresenta la sequenza di
1, 2 o 3 caratteri che indicano rispettivamente:
„
„
„
Colore
Stile linea
marcatore
Matlab – Ing. Francesco Licandro - 2005
26
Stili e marcatori
- Tipi di colore: ‘c’, ‘m’, ‘y’, ‘r’, ‘g’, ‘b’, ‘w’, ‘k’
- Stile linea: ‘-’ linea continua
‘- -’ linea tratteggiata
‘:’ linea a punti
‘-.’ liena tratti e punti
‘none’ senza linea
tipi di marcatore: ‘+’, ‘o’, ‘*’, ‘^’, ‘x’
Esempio:
plot(x,y, ‘y:+’)
Traccia una linea in giallo a puntini e pone un marcatore + a
ciascun dato
Matlab – Ing. Francesco Licandro - 2005
27
Esercizio 1
Matlab – Ing. Francesco Licandro - 2005
28
Esercizio 2
Matlab – Ing. Francesco Licandro - 2005
29
Esercizio
„
Problema:
Costruire una matrice A (10000x1) i cui elementi sono
tutti uguali e pari al contenuto della variabile b (1x1).
„
Soluzione:
>>b = 3;
>>A = ones(10000,1)*b;
Matlab – Ing. Francesco Licandro - 2005
30
Simboli e caratteri speciali
Lettere greche
minuscole
Lettere greche
maiuscole
Simboli
matematici
Matlab – Ing. Francesco Licandro - 2005
31
Esempio di caratteri speciali
Domanda: come si fa a mostrare i caratteri speciali nelle
scritte (ad esempio titolo ed assi di un diagramma) ?
Risposta: si utilizzano i caratteri speciali TeX che
premettono un carattere di backslash
Esempio:
>>plot(xF,yF,‘r-')
>>title('Funzione \alpha’); % lettera greca alfa
Matlab – Ing. Francesco Licandro - 2005
32
Assegnazione stringhe
Domanda: esiste un modo per memorizzare una
informazione in una variabile di tipo stringa?
Risposta: Sì. È molto semplice. Basta assegnare la stringa
alfanumerica tra virgolette semplici ad una nuova
variabile.
Esempio:
>>unaStringa = ‘Soluzione non accettabile’;
>>messaggio = ‘Il programma abortisce per
una grave errore.’;
>>disp(unaStringa);
>>disp(messaggio);
Matlab – Ing. Francesco Licandro - 2005
33
Matrici sparse
>>[i,j,s]=find(A)
Trova elementi non nulli in A
„
„
Matrice sparsa: con molti elementi nulli. Può
essere memorizzata in modo più parsimonioso
semplicemente elencando gli elementi non nulli
Da matrice completa a matrice sparsa:
>>[i,j,s] = find(A),S = sparse(i,j,s)
>>S = sparse(A)
„
Da matrice sparsa a matrice completa:
>>A = full(S)
Matlab – Ing. Francesco Licandro - 2005
34
Soluzione di sistemi di lineari
„
Problema:
Soluzione di un sistema lineare Ax = b
„
MATLAB:
x =
A/b
Matlab – Ing. Francesco Licandro - 2005
35
I/O data file ASCII
– dlmread dlmwrite
Con carattere delimitatore
– csvread csvwrite
Valori separati da virgola
– wk1read wk1write
Lotus 1,2,3 (WK1) Worksheet
– load save
File ASCII generici
– xlsread xlsread
Excel (XLS) file.
Matlab – Ing. Francesco Licandro - 2005
36
Comandi I/O a basso
livello per file ASCII
fopen – Apre un file
fscanf – Legge dati formattati da un file
fprintf – Scrive dati formattati su un file
fgetl – Legge linea da file, scartando il
carattere newline
ftell – Ritorna la posizione corrente
fseek – Specifica la posizione corrente
fclose – Chiude un file
Matlab – Ing. Francesco Licandro - 2005
37
Esempio: lettura file ASCII
fid = fopen(filen,'r');
h.date = fscanf(fid,'%s\n',1);
h.tgsize = fscanf(fid,'%f\n',1);
h.tgampl = fscanf(fid,'%f\n',1);
h.trials = fscanf(fid,'%d\n',1);
h.targets = fscanf(fid,'%d\n',1);
h.tgvisible = fscanf(fid,'%s\n',1);
h.handvisible = fscanf (fid,'%s\n',1);
h.L = fscanf(fid,'%f\n',2);
h.distances = fscanf(fid,'%f\n',4);
fclose(fid);
Matlab – Ing. Francesco Licandro - 2005
38
File binari in formato MAT
MAT è un formato binario MATLAB
indipendente dalla piattaforma, usato per
memorizzare una o più variabili dello
Workspace
„
save <nome file> < variabile>
Salva file in formato MAT
„
load <nome file>
Legge file in formato MAT
Matlab – Ing. Francesco Licandro - 2005
39
Comandi di I/O a basso
livello per file binari
„
„
„
„
„
„
fopen – Apre un file
fread – Legge da file binario
fwrite – Scrive file binario
fseek – Specifica indicatore di posizione
ftell – Ritorna la posizione corrente
fclose – Chiude file
Matlab – Ing. Francesco Licandro - 2005
40
Esempio: lettura di file binari
„
„
„
„
fid = fopen(fname,'r','b');
data = fread(fid,inf,'float32');
data=
reshape(data,3,length(data)/3)';
fclose(fid);
Matlab – Ing. Francesco Licandro - 2005
41
Script File
„
„
„
„
„
„
File contenente una sequenza di comandi
MATLAB, interpretati dalla shell come se fossero
digitati manualmente
Tipicamente viene salvato con estensione .m
Uno script viene eseguito digitando al prompt
della shell il nome dello script stesso
NON assegnare a nessuno script il nome di
funzioni predefinite o il nome di una variabile
usata!!!
IMPORTANTE: le variabili definite all’interno dello
script hanno visibilita’ globale e possono essere
riferite dalla shell
Matlab – Ing. Francesco Licandro - 2005
42
Strutture di controllo di flusso
„
MATLAB ha cinque strutture di controllo di
flusso:
„
„
„
„
„
If
Switch
For
While
break
Matlab – Ing. Francesco Licandro - 2005
43
Struttura if
„
„
„
La struttura if valuta un’ espressione logica ed esegue un
gruppo di asserzioni quando l’espressione è vera.
La parola end termina il gruppo di asserzioni.
Esempio
If A > B
‘Greater’
elseif A < B
‘less’
elseif A==B
‘equal’
else
error(‘Unexpected situation’)
end
Matlab – Ing. Francesco Licandro - 2005
44
Struttura Switch e case
„
„
La struttura switch esegue gruppi di asserzioni sul valore
di una variabile o espressione. La keywords case o
otherwhise delimita i gruppi
Esempio
switch lower(METHOD)
case {'linear','bilinear'}
disp('Method is linear')
case 'cubic'
disp('Method is cubic')
case 'nearest'
disp('Method is nearest')
otherwise
disp('Unknown method.')
end
Matlab – Ing. Francesco Licandro - 2005
45
Struttura for
„
„
Il loop for ripete un gruppo di istruzioni un
numero fisso di volte. Un end termina le
asserzioni.
Esempio
for I = 1:N,
for J = 1:N,
A(I,J) = 1/(I+J-1);
end
end
Matlab – Ing. Francesco Licandro - 2005
46
Struttura while
„
„
Il ciclo while ripete un gruppo di asserzioni un
numero indefinito di volte attraverso il controllo
di una variabile. Un end delinea le asserzioni
Esempio
E = 0*A; F = E + eye(size(E)); N = 1;
while norm(E+F-E,1) > 0,
E = E + F;
F = A*F/N;
N = N + 1;
end
Matlab – Ing. Francesco Licandro - 2005
47
Comando break
„
„
L’asserzione break lascia che si esca da un loop for o
while anche se non è verificata l’espressione del loop.
Esempio
E = 0*A; F = E + eye(size(E)); N = 1;
while norm(E+F-E,1) > 0,
E = E + F;
F = A*F/N;
N = N + 1;
if N >= 5
‘N maggiore di 5’
break
end
end
Matlab – Ing. Francesco Licandro - 2005
48
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 può ricevere e restituire dei risultati. I
passaggi di parametri avvengono per valore
IMPORTANTE: le variabili definite all’interno della
funzione hanno visibilità locale e NON possono
essere riferite dalla shell
Matlab – Ing. Francesco Licandro - 2005
49
Bibliografia
„
http://www.eece.maine.edu/mm/matweb.html
„
http://spicerack.sr.unh.edu/~mathadm/tutorial/software/matlab/
„
http://www.engin.umich.edu/group/ctm/basic/basic.html
„
http://www.mines.utah.edu/gg_computer_seminar/matlab/matlab.html
„
http://www.math.ufl.edu/help/matlab-tutorial/
„
http://www.indiana.edu/~statmath/math/matlab/
Matlab – Ing. Francesco Licandro - 2005
50
Scarica

Guida Matlab - Ingegneria Informatica e delle Telecomunicazioni