Upload
trandang
View
225
Download
0
Embed Size (px)
Citation preview
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