Strumentazione Biomedica 2 Introduzione a MatLab.
-
Upload
arsenio-zamboni -
Category
Documents
-
view
238 -
download
1
Transcript of Strumentazione Biomedica 2 Introduzione a MatLab.
Strumentazione Biomedica 2 Introduzione a MatLab
DEI - Univ. Padova (Italia)
Cos’è MatLab
MatLab = Matrix Laboratory
Utilizza come elemento base le matrici:
Una matrice NxM indica una matrice con N righe ed M colonne
Matlab consente:
L’accesso ad un ambiente di calcolo L’utilizzo di funzioni specializzate La programmazione
DEI - Univ. Padova (Italia)
Perchè MatLab
• Facilità d’uso:– Ha moltissime funzioni disponibili– E’ possibile programmare funzioni ad hoc– Non ci si deve preoccupare di programmazione
a basso livello
• Esportabilità– Le funzioni MatLab sono file di testo
DEI - Univ. Padova (Italia)
La Command Window
Spazio di lavoroPannelli ausiliari
DEI - Univ. Padova (Italia)
Command Window come console
L’uso interattivo della command window è spesso poco conveniente e noioso:
è difficile trovare gli errori,
per ripetere le operazioni bisogna riscrivere tutto ogni volta
DEI - Univ. Padova (Italia)
Operazioni di assegnazione
>> a=18
a =
18
>>
Alla variabile “a” è assegnato il valore 18
Matlab fa eco del risultato della operazione
Il prompt segnala che Matlab è pronto perun’altra operazione
>> a=18;>>
Terminando una operazione con “;” Matlabnon fa eco.
DEI - Univ. Padova (Italia)
Osservazioni
• Matlab è case-sensitive
• I nomi di variabili non possono cominciare con numeri
• I nomi di variabili non possono contenere spazi
• I nomi di variabili non possono contenere caratteri speciali
DEI - Univ. Padova (Italia)
Creazione di matrici
>> A = [1 2 3; 4 5 6; 7 8 9]
Delimititatore di matriceDelimititatore di riga
>> A = [...1 2 34 5 67 8 9 ]
Entrambi i comandi creano la stessa matrice 3x3
DEI - Univ. Padova (Italia)
Accedere agli elementi delle matrici
>> A = [...1 2 34 5 67 8 9 ];
>> A(2,1)
ans =
4
>> A(2)
ans =
4
Per accedere ad elementi di una matricesi usano le parentesi tonde
Un elemento è identificato dalla sua posizione (riga,colonna),
oppure dal suo indice, contando gli elementi della matrice per colonna
DEI - Univ. Padova (Italia)
Sottomatrici
A =[
1 2 3 4 5 6 7 8 9 10 11 12]
Per accedere ad un elemento:x=A(3,4) assegnera’ 12
Per accedere ad un’intera riga,x=A(2,:) restituira’ [5 6 7 8]
Per accedere ad un’intera colonna,x=A(:,3) restituira’ [3 7 11]’
Per accedere ad una sottomatrice, ad es.la 2X2 in basso a destrax=A(2:3,3:4) restituira’ [7 8
11 12]
DEI - Univ. Padova (Italia)
Dimensioni delle variabili
Vettorilength(X) restituisce la lunghezza del vettore X
o il numero di colonne di X
Matrici[M,N]=size(X) righe e colonne della matrice Xsize(X,1) numero di righe della matrice Xsize(X,2) numero di colonne della matrice X
DEI - Univ. Padova (Italia)
Tipi di variabili
• Matrici e vettori
• Caratteri e Stringhe
• Record
• Celle
DEI - Univ. Padova (Italia)
Stringhe
Le stringhe sono delimitate dal singolo apice
>> str='Introduzione a Matlab'
str =
Introduzione a Matlab
>>
DEI - Univ. Padova (Italia)
Formattazione di stringhe
s = sprintf(stringa formattata,A,...)
Esempi:
sprintf('%0.5g',(1+sqrt(5))/2) 1.618sprintf('%0.5g',1/eps) 4.5036e+15 sprintf('%15.5f',1/eps) 4503599627370496.00000sprintf('%d',round(pi)) 3sprintf('%s','hello') hellosprintf('The array is %dx%d.',2,3) The array is 2x3
DEI - Univ. Padova (Italia)
Conversione di stringhe
Conversione di numeri in stringhe
>>val=67;>>str=num2str(val);
int2str Convert integer to string.mat2str Convert matrix to string.num2str Convert number to string.sprintf Convert number to string under format control.sscanf Convert string to number under format controlstr2double Convert string to double-precision value.str2num Convert string to number.
DEI - Univ. Padova (Italia)
Record
>> libro(1).posizione=1;>> libro(1).titolo='The Lords of the Rings';>> libro(1).autore='JRR Tolkien';>> libro(2).posizione=10;>> libro(2).titolo='Godel, Hescher, Bach';>> libro(2).autore='DJ Hopfstaedter';>> libro(2)
ans =
posizione: 10 titolo: 'Godel, Hescher, Bach' autore: 'DJ Hofstaedter'
>>
DEI - Univ. Padova (Italia)
Celle
E’ possibile costruire vettori e matrici di elementi di dimensioni diverse
fname'
ans =
'c2d.m' 'acker.m' 'append.m' 'augstate.m' 'balreal.m' 'bode.m'
>> fname{2}
ans =
acker.m
Dall’array di celle si può accedere agli elementi
DEI - Univ. Padova (Italia)
Gestione dello spazio di lavoro
who produce la lista delle variabili nel workspace
whos la lista contiene informazioni su tipo e dimensioni
clear elimina tutte le variabili nel workspace
clear <nomevariabile> cancella solo la variabile con nome nomevariabile
DEI - Univ. Padova (Italia)
Salvataggio e Caricamento
save <nomefile> salva nel file nomefile.mat tutte le variabili del workspace
load < nomefile > carica nel workspace tutte le variabili presenti in nomefile.mat
save < nomefile > < nomevar > salva nel file nomefile.mat le variabili in nomevar
load < nomefile > < nomevar > carica nel workspace le variabili nomevar del file nomefile.mat
Osservazioni:con l’opzione –ASCII i comandi precedenti leggono/salvano file di testo
è possibile utilizzare la forma funzionale s=load(nomefile);
DEI - Univ. Padova (Italia)
Richiamare i comandi: limitare la fatica inutile
>> <FrecciaSu>,<FrecciaGiu> Richiama i comandi già dati dalla Command Window
>> test + <FrecciaSu>,<FrecciaGiu> Richiama i comandi già dati dalla Command Window che cominciano con test
DEI - Univ. Padova (Italia)
Help di Matlab
DEI - Univ. Padova (Italia)
Help di Matlab
>> help NomeComando Help in linea per il comando NomeComando
>> help min MIN Smallest component. For vectors, MIN(X) is the smallest element in X. For matrices, MIN(X) is a row vector containing the minimum element from each column. For N-D arrays, MIN(X) operates along the first non-singleton dimension. [Y,I] = MIN(X) returns the indices of the minimum values in vector I. If the values along the first non-singleton dimension contain more than one minimal element, the index of the first one is returned. MIN(X,Y) returns an array the same size as X and Y with the smallest elements taken from X or Y. Either one can be a scalar. [Y,I] = MIN(X,[],DIM) operates along the dimension DIM. When complex, the magnitude MIN(ABS(X)) is used, and the angle ANGLE(X) is ignored. NaN's are ignored when computing the minimum. Example: If X = [2 8 4 then min(X,[],1) is [2 3 4], 7 3 9] …
>>
DEI - Univ. Padova (Italia)
... e quando non si sa che pesci pigliare
>> lookfor NomeComando Ricerca in tutto l’help in linea la parola NomeComando
>> lookfor meanRETmeandir.m: % Compute the mean direction of the barycenters distant between 20 andMEAN Average or mean value.LMS Construct a least mean square (LMS) adaptive algorithm object. EQ_GETOPT Computes Equalizer coefficients that minimizes the Mean SquareGWNOISE generate valid mean value, standard deviation and seeds for GWNOISE block. DSPBLKMEAN Signal Processing Blockset Mean block helper function. DSPBLKMEAN2 Signal Processing Blockset Mean block helper function.MEAN2 Compute mean of matrix elements.ipexhistology.m: %% Color-Based Segmentation Using K-Means ClusteringDMAE Mean absolute error performance derivative function.DMSE Mean squared error performance derivatives function.DMSEREG Mean squared error w/reg performance derivative function.MAE Mean absolute error performance function.MSE Mean squared error performance function.
……
DEI - Univ. Padova (Italia)
Matrici notevoli
A=eye(10) matrice identità 10x10
A=zeros(3,5) matrice 3x5 con elementi tutti nulli
A=ones(3,5) matrice 3x5 con elementi tutti pari a 1
A=diag([3, 5, 6]) matrice 3x3, con elementi sulla diagonale specificati
DEI - Univ. Padova (Italia)
Costruzione di vettori e matrici
>> x=0:2.5:10x =
0 2.5000 5.0000 7.5000 10.0000>>
Vettori e Matrici con elementi equispaziati
x = linspace(Min, Max, N)
x = logspace(Min, Max, N)
Conoscendo il numero di elementi necessari N
DEI - Univ. Padova (Italia)
Variabili casuali
X=rand(N,M) matrice NxM con elementi casuali distribuiti unif. in [0,1]
X=randn(N,M) matrice NxM con elementi casuali distribuiti gauss. come Ν(0, 1)
Sfruttando trasformazioni di variabili aleatorie, è possibile ottenere vettori con valori distribuiti variamente
X=1-2*rand(N,M) matrice NxM con elementi casuali distribuiti unif. in [-1,1]
X=2+5*randn(N,M) matrice NxM con elementi casuali distribuiti gauss. come Ν(2, 5)
X=exp(randn(N,M)) matrice NxM con elementi casuali distribuiti come lognormale
DEI - Univ. Padova (Italia)
Operazioni aritmetiche: scalari e matrici
>> a=2*eye(2)a =2 00 2
>> a=ones(2,3);>> b=2*ones(2,3);>> a+bans =3 3 33 3 3
Le operazioni di matrici e vettori con scalari sono gestite da Matlab in maniera intuitiva
DEI - Univ. Padova (Italia)
Operazioni aritmetiche: matrici e vettori
Attenzione:quando si opera su matrici e vettori le dimensioni devono essere compatibili!
>> X=[1:3;1:3]X = 1 2 3 1 2 3Y=ones(2,3)Y = 1 1 1 1 1 1>> X*Y??? Error using ==> mtimesInner matrix dimensions must agree.>>
DEI - Univ. Padova (Italia)
Operazioni aritmetiche: matrici e vettori
>> X*Y'ans = 6 6 6 6
>> W=[4,5,6]W = 4 5 6
>> X*W'ans = 32 32
Moltiplicazione di due matrici
Moltiplicazione matrice-vettore
DEI - Univ. Padova (Italia)
Operazioni aritmetiche: elemento per elemento
Le operazioni aritmetiche operano sulle matrici:
A*BA/B =A*B-1 A\B =A-1*BA^2 =A2 =A*A
E’ possibile compiere le operazioni elemento per elemento
C=A.*B Cij =Aij*Bij
C=A.*B Cij =Aij*Bij
C=A.^2 Cij=Aij2
In tal caso le matrici devono avere dimensione uguale!
DEI - Univ. Padova (Italia)
Potenza e inversa
Data una matrice quadrata X, è possibile calcolare le sue potenze:
>>Xp=X^p;
e la sua inversa:
>>Xi=inv(X);
DEI - Univ. Padova (Italia)
Autovalori ed autovettori
Data una matrice X quadrata, gli autovalori ed autovettori sono tali che:X*V = V*D
se V è la matrice doiagonale con gli autovalori di X sulla diagonalee D è la matrice le cui colonne corrispondono agli autovettori di X
[V,D]=eig(X);
DEI - Univ. Padova (Italia)
Statistiche
max(x), min(x):mean(x),median(x),var(x),std(x):prctile(x,p);
>> X=randn(3,3)X = -0.4326 0.2877 1.1892 -1.6656 -1.1465 -0.0376 0.1253 1.1909 0.3273>> max(X)ans = 0.1253 1.1909 1.1892>>
DEI - Univ. Padova (Italia)
Funzioni su matrici
sum(x): somma gli elementi di x (per colonne se x è matrice).
prod(x): esegue il prodotto degli elementi di x (per colonne se x è matrice).
diff(x): calcola le differenze [x(2)-x(1), x(3)-x(2), … , x(n)-x(n-1)].
det(X) : determinante di X.
rank(X) : rango di X.
trace(X): traccia di X.
poly(X) : polinomio caratteristico di X.
norm(X, p): norma p di X (matrice o vettore che sia)
DEI - Univ. Padova (Italia)
Funzioni di matrici
In generale le funzioni di Matlab operano sulle matrici elemento per elemento
X=pi-2*pi*rand(2,4)X = 0.5925 -2.6195 -2.4734 0.9245 -2.7361 0.5638 2.7779 -1.9677>> sin(X)ans =
0.5584 -0.4987 -0.6196 0.7983 -0.3944 0.5344 0.3558 -0.9223>>
DEI - Univ. Padova (Italia)
Matrici multidimensionali
Le matrici di Matlab possono avere qualsiasi dimensione:
>>X=ones(3,5,2) è una matrice 3x5x2
>>X=pi-2*pi*rand(2,3,3)X(:,:,1) = -1.0144 0.1934 -3.0683 1.3546 2.7346 -0.5202
X(:,:,2) = 0.4807 1.0433 1.7219 -0.0975 0.4216 -0.5014
X(:,:,3) = -1.6359 -0.8830 0.7551 -0.1874 1.8280 -1.7802>>
DEI - Univ. Padova (Italia)
Campionare spazi multidimensionali
>>[xmat,ymat]=meshgrid(-2:2,-2:2)
xmat = -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2
ymat = -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2>>
DEI - Univ. Padova (Italia)
Funzioni di più variabili
Funzione di una variabile:>>t=0:0.1:pi;>>x=t.^2;
Funzione di due variabili:>> [xmat,ymat]=meshgrid(0:0.1:pi,0:0.1:pi);>>zmat=xmat.^2+ymat.^2;
DEI - Univ. Padova (Italia)
Operatori logici
Gli operatori logici più comuni sono:
& and logico| or logico~ notlogico
>> a=[0,1,0,3];>> b=[1,1,0,3];
>> a | bans = 1 1 0 1
>> a & bans = 0 1 0 1
>> ~bans = 0 0 1 0
DEI - Univ. Padova (Italia)
Operatori relazionali
Gli operatori relazionali più comuni sono:
== uguale~= diverso da< minore di<= minore o uguale
>> a=[0,1,2,3];>> b=[1,1,3,3];>> a>bans = 0 0 0 0>> b>aans = 1 0 1 0>>
DEI - Univ. Padova (Italia)
Ricerca di elementi
indice = find(expr);[riga, colonna] = find (expr);
X=pi-2*pi*rand(3,3)X = -0.9016 -1.4240 1.4580 1.1307 0.5532 0.3775 -2.8909 -1.5367 -2.7230
>> n=find(X>0)n =
2 5 7 8>> [r,c]=find(X>0)r = 2 2 1 2c = 1 2 3 3
DEI - Univ. Padova (Italia)
m-files
Sequenza di comandi scritta in un file di testo con estensione ‘m’
m-files
Per eseguire un m-file basta digitare il suo nome nella command window e premere invio
DEI - Univ. Padova (Italia)
m-files: vantaggi
Poter ripeter in maniera semplice una lunga lista di comandi
Eseguire la stessa sequanza di comandi su dati diversi
Esportare sequanze di comandi su altre macchine o per altri utenti
Tenere traccia di ciò che si è fatto
DEI - Univ. Padova (Italia)
Tipi di m-files: scripts
Gli scripts sono sequenze di comandi:
Tutte la variabili ed i parametri utilizzati devono essere:
Presenti nel workspace
Creati all’interno della sequenza
File prova.m:
str1=‘questa è una stringa ’;str2= ‘di prova’;disp([str,str2])
>> prova.mquesta è una stringa di prova>>
DEI - Univ. Padova (Italia)
Tipi di m-files: funzioni
Sono files di comandi con argomenti in entrata e in uscita.
Tutte le variabili ed i parametri utilizzati da una funzione devono essere:
Passati come argomenti
Creati all’interno della sequenza
DEI - Univ. Padova (Italia)
Tipi di m-files: funzioni
File prova.m:
function str=DispStr(str1,str2);
str1=‘questa è una stringa ’;str2= ‘di prova’;str=[str1,str2];disp(str)
>> str1='questa è una stringa ';>> str2='di prova';>> str=DispStr(str1,str2)str =
questa è una stringa di prova>>
DEI - Univ. Padova (Italia)
Cosa si sta eseguendo? which
Nel caso si abbiano risultati inaspettati, Può essere utile calcolare quale funzione si stia eseguendo:
>> which meanC:\Progra~1\matlabR12\toolbox\matlab\datafun\mean.m>>
DEI - Univ. Padova (Italia)
Commenti
E’ buona abitudine di programmazione sia negli scripts che nelle functions inserire dei commenti
•I commenti sono segnalati da %:
•Le prime righe di commento di uno script o di una function diventano parte dello help online
DEI - Univ. Padova (Italia)
Cicli condizionali: for
for variabile = espressioneistruzioniEnd
Esempio: calcolo di 10!s=0;for i=1:10,
s=s*i;end
L’indentazione aiuta la leggibiltà dei
programmi
DEI - Univ. Padova (Italia)
Cicli condizionali: while
while (espressione),istruzioni
end
Esempio: calcolo di 10!s=0;i=1;while(i<=10),
s=s*i;end
DEI - Univ. Padova (Italia)
Strutture condizionali: if ... else
Struttura:if espressione
istruzionielseif espressione
istruzionielse
istruzioniend
Esempio: if(sole==TRUE & lezione==FALSE)
mare=TRUE;elseif(lezione==TRUE & interesse==0)
mare=TRUE;else
mare=FALSE;end
DEI - Univ. Padova (Italia)
Strutture condizionali: switch ... case
Struttura:switch variabile
case v1,istruzione
case v2,istruzione
...otherwise
istruzioneend
Esempio: condizione:=sole+2*lezione+4*interesse;switch(condizione)
case 0,mare=0;
case 1,mare=1;
case 2, mare=0;
...end
DEI - Univ. Padova (Italia)
Plot
>> t=0:0.01:5;>> plot(t,exp(-t).*cos(4*t));
DEI - Univ. Padova (Italia)
Sovrapposizione di grafici
>> t=0:0.01:5;>> plot(t,exp(-t).*cos(4*t));>> hold on;>> plot(t,exp(-t),'r');
DEI - Univ. Padova (Italia)
Riquadri
L’istruzione subplot(M,N,K) crea una figura contenente M*N riquadri, distribuiti su M righe ed N colonne. L’indice K indica il plot attivo.
>> subplot(2,1,2); plot(t,exp(-t).*cos(4*t));>> subplot(2,2,1); plot(t,exp(-t));>> subplot(2,2,2); plot(t,cos(4*t));>>
DEI - Univ. Padova (Italia)
Visualizzazione di immagini
Ogni matrice può essere intesa come una immagine e viceversa:
>> X=127+20*randn(20,20);>> imagesc(X)
>> imshow(X/255)
DEI - Univ. Padova (Italia)
La mappa dei colori
Con il comando colormap è possibile cambiare il modo in cui ad ogni valore di una matrice è assegnato un colore
colormap(jet)
colormap(bone)
colormap(cool)
DEI - Univ. Padova (Italia)
Visualizzazione: grafici ed immagini
x
y
x
y
DEI - Univ. Padova (Italia)
Visualizzare grafici ed immagini
>> imagesc(X)>> colormap(gray)>> hold on>> plot(5,10,'*r')
DEI - Univ. Padova (Italia)
Formattazione dei grafici: editor interattivo
DEI - Univ. Padova (Italia)
Formattazione dei grafici: editor interattivo
DEI - Univ. Padova (Italia)
Handle di un oggetto
Ogni oggetto disegnato ha delle sue proprietà.Per accedervi bisogna conoscere a quale ogetto ci si vuole riferire:
handle
>> h(1)=imagesc(X);>> h(2)=plot(5,10,'*r');
DEI - Univ. Padova (Italia)
Formattazione dei grafici: riga di comando
>> get(h)Color = [1 0 0]EraseMode = normalLineStyle = noneLineWidth = [0.5]Marker = *MarkerSize = [6]MarkerEdgeColor = autoMarkerFaceColor = noneXData = [5]YData = [10]ZData = []......>>
DEI - Univ. Padova (Italia)
Formattazione dei grafici: riga di comando
>> set(h(2),'MarkerSize',24,'LineWidth',3)
DEI - Univ. Padova (Italia)
Funzioni che agiscono su funzioni
DEI - Univ. Padova (Italia)
Soluzione di equazioni differenziali
Funzioni che hanno come argomento una funzione:
Integrazione
Riceca di zeri
Ricerca di minimi
Integrazione numerica
Soluzione numerica di equazioni differenziali
DEI - Univ. Padova (Italia)
Ricerca di zeri
>> q=fzero('cos(4*x)',pi/4)
q =
0.3927
function y=prova(x)
y=cos(4*x);
>> q=fzero(@prova,pi/4)
q =
0.3927