ATTUALE TENDENZA DEL SOFTWARE - Manuela Chessa · Introduzione a MATLAB Fabio Solari e Manuela...

34
Introduzione a MATLAB Fabio Solari e Manuela Chessa Informatica Medica, I semestre - MATLAB 1 ATTUALE TENDENZA DEL SOFTWARE • Semplificare e velocizzare lo sviluppo delle applicazioni • Utilizzo di paradigmi di programmazione visuale (ambienti RAD Rapid Application Development): (ambienti RAD, Rapid Application Development): – linguaggi tradizionali • Basic, C/ C++ – nuovi linguaggi • gestione di strumentazione (LabVIEW) • gestione web (Java) Informatica Medica, I semestre - MATLAB 2 ATTUALE TENDENZA DEL SOFTWARE • Utilizzo di paradigmi di programmazione classica con apporto di funzioni specifiche precompilate – linguaggi tradizionali C C++ (NAG lib ) C, C++ (NAG library) nuovi ambienti di sviluppo (con interfaccia utente interattiva di tipo prompt) l l i b li ( h i ) • calcolosimbolico (Mathematica) • calcolo numerico (MATLAB) Informatica Medica, I semestre - MATLAB 3 CALCOLO SIMBOLICO VS. CALCOLO NUMERICO NUMERICO Mathematica MATLAB In[1]:=Expand[(a+b)^2] » (a+b)^2 Out[1]=a 2 + 2ab + b 2 ??? Undefined function or variable 'a'. 1/2 b 1/3 se a=1/2 e b=1/3 I [4] E d[( b)^2] se a=1/2 e b=1/3 ( +b)^2 In[4]:=Expand[(a+b)^2] Out[4]= 25/36 » (a+b)^2 ans = 0.6944 Out[4] 25/36 Informatica Medica, I semestre - MATLAB 4

Transcript of ATTUALE TENDENZA DEL SOFTWARE - Manuela Chessa · Introduzione a MATLAB Fabio Solari e Manuela...

Introduzione a MATLAB

Fabio Solari e Manuela Chessa

Informatica Medica, I semestre -MATLAB

1

ATTUALE TENDENZA DEL SOFTWARE

• Semplificare e velocizzare lo sviluppo dellep ppapplicazioni

• Utilizzo di paradigmi di programmazione visuale(ambienti RAD Rapid Application Development):(ambienti RAD, Rapid Application Development):– linguaggi tradizionali

• Basic, C/ C++– nuovi linguaggi

• gestione di strumentazione (LabVIEW)• gestione web (Java)

Informatica Medica, I semestre -MATLAB

2

ATTUALE TENDENZA DEL SOFTWARE

• Utilizzo di paradigmi di programmazione classicacon apporto di funzioni specifiche precompilate

– linguaggi tradizionaliC C++ (NAG lib )• C, C++ (NAG library)

– nuovi ambienti di sviluppo (con interfaccia utenteinterattiva di tipo prompt)

l l i b li ( h i )• calcolo simbolico (Mathematica)• calcolo numerico (MATLAB)

Informatica Medica, I semestre -MATLAB

3

CALCOLO SIMBOLICO VS. CALCOLO NUMERICONUMERICO

• Mathematica • MATLAB

In[1]:=Expand[(a+b)^2] » (a+b)^2Out[1]=a2 + 2ab + b2 ??? Undefined function or variable 'a'.

1/2 b 1/3se a=1/2 e b=1/3

I [4] E d[( b)^2]

se a=1/2 e b=1/3

( +b)^2In[4]:=Expand[(a+b)^2]

Out[4]= 25/36

» (a+b)^2

ans = 0.6944Out[4] 25/36

Informatica Medica, I semestre -MATLAB

4

ATTUALE TENDENZA DEL SOFTWARE

• Vantaggi • Svantaggi– apprendimento veloce– semplice anche per non

– minore flessibilità

esperti– algoritmi trasparenti

– codice non ottimizzato

– pensare al proprio problema

bi i l i

– tendenza ad una eccessiva

lifi i– ambienti completi :• editing, compilazione e

debugging

semplificazione

debugging• gestione codice e

gestione dati

Informatica Medica, I semestre -MATLAB

5

MATLAB

• Nel corso degli anni MATLAB ha beneficiato delfeedback degli utenti.

• Il programma è largamente impiegato sia inIl programma è largamente impiegato sia incampo educativo sia in campo applicativo:

• nelle università è utilizzato sia come strumento per• nelle università è utilizzato sia come strumento perla ricerca sia come strumento di apprendimento e diesercitazione con il quale implementare le nozioniq papprese durante i corsi teorici

• nell'industria è lo strumento preferito per lap prealizzazione di progetti di ricerca, sviluppo eanalisi.

Informatica Medica, I semestre -MATLAB

6

MATLAB• È utilizzato in tutti i tipi di calcolo perché

• si impara ed usa velocementesi impara ed usa velocemente• è un linguaggio ad alto livello per le operazioni

matriciali• incoraggia a trovare soluzioni vettoriali• può essere utilizzato interattivamentepuò essere utilizzato interattivamente• fornisce molte funzioni grafiche• può essere interfacciato con C/C++ e Fortranpuò essere interfacciato con C/C++ e Fortran• presenta diversi tipi di interfaccia per le diverse aree di

applicazionepp• nasconde all’utente i dettagli architetturali o algoritmici

non necessari, oppure ne permette la modifica

Informatica Medica, I semestre -MATLAB

7

PSE

• Queste caratteristiche rendono MATLAB

– un PSE (Problem Solving environment): sistemisoftware che forniscono tutti gli strumenti per risolvere problemi insoftware che forniscono tutti gli strumenti per risolvere problemi inuna particolare area (e.g. Microsoft Word).

– un “Rapid Prototyping Environment”: sistemisoftware che permettono di testare algoritmi ed idee rapidamente ef il tfacilmente.

Informatica Medica, I semestre -MATLAB

8

TESTI DI RIFERIMENTO

• La documentazione fornita con MATLAB:– I manuali onlineI manuali online– L’help online disponibile in MATLAB

• Materiale disponibile in rete:– http://www.mathworks.com

Informatica Medica, I semestre -MATLAB

9

SOFTWARE DISPONIBILE

• Altri prodotti simili a MATLAB, anche per SOdiversi (e.g. Linux), sono:

