Strumentazione Biomedica 2 Introduzione a MatLab
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)
Facilità d’uso: Esportabilità Ha moltissime funzioni disponibili 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 lavoro Pannelli 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 18 >> Alla variabile “a” è assegnato il valore 18 Matlab fa eco del risultato della operazione Il prompt segnala che Matlab è pronto per un’altra operazione >> a=18; >> Terminando una operazione con “;” Matlab non fa eco. DEI - Univ. Padova (Italia)
Matlab è case-sensitive 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 Delimititatore di riga Delimititatore di matrice 1 2 3 4 5 6 7 8 9 ] Entrambi i comandi creano la stessa matrice 3x3 DEI - Univ. Padova (Italia)
Accedere agli elementi delle matrici 1 2 3 4 5 6 7 8 9 ]; >> A(2,1) ans = 4 >> A(2) Per accedere ad elementi di una matrice si 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 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 destra x=A(2:3,3:4) restituira’ [7 8 11 12] A =[ 1 2 3 4 5 6 7 8 9 10 11 12] DEI - Univ. Padova (Italia)
Dimensioni delle variabili Vettori length(X) restituisce la lunghezza del vettore X o il numero di colonne di X Matrici [M,N]=size(X) righe e colonne della matrice X size(X,1) numero di righe della matrice X size(X,2) numero di colonne della matrice X DEI - Univ. Padova (Italia)
Matrici e vettori Caratteri e Stringhe Record Celle Tipi di variabili 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.618 sprintf('%0.5g',1/eps) 4.5036e+15 sprintf('%15.5f',1/eps) 4503599627370496.00000 sprintf('%d',round(pi)) 3 sprintf('%s','hello') hello sprintf('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 control str2double 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 mean RETmeandir.m: % Compute the mean direction of the barycenters distant between 20 and MEAN Average or mean value. LMS Construct a least mean square (LMS) adaptive algorithm object. EQ_GETOPT Computes Equalizer coefficients that minimizes the Mean Square GWNOISE 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 Clustering DMAE 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 Vettori e Matrici con elementi equispaziati >> x=0:2.5:10 x = 0 2.5000 5.0000 7.5000 10.0000 >> Conoscendo il numero di elementi necessari N x = linspace(Min, Max, N) x = logspace(Min, Max, 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 Le operazioni di matrici e vettori con scalari sono gestite da Matlab in maniera intuitiva >> a=ones(2,3); >> b=2*ones(2,3); >> a+b ans = 3 3 3 >> a=2*eye(2) a = 2 0 0 2 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 Y=ones(2,3) Y = 1 1 1 >> X*Y ??? Error using ==> mtimes Inner matrix dimensions must agree. >> DEI - Univ. Padova (Italia)
Operazioni aritmetiche: matrici e vettori >> X*Y' ans = 6 6 Moltiplicazione di due matrici >> W=[4,5,6] W = 4 5 6 >> X*W' ans = 32 Moltiplicazione matrice-vettore DEI - Univ. Padova (Italia)
Operazioni aritmetiche: elemento per elemento Le operazioni aritmetiche operano sulle matrici: A*B A/B =A*B-1 A\B =A-1*B A^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 diagonale e 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 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 | b ans = 1 1 0 1 >> a & b 0 1 0 1 >> ~b 0 0 1 0 >> a=[0,1,0,3]; >> b=[1,1,0,3]; 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>b ans = 0 0 0 0 >> b>a 1 0 1 0 >> DEI - Univ. Padova (Italia)
Ricerca di elementi indice = find(expr); [riga, colonna] = find (expr); >> n=find(X>0) n = 2 5 7 8 >> [r,c]=find(X>0) r = 1 c = 3 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 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.m questa è 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 mean C:\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 = espressione istruzioni End 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; DEI - Univ. Padova (Italia)
Strutture condizionali: if ... else Struttura: if espressione istruzioni elseif espressione else end Esempio: if(sole==TRUE & lezione==FALSE) mare=TRUE; elseif(lezione==TRUE & interesse==0) else mare=FALSE; end DEI - Univ. Padova (Italia)
Strutture condizionali: switch ... case Esempio: condizione:=sole+2*lezione+4*interesse; switch(condizione) case 0, mare=0; case 1, mare=1; case 2, ... end Struttura: switch variabile case v1, istruzione case v2, ... otherwise 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 y y x x 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 = normal LineStyle = none LineWidth = [0.5] Marker = * MarkerSize = [6] MarkerEdgeColor = auto MarkerFaceColor = none XData = [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 >> q=fzero(@prova,pi/4) q = 0.3927 function y=prova(x) y=cos(4*x); DEI - Univ. Padova (Italia)