Strumentazione Biomedica 2 Introduzione a MatLab.

Post on 01-May-2015

237 views 1 download

transcript

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