– gnuplot (http://www.gnuplot.info/)

– Octave (http://www.gnu.org/software/octave/)

– Scilab (http://www.scilab.org/)( p g )

Informatica Medica, I semestre -MATLAB

10

MATLAB

• MATLAB (MATrix LABoratory) è un ambiente disviluppo interattivo per il calcolo scientifico

• Originariamente sviluppato come interfaccia per ilg pp psoftware matriciale LINPACK e EISPACK

L’elemento base è la matrice, che non richiededimensionamentodimensionamento

Ideale per risolvere problemi con formulazionei i l i lmatriciale o vettoriale

Informatica Medica, I semestre -MATLAB

11

MATLAB

• MATLAB è composto di 6 parti principali:

• L’ambiente di lavoro• Le librerie di funzioni matematiche• Le librerie di funzioni matematiche• Il sistema grafico• Il linguaggio• Il linguaggio• API• Toolbox• Toolbox

Informatica Medica, I semestre -MATLAB

12

AVVIO DI MATLAB

Informatica Medica, I semestre -MATLAB

13

L’AMBIENTE MATLAB

• Sono forniti generici comandi di sistema permanipolare i file: ls, cd, delete, type …

• MATLAB esegue funzioni che sono nel path og pnella directory corrente. Si aggiungono percorsi alpath attraverso il menu File e Set Pathp

• Si possono eseguire programmi esterni tramite ilcarattere !carattere !

>>!notepadCon il simbolo >> indicoCon il simbolo >> indicoil prompt di MATLAB

Informatica Medica, I semestre -MATLAB

14

L’AMBIENTE MATLAB

• Il comando help Caratteri maiuscoli per evidenziare>>help sqrt

Caratteri maiuscoli per evidenziare,ma tutte le funzioni devono esserechiamate in minuscolo.

SQRT Square root.SQRT(X) is the square root of the elements of X. Complex Q ( ) q f f presults are produced if X is not positive.

See also SQRTM.

Informatica Medica, I semestre -MATLAB

15

L’AMBIENTE MATLAB

• help fornisce una lista delle categorie delle funzioni• help categoria mostra le funzioni di quella categoria• help categoria mostra le funzioni di quella categoria• helpwin genera una finestra di help• lookfor keyword cerca le funzioni che corrispondono

alla parola chiave fornita• helpdesk fornisce la finestra di aiuto in html• doc funzione richiama helpdesk per la data funzionedoc funzione richiama helpdesk per la data funzione

Informatica Medica, I semestre -MATLAB

16

ALCUNI CARATTERI SPECIALI

• % è il commento• % è il commento• … è la continuazione sulla riga successiva• = è l’operatore di assegnamento• == è l’operatore di uguaglianzap g g• ; impedisce l’echo su monitor• separa argomenti o comandi• , separa argomenti o comandi • Ctrl-C termina l’esecuzione di un comando

Informatica Medica, I semestre -MATLAB

17

L’AMBIENTE MATLAB

>> a=[1 2 3]; ii=1;• Lo workspace è l’area di

memoria accessibile dal prompt dove si lavora

>>whoYour variables are:a iiprompt, dove si lavora.

• Per visualizzare i dati si utilizzano

a ii >> whosName Size Bytes Classutilizzano

– who e whos• Per cancellare dati in

ya 1x3 24 double arrayii 1x1 8 double array

• Per cancellare dati in memoria– clear nome variabile

Grand total is 4 elements using 32 bytes>>clear a, whosName Size Bytes Classclear nome_variabile Name Size Bytes Classii 1x1 8 double array

Grand total is 1 elements using 8 bytes

Informatica Medica, I semestre -MATLAB

18

g y

L’AMBIENTE MATLAB

• Per salvare l’intero workspace si usa save nomefile, p f ,per caricarlo si usa load nomefile

• Per salvare variabili in formato binario si usa savePer salvare variabili in formato binario si usa savenomefile variabili, per caricarle load nomefile

>>a=[1 2]; b=[3;4];>>save ab>>ls ab

>>load ab>>a

a = 1 2estensione

matab.mat

>>clear a b>>a

a 1 2>>b

b= 12

.mat

>>a??? Undefined function or variable 'a'.

2

Informatica Medica, I semestre -MATLAB

19

DEFINIZIONE DI VARIABILI

• MATLAB non usa definizione di tipo odichiarazione di dimensioni

• Crea automaticamente la variabile digitata• I nomi delle variabili sono case sensitive• I nomi delle variabili sono case sensitive• Devono iniziare con una lettera e possono

31 i (l icontenere 31 caratteri (lettere, numeri eunderscore, ma non punti)

Informatica Medica, I semestre -MATLAB

20

STRUTTURE DATI: MATRICI3x5

( i h l )

• L’elemento base in MATLAB è la matrice

(righe x colonne)

L elemento base in MATLAB è la matrice rettangolare: particolare interesse per quella 1x1 (scalari) e riga (1xN) o colonna (Nx1), cioè vettori(scalari) e riga (1xN) o colonna (Nx1), cioè vettori

5x15x1

1x61x1

Non c’è dichiarazione di variabili, non si usa la definizione di tipoe non è richiesto dimensionamento

Informatica Medica, I semestre -MATLAB

21

e non è richiesto dimensionamento

CREARE MATRICI

• Si possono creare matrici in diversi modi:

– Scrivere esplicitamente gli elementiScrivere esplicitamente gli elementi– Caricare gli elementi da file esterni di dati

G li l i ili d l b l– Generare gli elementi utilizzando le built-infunction

– Generare gli elementi utilizzando i propriM-file (file che contengono il codicesorgente dei programmi MATLAB ed hannoestensione .m)

Informatica Medica, I semestre -MATLAB

22

CREARE MATRICI

• Per scrivere esplicitamente gli elementi:– Separare gli elementi di una riga con spazi o

virgole ,g ,– Finire le righe con punto e virgola ;

Tutti gli elementi devono essere racchiusi tra– Tutti gli elementi devono essere racchiusi tra parentesi quadrate [ ]

>>A [ 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 ]>>A = [ 16 3 2 13 ; 5 10 11 8 ; 9 6 7 12 ; 4 15 14 1 ]A = 16 3 2 13

5 10 11 85 10 11 89 6 7 124 15 14 1

Informatica Medica, I semestre -MATLAB

23

ELEMENTI DI UNA MATRICE

• Per accedere all’elemento nella riga i e colonna jsi usa la notazione A(i,j)>>A(2,3) N.B.( , )

ans= 11• Se a=[1 2 ; 3 4] ;

Gli indici devono essereinteri positivi (non 0)

Se a [1 2 ; 3 4] ;

Possibili errori legati

>> t=a(2,3)??? Index exceeds matrix dimensions.

al non dimensionamentodelle matrici

>>a(2,3)=5a = 1 2 0

3 4 5Informatica Medica, I semestre -

MATLAB24

3 4 5

SCALARI E VETTORI

>>a=1 >>c=[1; 2; 3]Scalare 1x1

a =1

c =1

Scalare 1x1

>>b=[1 2 3 4 5]23

b =1 2 3 4 5 >> c(2)

vettore riga 1x5 vettore colonna 3x1

>>b(3)ans =

2ans =

3 variabile predefinita

Informatica Medica, I semestre -MATLAB

25

DIMENSIONI

• Per conoscere le dimensioni di una matrice si usa la funzione size(): [r,c]=size(M)

>> [1 2 3 4 5 6] i i>>a=[1 2 3; 4 5 6];>> [r,c] = size(a)r = 2

Notazione usata per gestireoutput multipli da una funzione

r 2c = 3

• Per conoscere il numero di elementi di un vettore si usa la funzione length(): n=length(M)>>a=[1 2 3 4]; length(a)ans = 4

Informatica Medica, I semestre -MATLAB

26

L’OPERATORE :• Vediamo come rappresentare insiemi numerici:

i i i di i i i l’i f i è t tinsiemi di numeri in cui l’informazione è contenutanel valore iniziale, nel valore finale e nel passo di“ i t ” t (il l d ll diff t d“campionamento” usato (il valore della differenza tra duenumeri contigui dell’insieme considerato)M t ti t i id i i i fi it di• Matematicamente si considera un insieme infinito divalori compresi tra due estremi:

)2)(1( xx 0 1-2

]1,2[x

Informatica Medica, I semestre -MATLAB

27

L’OPERATORE :• A causa della precisione finita dei numeri in un

calcolatore si considera un insieme finito e quindicalcolatore, si considera un insieme finito e quindidiscreto di valori compresi tra due estremi(e g [-2 1] con incrementi di 0 1: quindi l’insieme di(e.g. [-2, 1] con incrementi di 0.1: quindi l insieme dinumeri {-2.0, -1.9, -1.8 … 0.8, 0.9, 1.0})

>>1:10ans = 1 2 3 4 5 6 7 8 9 10

>>10: -2 :5ans = 10 8 6

>>0:pi/4:pi>>0:pi/4:pians = 0 0.7854 1.5708 2.3562 3.1416

Informatica Medica, I semestre -MATLAB

28

L’OPERATORE :

• È di fondamentale importanza per creare vettori• Per creare tabelle di valori di funzioni (dominio e

condominio) si utilizza l’operatore :

Rappresentazione a precisione finita

>> x=0 : pi/4 : pi;>> sin(x) sin(x)ans = 0 0.7071 1.0000 0.7071 0.0000

Formulazione vettoriale: equivalente a ciclo for e sin(x(i))

Informatica Medica, I semestre -MATLAB

29

MATRICI

• 4 funzioni base • Per eliminare righe o l ili– zeros

– ones

colonne utilizzare []>>a=[1 2 3; 4 5 6]

a =1 2 3– rand– randn

a =1 2 34 5 6

>>a(1,:)=[]>> a=2*ones(2,3)

a =2 2 22 2 2

( , ) []a=4 5 6

2 2 2>>b=rand(3,3)

b = 0.9501 0.4860 0.4565

>>a=[1 2 3; 4 5 6];

>>a(: 1)=[]b 0.9501 0.4860 0.45650.2311 0.8913 0.01850.6068 0.7621 0.8214

>>a(:,1)=[]a = 2 3

5 6

Informatica Medica, I semestre -MATLAB

30

MATRICI

• Per gestire le matrici si fa riferimento all’algebradelle matrici. Si considerano solo l’estrazione disottomatrici e le operazioni di addizione e sottrazione

• Si considera l’operazione elemento per elemento:Si considera l operazione elemento per elemento:funzioni (come quella vista: sin(x)) e operazioni incui le variabili sono trattate come “scalari” Cioè lacui le variabili sono trattate come scalari . Cioè lafunzionalità viene applicata ai singoli elementi dellamatricematrice

Informatica Medica, I semestre -MATLAB

31

MATRICI

• La gestione delle sottomatrici avviene per mezzo di i di i i lidi indici vettoriali

i1

j1 j2A

>>a=[1 2 3 4; 5 6 7 8; 9 10 11 12]a = 1 2 3 4

5 6 7 8

i1

i25 6 7 89 10 11 12

>>a(2:3,2:4) B( )ans =

6 7 810 11 12

B

10 11 12

B=A(i1:i2,j1:j2);

Informatica Medica, I semestre -MATLAB

32

MATRICI

• Somma e sottrazione: • Moltiplicazione

>>a=[1 2; 3 4];b=ones(2,2);+b

>>A=a*aA 7 10>>c=a+b

c= 2 34 5

A= 7 1015 22

>>(2*ones(1 2)) * a4 5>>c=a-3

c= -2 -1

>>(2*ones(1,2)) * aans = 8 12

>>a*pic -2 -10 1

>>a+ones(3,3)

>>a pians =3.1416 6.2832

9.4248 12.5664a ones(3,3)??? Error using ==> +Matrix dimensions must agree.

9.4248 12.5664

Informatica Medica, I semestre -MATLAB

33

g

MATRICI

• Per operare elemento per elemento si pone il .prima del corrispondente operatore:

>>a=[1 2; 3 4]; a *a>>a=[1 2; 3 4]; a.*aans= 1 4

9 16>>a./(2*ones(2,2))

ans =0.5000 1.00001.5000 2.0000

>> a.\(2*ones(2,2))ans =2 0000 1 0000ans =2.0000 1.0000

0.6667 0.5000

Informatica Medica, I semestre -MATLAB

34

ESPRESSIONI

• I blocchi costituenti le espressioni sono (ricordarsi che agiscono su intere matrici):g )

• Variabili ( i t )• Variabili (appena viste)

• Numeri• Operatori• Funzioni

Informatica Medica, I semestre -MATLAB

35

NUMERI E OPERATORI

• Si usa la notazione d i l l

• + sommadecimale, e per la notazione scientifica e i o j per i numeri immaginari

• – sottrazione• * moltiplicazione

per i numeri immaginari

3 -99

• / divisione• \ divisione sinistra

0.0120 -9.12331.34512 e 23 6.34567 e -20

• ^ esponente• ' trasposta (compl. con.)

-2.3 i 2.1 + 3.2 i • . operatore elemento per elemento

• Sono memorizzati in formato long IEEE

• ( ) ordine di valutazione

Informatica Medica, I semestre -MATLAB

36

NOMI BULT-IN

• computer• È utile non sovrascrivere i

seguenti nomi built-in:• date• clock

i

g• ans• pi (3.1415)

• cputime• eps (2.2204e-016)• realmin (2.2251e-308)• realmax (1 7977e+308)• realmax (1.7977e+308)• i, j ( )• nargin

1g

• nargout• Inf• NaN• flops

Informatica Medica, I semestre -MATLAB

37

FUNZIONI• Arrotondamento

>>round(2.3)ans =

>>round(2.7)ans =

2

>>floor(2 3)

3

>>floor(2 7)>>floor(2.3)ans =

2

>>floor(2.7)ans =

22

>>ceil(2.3)

2

>> ceil(2.7)ans =

3ans =

3

Informatica Medica, I semestre -MATLAB

38

FUNZIONI• Approssimazioni razionali e fattorizzazione intera

>>rem(11,3)ans =

22

>> rats(1/2 -1/3 +1/5) rats(1/2 1/3 1/5)ans =

11/30

>>gcd(27,72)ans =ans =

9

Informatica Medica, I semestre -MATLAB

39

FUNZIONI• Aritmetica complessa

>> 1 1+3*j 2 2 5*j >> j 1>>z1=1+3*j;z2=2-5*j;>> z1*z2ans =

>> j=1;>>z1=1+3*jz1 =ans

17.0000 + 1.0000iz1

4

>>real(z1)ans =

1

>> j=sqrt(-1)j =

0 + 1 0000i1

>> imag(z1)

0 + 1.0000i

>> z1=1+3*j>> imag(z1)ans =

3

>> z1 1+3 jz1 =

1.0000 + 3.0000i

Informatica Medica, I semestre -MATLAB

40

FUNZIONI• Esponenziali, logaritmiche, trigonometriche e

specifiche di particolari ambiti scientificispecifiche di particolari ambiti scientifici.• In generale possono operare su dati complessi e

t i i limatriciali

>>pow2(10) >> asin(0.6)p ( )ans =

1024

( )ans =0.6435

>>log10(10)ans =

>>factorial(15)ans =ans =

1ans =1.3077e+012

Informatica Medica, I semestre -MATLAB

41

OPERATORI RELAZIONALI E LOGICI

• < minore • Il valore falso è indicato • <= minore o uguale• > maggiore

con 0• Il valore vero con 1

• >= maggiore o uguale• == uguale

>> [1 2 3 2 2 5]• ~= diverso >>a=[1 2 3; 2 2 5];>>A=((a/2)==1)A =

• & and• | or

A 0 1 01 1 0

• xor or esclusivo• ~ not

Informatica Medica, I semestre -MATLAB

42

POLINOMI

• I polinomi si rappresentano come vettori rigacontenenti i coefficienti in ordine di potenzedecrescenti

– p(x)=x3 + 3x2 + 2x +10 si rappresenta comep(x) x + 3x + 2x +10 si rappresenta comep=[1 3 2 10]

– p(x)=x3 + 1 si rappresenta come p=[1 0 0 1]

Informatica Medica, I semestre -MATLAB

43

POLINOMI

• La costruzione di un polinomio con specifiche radicisi esegue con la funzione poly(). Radici: -2 -j3, -2 +j3,-5; ovvero il polinomio p(x)=(x+2+j3)(x+2-j3)(x+5)

>>r=[-2-j*3 -2+j*3 -5];>>r=[-2-j 3,-2+j 3,-5];>>p=poly(r)p =p

1 9 33 65

Informatica Medica, I semestre -MATLAB

44

POLINOMI

• Il prodotto di polinomi si esegue con la funzione conv()

>>p1=[1 3 5]; p2=[1 -2 4];>> p3=conv(p1 p2) ( ) 4 3 2>> p3 conv(p1,p2)p3 =

1 1 3 2 20

p3(x)=x4 + x3 + 3x2 + 2x +20

• L’operazione duale è la divisione di polinomi, ottenutacon deconv(). La sintassi è [q,r]=deconv(a,b) che() [q, ] ( , )fornisce due polinomi q(x) (quoziente) e r(x) (resto) taliche a(x)=q(x)b(x)+r(x)

Informatica Medica, I semestre -MATLAB

45

( ) q( ) ( ) ( )

POLINOMI

• Le radici di un polinomio i l l ()

>>p=[1 9 33 65]psi calcolano con roots() p =

1 9 33 65

• polyval(p,x) calcola il valore p(x) con x dato

>>roots(p)ans =p( )-5.0000 -2.0000 + 3.0000i2 0000 3 0000i

>> polyval(p,-5)ans = -2.0000 - 3.0000ians =

0

>>polyval(p,2.3)ans =200 6770

Informatica Medica, I semestre -MATLAB

46200.6770

POLINOMI

• Per effettuare la derivata di polinomi sono disponibili le seguenti funzioni– q=polyder(p): derivata del polinomio

dxdpxq )()( q p y (p) p

q=polyder(p1 p2): derivata del prodotto

dxq )(

)(2)(1 xpxp– q=polyder(p1,p2): derivata del prodotto )(2)(1 xpxp

– [q,d]=polyder(p1,p2): derivata del rapporto sotto forma di funzione )(1)( xpdxqrazionale fratta

)(2)(1

)()(

xpxp

dxd

xdxq

Informatica Medica, I semestre -MATLAB

47

POLINOMI

>> [1 2 3 4]

>> p1=[1 1 1];p2=[1 0 4];[ d] l d ( 1 2)

>> p=[1 2 3 4];>>q=polyder(p)q = >> [q,d]=polyder(p1,p2)

q =1 6 4

q 3 4 3

-1 6 4

d =

>> p1=[1 2 3];p2=[4 5 6];>> q=polyder(p1,p2)

1 0 8 0 16q =

16 39 56 2716 39 56 27

Informatica Medica, I semestre -MATLAB

48

VISUALIZZAZIONE SCIENTIFICA

• L’integrazione delle funzionalità di calcolo numericogcon le elevate capacità grafiche è un punto di forzadell’ambiente MATLAB

• La visualizzazione scientifica è la rappresentazionegrafica di dati Utile nelgrafica di dati. Utile nel– trovare modelli

id ifi d– identificare tendenze– comparare informazioni complesse– esaminare oggetti che non possono essere esaminati

fisicamenteInformatica Medica, I semestre -

MATLAB49

VISUALIZZAZIONE SCIENTIFICA

• Sono forniti un ampio insieme di funzioni ad altolivello per visualizzare dati (2-D, 3-D , movies,p ( , , ,etc.)

• Inoltre si ha la possibilità di accedere anche alleproprietà a basso livello degli oggetti graficiproprietà a basso livello degli oggetti grafici(Handle Graphics) per gestire completamente lavisualizzazione dei dativisualizzazione dei dati

Informatica Medica, I semestre -MATLAB

50

GRAFICI

• Per default MATLAB traccia grafici sulla finestra 1;si possono aprire altre finestre di visualizzazione conil comando figure.

• Si chiude la finestra corrente con il comando close• Con figure(n) si rende corrente la figura numero n eCon figure(n) si rende corrente la figura numero n e

con close(n) si chiude la figura numero n

• Per visualizzare grafici bidimensionali (2-D) siili l f i l ()utilizza la funzione plot()

Informatica Medica, I semestre -MATLAB

51

GRAFICI• Consideriamo come varia la densità dell’aria (in kg/m3) al

variare della quota h (in km):variare della quota h (in km):h 7 10 15 21 27 34 39 43 47 51 556 369 191 75 26.2 9.9 4.4 2.3 1.4 0.8

Inseriamo i dati in due vettori

>>h = [7 10 15 21 27 34 39 43 47 51];

Inseriamo i dati in due vettori

[ ]>>r = [556 369 191 75 26.2 9.9 4.4 2.3 1.4 0.8];>>plot(h,r)

Visualizziamo i dati tramite plot(ascisse, ordinate)

Informatica Medica, I semestre -MATLAB

52

GRAFICIFi t di i li iFinestra di visualizzazione

St tiStrumenti per gestire i grafici

ordinate

ascisse

Informatica Medica, I semestre -MATLAB

53

GRAFICI

L l t d li i è t ti• La scalatura degli assi è automatica• Il titolo della finestra (Figure No. 1) indica il

numero della finestra stessa• I punti tracciati sono automaticamente congiuntip g

da linee a tratto pieno• Non si è dovuto scrivere codice specifico perNon si è dovuto scrivere codice specifico per

produrre un output grafico

Informatica Medica, I semestre -MATLAB

54

GRAFICI

• Congiungere con linee i dati sui grafici è visivamentegradevole, tuttavia è importante indicare anche i datieffettivi: si possono usare parametri opzionali di plot()

>>plot(h,r,'*')plot(h,r, )

Informatica Medica, I semestre -MATLAB

55

GRAFICI• Si devono sempre

indicare ascisseindicare ascisse,ordinate e titolo diun graficoun grafico

>>xlabel('altezza (km)')xlabel( altezza (km) )>>ylabel('densita` dell''aria

(kg/mc)')>>title('Variazione della

densita` dell''aria con la quota')

Informatica Medica, I semestre -MATLAB

56

la quota')

GRAFICI: 2-D• Per tracciare il grafico di una funzione y=f(t), si deve

creare una tabella di valori della funzione (come abbiamo(visto): specificare un dominio discreto con l’operatore : ecalcolare i corrispondenti valori di codominio

0.6

0.8

1

>>t 0 i/100 2* i

0

0.2

0.4>>t=0:pi/100:2*pi;>> y=sin(t);>> plot(t,y)

-0.4

-0.2

0 plot(t,y)

0 1 2 3 4 5 6 7-1

-0.8

-0.6

Informatica Medica, I semestre -MATLAB

57

0 1 2 3 4 5 6 7

GRAFICI : 2-D

• Esistono vari controlli sugli assi– axis([xmin xmax ymin ymax])– axis square axis equalaxis square , axis equal– axis auto

i i ff– axis on , axis off– grid on , grid off

>>axis([0 2*pi -1 1])>>axis([0 2 pi -1 1])>>grid on

Informatica Medica, I semestre -MATLAB

58

GRAFICI : 2-D

• Si possono visualizzare più grafici insieme

0.8

1

0 2

0.4

0.6>>t=0:pi/100:2*pi;>> x=sin(t);

-0.2

0

0.2>> y1=sin(t+0.25);>> y2=sin(t+0.5);>> plot(x y1 x y2)

-0.8

-0.6

-0.4>> plot(x,y1,x,y2)

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-1

Si devono ripetere ascissee ordinate

Informatica Medica, I semestre -MATLAB

59

GRAFICI : 2-D

• Si possono aggiungere curve ad un graficoesistente con il comando hold on

0.6

0.8

1

>>t=0:pi/100:2*pi;

0

0.2

0.4>> x=sin(t);>> y1=sin(t+0.25);>> y2 sin(t+0 5);

-0.6

-0.4

-0.2>> y2=sin(t+0.5);>> plot(x,y1)>>hold on

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-1

-0.8

hold on>> plot(x,y2)

Informatica Medica, I semestre -MATLAB

60

GRAFICI : 2-D

• Si possono differenziare i grafici utilizzando i p gparametri opzionali di plot()

1

0.6

0.8

1

>>t=0:pi/100:2*pi;

0

0.2

0.4>> x=sin(t);>> y1=sin(t+0.25);>> y2 sin(t+0 5);

-0.6

-0.4

-0.2>> y2=sin(t+0.5);>> plot(x,y1,’b--o’)>>hold on

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-1

-0.8

hold on >> plot(x,y2,’r:+’)

Informatica Medica, I semestre -MATLAB

61

GRAFICI : 2-D• Si possono inserire titoli, testi ed etichette (LaTeX)

>>t = -pi:pi/100:pi;t pi:pi/100:pi;>> y = sin(t);>> plot(t,y)>> axis([-pi pi -1 1])>> axis([-pi pi -1 1])>> xlabel('–\pi \leq \itt \leq \pi')>> ylabel('sin(t)')>> titl ('G fi d ll f i>> title('Grafico della funzione seno')>> text(0.5,-1/3,’ \it{Notare la simmetria dispari.}')

Informatica Medica, I semestre -MATLAB

62

GRAFICI : 2-D• plot() visualizza le colonne di matrici in ingresso>> t = -pi:pi/100:pi; t=t';>> a=[sin(t) sin(t+pi/4) sin(t+pi/2)];>> plot(t a)

0.8

1

>> plot(t,a)

0.2

0.4

0.6

-0.4

-0.2

0

-4 -3 -2 -1 0 1 2 3 4-1

-0.8

-0.6

Informatica Medica, I semestre -MATLAB

63

4 3 2 1 0 1 2 3 4

GRAFICI : 2-D• plot() visualizza anche numeri complessi: traccia

una curva nel piano complesso (Re{} Im{}) Peruna curva nel piano complesso (Re{},Im{}). Peresempio la funzione complessa f(t)= ejt

0.6

0.8

1

0

0.2

0.4>>t = -pi:pi/10:pi;>>plot(exp(i*t),'-o')

-0.4

-0.2

0>>axis square

1 0 5 0 0 5 1-1

-0.8

-0.6

Informatica Medica, I semestre -MATLAB

64

-1 -0.5 0 0.5 1

GRAFICI : 2-D

• Utile funzione è zoom: >>x=-2*pi:0.01:2*pi;l ( ( ) ( * ))>>plot(x,sin(x),x,sin(x*1.01))

>> zoom xon, grid on

1 1.002

0.4

0.6

0.8

1

0.998

1

1.002

-0.4

-0.2

0

0.2

0.992

0.994

0.996

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-4.8 -4.75 -4.7 -4.65 -4.60.988

0.99

Informatica Medica, I semestre -MATLAB

65

GRAFICI : 2-D

• Vi sono molte altre funzioni specifiche per visualizzare grafici: g.e. errorbar(), bar()

2

1

1.5

>>t = pi:pi/10:pi;

0

0.5

>>t = -pi:pi/10:pi;>>y=sin(t);>>e=rand(size(t));

-1

-0.5

( ( ));>>errorbar(t,y,e)

-4 -3 -2 -1 0 1 2 3 4-2

-1.5

Informatica Medica, I semestre -MATLAB

66

GRAFICI : 2-D

fi

• Per visualizzare più grafici sulla stessa finestra si usa subplot()

8

10Group

30Stack

>>figure>> Y = round(rand(5,3)*10);

2

4

6

8

10

20>> subplot(2,2,1)>> bar(Y, 'group')>> title 'Group'

1 2 3 4 50

2

1 2 3 4 50

Stack10

Width = 1.5

p>> subplot(2,2,2) >> bar(Y, 'stack')>> title 'Stack'

3

4

5

4

6

8

10 title Stack>> subplot(2,2,3)>> barh(Y, 'stack')>> title 'Stack'

0 10 20 30

1

2

1 2 3 4 50

2

4>> title Stack>> subplot(2,2,4)>> bar(Y,1.5)>> titl 'Width 1 5'

Informatica Medica, I semestre -MATLAB

67

>> title 'Width = 1.5'

GRAFICI : 2-D2

)2

exp()( 2

2

xxg

x=-1:2/32:1; 1 2xConsideriamo la funzione Gaussianax= 1:2/32:1;

figuresubplot(2,2,1)s=0.2, plot(x,exp(-(x.^2)/(2*s^2)),'r')

)2

exp(21)( 2

xxg funzione Gaussiana

s 0.2, plot(x,exp( (x. 2)/(2 s 2)), r )subplot(2,2,2)s=0.2;, plot(x,exp(-(x.^2)/(2*s^2)),'r'),hold ons=0.1; plot(x,exp(-(x.^2)/(2*s^2)),'g'); p ( , p( ( )/( )), g )s=0.3; plot(x,exp(-(x.^2)/(2*s^2)),'b'),hold offsubplot(2,2,3)s=0.2; plot(x,(1/(sqrt(2*pi)*s))*exp(-(x.^2)/(2*s^2)),'r')subplot(2,2,4)s=0.2; plot(x,(1/(sqrt(2*pi)*s))*exp(-(x.^2)/(2*s^2)),'r')hold ons=0.1; plot(x,(1/(sqrt(2*pi)*s))*exp(-(x.^2)/(2*s^2)),'g')s=0.3; plot(x,(1/(sqrt(2*pi)*s))*exp(-(x.^2)/(2*s^2)),'b')hold off

Informatica Medica, I semestre -MATLAB

68

GRAFICI : 2-D2x )2

exp()( 2xxg

red =0.2green =0 1green 0.1blue =0.3

)(1)(2x

Informatica Medica, I semestre -MATLAB

69

)2

exp(2

)( 2xg

GRAFICI: 3-D

• La grafica tridimensionale permette di visualizzare

– traiettorie (linee) nello spazio tridimensionaletraiettorie (linee) nello spazio tridimensionale– superfici generate da funzioni di due variabili

f(x y) o parametrichef(x,y) o parametriche– dati che dipendono da due variabili (e.g. mappe)– immagini– solidi di rotazione

Informatica Medica, I semestre -MATLAB

70

GRAFICI: 3-D

• Per visualizzare linee in 3-D si usa plot3()Elica 3-D asse zSi specificano le coordinate (x,y,z)

dei punti della traiettoria

30

40

>>t=0:pi/50:10*pi;>> plot3(sin(t) cos(t) t 'r')

10

20z

>> plot3(sin(t),cos(t),t, r )>> grid on>> xlabel('x')

0 510.5

10

( )>> ylabel('y')>> zlabel('z')

-1-0.5

00.5

-1

-0.5

0

xy

>> title('Elica 3-D')

asse y asse xInformatica Medica, I semestre -

MATLAB71

asse x

GRAFICI: 3-D

• Anche per funzioni di 2 variabili (z=f(x,y)) si devecreare una tabella di valori:– si specifica un dominio discreto bidimensionalep

(una griglia su un piano (x,y)) con la funzionemeshgrid()g ()

– si valuta la funzione f() nei valori del dominio(x y)(x,y)

– infine si visualizzano i valori calcolati con lafunzione mesh()funzione mesh()

Informatica Medica, I semestre -MATLAB

72

GRAFICI: 3-D)

22exp(),( 2

2

2

2

yx

yxyxgz

Dominio di campionamento

0 35 0 35>>sx=0.35; sy=0.35;>>[X,Y]=meshgrid(-1:2/32:1);>> Z=exp(-(X.^2)/(2*sx^2) -…(Y.^2)/(2*sy^2));>> mesh(X,Y,Z)>> xlabel('x')( )>> ylabel('y')>> zlabel('z')>> title('Funzione Gaussiana)>> title( Funzione Gaussiana)

Informatica Medica, I semestre -MATLAB

73

GRAFICI: 3-D

>>[X,Y]=meshgrid(-1:2/32:1,-2:2/32:2);f h( ) l ( )>>figure, mesh(X),title('X')

>>figure, mesh(Y), title('Y')

Informatica Medica, I semestre -MATLAB

74

GRAFICI: 3-D

• Esistono molte altre funzioni di visualizzazione(e.g. surf) e di manipolazione (e.g. rotate3d)

>>surf(X,Y,Z), shading interp >>rotate3d

Informatica Medica, I semestre -MATLAB

75

GRAFICI: 3-D

• Si cambia vista di un grafico con view• view(azimuth,elevation) o view([x y z])

>>surf(X Y Z) shading faceted view([0 1 0])>>surf(X,Y,Z), shading faceted, view([0 1 0])

Informatica Medica, I semestre -MATLAB

76

GRAFICI: 3-D• Consideriamo funzioni che non producono

i li i i ll i t idi i l hvisualizzazioni nello spazio tridimensionale, ma cheagiscono comunque su matrici– contour(X,Y,Z,n) visualizza curve di livello– image(x,y,Z) visualizza dati come immagini– pcolor(X,Y,C) visualizza dati come matrici di celle

• Immagini: una griglia di punti il cui valore è codificatoImmagini: una griglia di punti il cui valore è codificatocon un colore o livello di grigio. Si può considerare unamatrice: le righe e colonne formano la struttura spazialematrice: le righe e colonne formano la struttura spazialedell’immagine e il valore degli elementi costituiscono ilcolore

Informatica Medica, I semestre -MATLAB

77

colore

GRAFICI: 3-D

>>contour(X,Y,Z,15) >>contourf(X,Y,Z,10)>>axis square >>axis square

Informatica Medica, I semestre -MATLAB

78

GRAFICI: 3-D

>>imagesc(Z) >>imagesc(Z)>>axis square>>colormap(gray)

Informatica Medica, I semestre -MATLAB

79

GRAFICI: 3-D

>>load clown>>imagesc(X)>>imagesc(X)>>colormap(map)>>axis offaxis off

>>load cape>>imagesc(X)>>colormap(map)

Informatica Medica, I semestre -MATLAB

80

GRAFICI: 3-D

• Attenzione a come le 10

12

funzioni visualizzano i dati>>a=[1 2 3 4 ;5 6 7 8; 9 10 11 12 ];

f f( )3

42

2.5

30

2

4

6

8

10

C R>>figure, surf(a)>>figure, imagesc(a)>>colormap(gray)

1

21

1.5

0.5

1

C R

>>colormap(gray)>>figure, pcolor(a)>>colormap(gray)

1.5

2

2.5

3

R

C

>>a= 1 2 3 45 6 7 8

9 10 11 12

0.5 1 1.5 2 2.5 3 3.5 4 4.53.5

2.4

2.6

2.8

3

C

R

9 10 11 12

1

1.2

1.4

1.6

1.8

2

2.2

R R

C

Informatica Medica, I semestre -MATLAB

81

1 1.5 2 2.5 3 3.5 41 R

GRAFICI: 3-D

• Si possono usare insieme le funzioni viste per ottenere grafici complessi

>>a=peaks(33);>> pcolor(a)>> pcolor(a)>> shading interp>> axis square>> hold on>> contour(a,'r')>> f( +15)>> surf(a+15)>> view(-57,22)

Informatica Medica, I semestre -MATLAB

82

SOLIDI DI ROTAZIONE

• La funzione cylinder(r) disegna la superficie dirotazione che ha per generatrice la curva descrittadal vettore r: per esempio disegnare il conogenerato dalla rotazione della retta ]2,0[, xxy

>>x=0:0.1:2;>>>>y=x;>>cylinder(y)>>xlabel('x')xlabel( x )>>ylabel('y')>>zlabel('z')

Informatica Medica, I semestre -MATLAB

83

SOLIDI DI ROTAZIONE• Si può usare una curva per descrivere il profilo

>>t = pi/2:pi/10:2*pi;>>t = pi/2:pi/10:2*pi;>>y= 2+cos(t);>>cylinder(y)cylinder(y)

>>plot(t,y)>>axis([pi/2 2*pi 0 3]);

Informatica Medica, I semestre -MATLAB

84

SOLIDI DI ROTAZIONE• Vi sono molte funzioni per manipolare la

visualizzazione dei solidi (materiale luce angolo divisualizzazione dei solidi (materiale, luce, angolo divista)

>>axis off>>shading interpshading interp>>material metal>>lightangle(45,30)>>lighting phong>>view([26 38])

Informatica Medica, I semestre -MATLAB

85

HANDLE GRAPHICS

• MATLAB fornisce un insieme di funzioni a bassolivello per manipolare elementi grafici: questosistema è chiamato Handle Graphics

• Gli oggetti grafici sono le primitive di tale sistema• Ci sono 11 tipi di oggetti Handle GraphicsCi sono 11 tipi di oggetti Handle Graphics,

organizzati in una struttura gerarchica• Per creare un oggetto è necessario richiamare la• Per creare un oggetto è necessario richiamare la

funzione corrispondente: figure, axes, line ...

Informatica Medica, I semestre -MATLAB

86

GUI

È possibile sviluppare in MATLAB strumentibasati su Graphical User Interface (GUI)

• I principi di un buon progetto di GUI sonogenerali anche se si utilizzano strumenti specificigenerali, anche se si utilizzano strumenti specifici

• In particolare in MATLAB si sviluppa una GUIattraverso Guide (Graphical User Interfaceattraverso Guide (Graphical User InterfaceDevelopment Environment)

Informatica Medica, I semestre -MATLAB

87

GUI: ESEMPIO

• Esempio di pun’applicazione completa.p

>>guide

Informatica Medica, I semestre -MATLAB

88

STAMPA DEI GRAFICI

• Con l’opzione Print dal menu File• Importare in altra applicazione con Copy Figure

dal menu Edit• Salvare in diversi formati con print

24-bit RGB TIFF with packbits compression

>>print -dtiff nome_file>>print -depsc2 nome filep p _f

Level 2 color Encapsulated PostScript

Informatica Medica, I semestre -MATLAB

89

STRUTTURE DATI

Vediamo alcune strutture dati diverse dalle matrici

• Caratteri e testoCaratteri e testo• Cell array

S• Strutture• Array multidimensionali• Classi

Informatica Medica, I semestre -MATLAB

90

CARATTERI E TESTO

• Per inserire testo si usano gli apici ‘ ‘

>>s='Ciao's =Ciao

>>whos sName Size Bytes Classys 1x4 8 char array

Grand total is 4 elements using 8 bytesg y

• È un vettore di caratteriInformatica Medica, I semestre -

MATLAB91

• È un vettore di caratteri

CARATTERI E TESTO

• Il testo è memorizzato come interi (codice ASCII)

>>a=double(s)a =

67 105 97 111Funzioni di conversione67 105 97 111

>>a(1,1)=99;>>s=char(a)

conversione

>>s char(a)s =ciao

Informatica Medica, I semestre -MATLAB

92

CARATTERI E TESTO

• Si possono concatenare stringhe

>>a=[s ' mondo']a =ciao mondo

>>a=[s ;' mondo']??? All rows in the bracketed expression must have the same pnumber of columns.

Informatica Medica, I semestre -MATLAB

93

CARATTERI E TESTO• Le righe di una matrice devono avere la stessa

di i i l f i h ()

>>s=char('Queste','sono' ,'prove')

dimensione: si usa la funzione char()

( Q , , p )s =QuesteQuestesono proveprove >> size(s)ans =ans

3 6

Informatica Medica, I semestre -MATLAB

94

CARATTERI E TESTO• Si possono convertire stringhe in numeri e

iviceversa

>> a=str2num('123')>> a str2num( 123 )a = 123>> s=num2str(345)s = 345>>whosN Si B t ClName Size Bytes Classa 1x1 8 double arrays 1x3 6 char arrays 1x3 6 char array

Grand total is 4 elements using 14 bytes

Informatica Medica, I semestre -MATLAB

95

CONTROLLO FLUSSO DATI

• In MATLAB si usano 5 costrutti

– ifif– switch

f– for– while– break / return

Informatica Medica, I semestre -MATLAB

96

CONTROLLO FLUSSO DATI: if

>>x=1.2; • Ogni istruzione if èi d d>>if x < 0

>>y = -1;

terminata da un end• Non sono necessarie

t i>>elseif x > 0 >>y = 1;

parentesi• Gli operatori relazionali

agiscono sugli array>>else>>y = 0;

agiscono sugli arrayelemento per elemento,quindi per lavorare con

>>end>>y

q parray utilizzare lefunzioni is* (forniscono

y =1

lo stato)

Informatica Medica, I semestre -MATLAB

97

CONTROLLO FLUSSO DATI: if

>>x=[1.2 1.2]; >>x=-2:0.1:2; y=zeros(size(x));>>y=[1.2 1.2];>>x==y

>>y =y -1*(x<0); y =y+ 1*(x>0);>>y =y+ 0*(x==0);y

ans =1 1

y y ( )>>plot(x,y,x,y,'o'), axis([-2 2 -1.2 1.2])

0.6

0.8

1

>>isequal(x,y)

0 4

-0.2

0

0.2

0.4q ( ,y)

ans =1

2 1 1 0 0 0 1 1 2

-1

-0.8

-0.6

-0.41

Informatica Medica, I semestre -MATLAB

98

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

CONTROLLO FLUSSO DATI : switch

>>ii=1; • Ogni istruzione switch èi d>>switch ( ii )

>>case 0

terminata con end• Il valore di default è

t tt t th i>>disp('Opzione 0');>>case 1

trattato con otherwise• Quando un case è vero,

gli altri sono saltati: non>>disp('Opzione 1');>>otherwise

gli altri sono saltati: nonè necessario break.

• La funzione disp>>disp('Opzione ???');>>end

La funzione disppermette di visualizzaretesti o array

Opzione 1

Informatica Medica, I semestre -MATLAB

99

CONTROLLO FLUSSO DATI : for

>>for ii=1:3 • Ogni for è terminato cond>>for jj=1:3

>>a(ii,jj)=(ii-1)*3 +jj;

un end• Non sono necessarie

t i>>end>>end

parentesi• Si può utilizzare un

incremento qualsiasi>>aa =

incremento qualsiasifor ii = 1 : -0.3 : -2, end

1 2 34 5 6

N.B In MATLAB è meglio utilizzare

7 8 9meglio utilizzare codice vettorizzato

Informatica Medica, I semestre -MATLAB

100

CONTROLLO FLUSSO DATI : while

>>b=10; a= -3;>>while b-a > 0 • Ogni while è>>b=b-1;>>end

terminato con un end• Non sono necessarie

t i>>bb =

parentesi

-3

Informatica Medica, I semestre -MATLAB

101

CONTROLLO FLUSSO DATI : break

>>b=10; a= -3;>>while b-a > 0>>if b<=0 • break permette di uscire>>break>>end

dai loop for e while• Permette di uscire solo dal

l iù i t>>b=b-1;>>end

loop più interno

di>>bb =

• return permette di tornarealla funzione chiamante

0

Informatica Medica, I semestre -MATLAB

102

M-file

• File che contengono codice in linguaggio MATLABsono chiamati M-filesono chiamati M file.

• Devono avere estensione .mS fil di i• Sono file di testo: possono essere creati conqualsiasi editor ma è preferibile usare quello built-in

• Evidenzia con colori diversi la sintassi e contiene undebugger

Informatica Medica, I semestre -MATLAB

103

M-file

Informatica Medica, I semestre -MATLAB

104

M-file

Script Function

• Non ha argomenti di input • Ha argomenti di input ed ed output output

• Opera sui dati nello workspace

• Le variabili interne sono locali

• Utile per automatizzarei di i i titi i

• Utile per estendere le f i lità di MATLABuna serie di passi ripetitivi funzionalità di MATLAB

Informatica Medica, I semestre -MATLAB

105

M-file: SCRIPT

script 2 mNome del file%Esempio di scriptx= pi:pi/100:pi;

script_2.m

Linea di commento

Nome del file

x=-pi:pi/100:pi;ys=sin(x);

( )Calcoli

yc=cos(x);if stato

l t( )plot(x,yc,x,ys)else

l ( )Controllo flusso dati e

visualizzazione plot(yc,ys)end

visualizzazione

Informatica Medica, I semestre -MATLAB

106

M-file: SCRIPT

>>script_2??? U d f d f bl

0.8

1

??? Undefined function or variable 'stato'.

Error in ==> e:\elba99\script 2.m0 2

0

0.2

0.4

0.6

p _On line 5 ==> if stato>>stato=0;

-1

-0.8

-0.6

-0.4

-0.2

>>script_2>>stato=1;>>script 2

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 11

0.8

1

>>script_2>>whoYour variables are: 0

0.2

0.4

0.6

stato x yc ys

1

-0.8

-0.6

-0.4

-0.2

Informatica Medica, I semestre -MATLAB

107

-4 -3 -2 -1 0 1 2 3 4-1

M-file: FUNCTION

f ti f ti 2( t t )function_2.mNome del filefunction ys = function_2(stato)%FUNCTION_2 Esempio% f i 2( )

Definizione di funz.Linea di help1

di h l % ys = function_2(stato) : ...x=-pi:pi/100:pi;

( )

Testo di help

ys=sin(x);yc=cos(x);

Calcoli

Corpo if statoplot(x,yc,x,ys)

Controllo flusso

Corpodella

funzioneelse

plot(yc,ys)

Controllo flussovisualizzazione

Informatica Medica, I semestre -MATLAB

108end

M-file: FUNCTION>>script_2??? Undefined function or variable

>>function_2??? Input argument 'stato' is undefined.

'stato'.Error in ==> e:\elba99\script_2.mOn line 5 > if stato

Error in ==> e:\elba99\function_2.mOn line 7 ==> if stato

On line 5 ==> if stato>>stato=0;>>script 2

>> stato=0;>>function_2??? Input argument 'stato' is undefinedp _

>>stato=1;>>script_2

??? Input argument stato is undefined.Error in ==> e:\elba99\function_2.mOn line 7 ==> if stato

>>whoYour variables are:stato x yc ys

>>a=function_2(0);>>a=function_2(1);

hstato x yc ys >> whoYour variables are:

a statoInformatica Medica, I semestre -

MATLAB109

a stato

M-file: FUNCTION

function ys = function 2 ( stato )

keywordi

function name

function ys function_ ( stato )

youtput argument input argument

• Se si hanno molti argomentiSe si hanno molti argomentifunction [x,y,z] = sphere(theta,phi,rho)

• Se non si hanno argomenti di outputfunction sphere(theta,phi,rho)

Informatica Medica, I semestre -MATLAB

110

M-file: FUNCTION

• Quando si chiama una funzione, MATLAB esegueil parsing del codice e produce uno pseudocodice,p g p p ,che alloca in memoria

• Ogni funzione ha un proprio workspace

• Ma possono essere definite variabili globali

Informatica Medica, I semestre -MATLAB

111

M-file: VARIABILI GLOBALI

m p 2 m>>global ALPHA>>ALPHA=3; function y = myp_2(x)

%MYP 2

myp_2.m

>>myp_2([1 2 3])ans =

%MYP_2 ....% .....l b l1 8 27

>> ALPHA=2.3;

global ALPHAy=x.^ALPHA;

>>myp_2([1 2 3])ans =

1.0000 4.9246 12.5135

Informatica Medica, I semestre -MATLAB

112

M-file: USER INPUT

• Per ottenere un input da utente durante l’esecuzionepdi un M-file

– Visualizzare un prompt e attendere un input(input)(input)

– Attendere la pressione di un tasto (pause)

– Costruire una GUI

Informatica Medica, I semestre -MATLAB

113

M-file: USER INPUT

>>myp_a_2([1 2 3])m p a 2 mInserisci l`esponente:3

ans = function y = myp_a_2(x)%MYP A 2

myp_a_2.m

1 8 27 %MYP_A_2 ....% .....

( l )n=input('Inserisci l`esponente:');y=x.^n;>>myp_a_2([1 2 3])

i t('I i i l` t ’ ’ ’)

Inserisci l`esponente:ciaoans =ciao n=input('Inserisci l esponente:’ ,’s’);

y=s;ciao

Informatica Medica, I semestre -MATLAB

114

M-file: VALUTAZIONE DI STRINGHE

• La funzione eval permette di eseguire una stringa

>>for ii=1:3>>for ii 1:3eval([ 'p’ , int2str(ii) , '=ii.^2’ ])end

l(' [1 2 3] ^2')p1 =

1

>>eval('a=[1 2 3].^2')a =

1 4 9 1p2 =

4

1 4 9

4p3 =

9

Informatica Medica, I semestre -MATLAB

115

M-file: OTTIMIZZAZIONE

• Principalmente ci sono due tecniche

• Vettorizzazione dei loop: cioè sostituire for eVettorizzazione dei loop: cioè sostituire for e while con equivalenti operazioni matriciali

• Preallocazione degli array: allocare la memoria• Preallocazione degli array: allocare la memoria prima di utilizzare gli array

Informatica Medica, I semestre -MATLAB

116

M-file: OTTIMIZZAZIONE

>>mybench 2mybench_2.m

>>mybench_2elapsed_time =204 1000

%esempioN=30000; tic204.1000

elapsed_time =0 0500

i=0; c=zeros(1,N);for t=0:pi/N:2*pi0.0500

i=i+1;c(i)=sin(t);

endtoc, tict=0:pi/N:2*pi;c=sin(t); toc

Informatica Medica, I semestre -MATLAB

117

( )

M-file: OTTIMIZZAZIONE

>>mybench_1_2% iMybench_1_2.m

elapsed_time =5.4300

%esempioN=500; tic, a=zeros(N);for ii=1:N

elapsed time =

for ii 1:Nfor jj=1:N

a(ii,jj)=ii+jj;p _14.7800 end

endt titoc, ticfor ii=1:N

for jj=1:Nfo jj :Nb(ii,jj)=ii+jj;

end

Informatica Medica, I semestre -MATLAB

118end, toc

DEBUGGING

Il debugging è il processo che permette di trovareerrori nel proprio codice

• Errori di sintassi: li indica MATLAB al prompt

• Errori runtime: errori algoritmici, quindi rilevabilisolo da risultati inattesi, perchè interni alloworkspace delle funzioni

Informatica Medica, I semestre -MATLAB

119

DEBUGGING

Per isolare gli errori runtime

• Togliere selettivamente i ;Togliere selettivamente i ;• Rendere la funzione uno script

U l’i i k b d• Usare l’istruzione keyboard• Usare il MATLAB debugger

Informatica Medica, I semestre -MATLAB

120

DEBUGGING

>>whoniente m>>niente

K» who function niente()%

niente.m

Your variables are:x y

% ....% ....

K» yy = 4

x=2;y=x.^2;

K» x=3;K» return

keyboardy=x.^2

y = 9>>

Informatica Medica, I semestre -MATLAB

121

DEBUGGING

Informatica Medica, I semestre -MATLAB

122

DEBUGGING

>> v=[1 2 3 4 5];>>var1=std(v).^2var1 =

2.5000

>>var2=varianza(v)var2 =

1

Informatica Medica, I semestre -MATLAB

123

DEBUGGING

F11

F10

breakpoint

Linea da eseguire

Visualizzazione breakpointvariabili

F11 Step inF11

F10

Step in

Single step

Informatica Medica, I semestre -MATLAB

124

APPLICAZIONI

• Vediamo come MATLAB lavora con particolari tipi di dati e funzioni

– animazioniI/O dati– I/O dati

– funzioni di funzione

Informatica Medica, I semestre -MATLAB

125

APPLICAZIONI: ANIMAZIONI

anim_2.m0.8

1

%Brownian motionn=40; s=.02;x=rand(n 1)-0 5; y=rand(n 1)-0 5; 0 2

0

0.2

0.4

0.6

x=rand(n,1)-0.5; y=rand(n,1)-0.5; h=plot(x,y,'.');axis([-1 1 -1 1]), axis square, grid off

-1

-0.8

-0.6

-0.4

-0.2

set(h,'EraseMode','xor','MarkerSize',18)while 1

* d ( )

-1 -0.5 0 0.5 1

x=x + s*randn(n,1);y=y + s*randn(n,1);set(h 'XData' x 'YData' y)

• Adatta per lunghe sequenzedi semplici plotP f l i l iset(h, XData ,x, YData ,y)

drawnowend

• Per fermare la simulazionedigitare <ctrl>-c

Informatica Medica, I semestre -MATLAB

126

I/O

• Oltre alle funzioni save e load MATLAB fornisce funzioni di / likdi I/O C-like:

– fopen, fclose : apertura e chiusura file

– fscanf, fprintf: lettura e scrittura dati formattati

– fread, fwrite: lettura e scrittura binaria di dati

Informatica Medica, I semestre -MATLAB

127

I/O FORMATTATO%...x = 0: 1:1;y = [x; exp(x)];

%...fid = fopen('exp txt');x = 0:.1:1;y = [x; exp(x)];

fid =fopen('exp.txt','w');f i tf(fid '%6 2f%12 8f\ ' )

fid = fopen('exp.txt');a = fscanf(fid,'%g %g',[2 inf]);

% Ora sono due righefprintf(fid,'%6.2f%12.8f\n',y);fclose(fid)

% Ora sono due righea = a';fclose(fid)fclose(fid)

0 00 1 00000000exp.txt

>>a

File su disco

0.00 1.000000000.10 1.10517092

a = 0.00 1.000000000.10 1.10517092

…1.00 2.71828183

…1 00 2 71828183

Informatica Medica, I semestre -MATLAB

128

1.00 2.71828183

I/O BINARIO

%... %...a=[1 2 3 4; 5 6 7 8];fid =fopen('a.bin','wb');

fid =fopen('a.bin','rb');a=fread(fid,[2,4],'float');

fwrite(fid,a,'float');fclose(fid)

fclose(fid)

bi>>aa =a.bin a =

1 2 3 45 6 7 8

File su disco

Informatica Medica, I semestre -MATLAB

129

FUNZIONI DI FUNZIONE

Consideriamo un esempio che può esseregeneralizzato come modello di interfaccia aparticolari funzioni di MATLABp

I t i i• Integrazione numerica• Minimo di una funzione• Equazioni differenziali ordinarie

Informatica Medica, I semestre -MATLAB

130

FUNZIONI DI FUNZIONE

>>x=-1:.01:2;>>plot(x,es_2(x))

es_2.mfunction y=es_2(x)%ES_2 Esempio80

100

% y=es_2(x)y=1./((x -.3).^2 + .01)+...40

60

1./((x - .9).^2 + .04) -6;0

20

-1 -0.5 0 0.5 1 1.5 2-20

Informatica Medica, I semestre -MATLAB

131

INTEGRAZIONE NUMERICA

>>quad('es_2',0,1)ans =

29 858329.8583

d8(' 2' 10 10)

Stringa contenente il nomedi una funzione

>>quad8('es_2',-10,10)ans =-73.2779

Informatica Medica, I semestre -MATLAB

132

API

• Sebbene MATLAB è un ambiente completo perprogrammare, esiste la possibilità di interfacciareMATLAB con programmi esterni attraverso laApplication Program Interface (API)

• Si puòp– utilizzare MATLAB da programmi C,

MATLAB engineMATLAB engine– utilizzare proprie applicazioni C come funzioni

buil in MEX filebuil-in, MEX-file

Informatica Medica, I semestre -MATLAB

133