You are on page 1of 18

Strumenti  per  il  calcolo  numerico

MATLAB/Octave  
Funzioni

Informatica  B

Funzioni offerte da  MATLAB maxVal = max(A). …num2str(maxVal)]).Prologo Data  una matrice M  di  valori positivi. A = sum(N). disp(['il maggior numero di numeri pari per colonna e` '. 2).  si  individui  la   colonna  di  M  con  il  maggior  numero  di  valori  pari  e   stampi  a  video  tale  numero  (si  veda  la  lezione   precedente) N = ~mod(M. -2- .

2)==0) A(jj)++. end end -3- .Prologo Se  decidiamo  di  fare  a  meno  di  alcune  delle  funzioni.   per  es. for jj=1:C for ii=1:R if (mod(M(ii.jj). end end end maxVal = A(1).  sum  e  max: % uso di A A = zeros(C). for ii=2:C if (A(ii)>maxVal) maxVal=A(ii).

Vantaggio  derivanti  dall’uso  delle  funzioni Riusabilità Meno  fatica  per  il  programmatore   Astrazione   Esprimere  in  modo  sintetico  operazioni  complesse Programma  più  leggibile Estendibilità  del  linguaggio   Non  tutte  operazioni  incluse  come  predefinite -4- .

Funzioni Assomigliano  a  interi  programmi  ma  sono  “asserviti” ad  altri  programmi   Per  ogni  funzione  deve  essere  definito Quale  operazione  astratta  realizza Come  può  essere  identificato  dal  programma   principale Quali  parametri  coinvolge   Dati  in  ingresso  come  punto  di  partenza  dei  calcoli   (dominio  della  funzione) Valori  restituiti  ai  programmi  che  lo  usano  (codominio   della  funzione) Un  sottoprogramma  definito  può  essere  utilizzato dal   programma  principale   L’utilizzo  è  detto  chiamata  (o  invocazione)  del   sottoprogramma -5- .

’   matematicamente.; for  k=1:n Testata o intestazione f=f*k.  il dominio della funzione -6- .  separati da  ‘.  separati da  ‘.Definizione  di  una  funzione Esempio:  funzione fact  per  il calcolo del  fattoriale function  [f]=fact(n) f=1.  il codominio della funzione nome del  sottoprogramma lista degli argomenti.  tra parentesi quadre.’   matematicamente.  tra parentesi tonde.; Corpo: è la parte eseguibile end La  testata contiene informazioni rilevanti per  uso corretto del   sottoprogramma lista dei risultati.

 applicata a  suoi argomenti.Invocazione  di  una  funzione >>  x=fact(4) x  =24 Sintassi dell’invocazione ispirata a  notazione matematica una funzione.  fornisce un   valore del  suo codominio chiamata di  funzione sintatticamente è un’espressione >>  x=fact(2)+fact(3) x  =  8 >>  fact(fact(3)) ans =  720 -7- .

Sintassi  dell’invocazione  di  una  funzione   (1) Nel  caso  di  più  parametri  in  uscita. Può essere anche una chiamata di  funzione come  nella pagina precedente!   -8- .; y  =  20 p=a*b.   Ogni parametro è un’espressione qualsiasi (di  tipo appropriato…).  risultati  “raccolti”  usando  la  notazione  dei  vettori   Chiamata di  sumProd Definizione di  sumProd >>  [x.; Identificatore della funzione Lista dei parametri formali Lista dei parametri attuali racchiusa fra parentesi tonde.y]=sumProd(4.p]=sumProd(a.5) function  [s.b) x  =  9 s=a+b.

Sintassi  dell’invocazione  di  una  funzione  (2) Se  ci  sono  più  parametri.  la  corrispondenza  tra     formali  e  attuali  determinata  dall’ordine   primo  formale   primo  attuale secondo  formale   secondo  attuale etc. numero  parametri  attuali  =  numero  parametri   formali ovviamente.  tipo  dei  parametri  attuali  compatibile  con   tipo  dei  formali -9- .

10 - .; x  =  6 for  k=1:n >>  y=fact(2)  +  x f=f*k.Comportamento dell’interprete MATLAB   quando viene invocata una funzione § Consideriamo il seguente esempio >>  x=fact(3) function  [f]=fact(n) f=1.; end y  =  8 § Diverse  macchine astratte § Una per  l’esecuzione del  programma chiamante § Una per  ciascuna invocazione di  funzione § Ciascuna dotata di  un  proprio ambiente di   esecuzione in  cui  vengono definite  le  proprie variabili .

Ambiente di fact al 3. Ambiente di fact al 1. Prima  invocazione ed esecuzione di  fact  (1) 2. Ambiente di fact al momento dell’esecuzione momento del termine momento della chiamata della prima istruzione di fact della prima iterazione del for n 3 n 3 n 3 f f 1 f 1 k 2 x x x Ambiente dello Ambiente dello Ambiente dello script chiamante script chiamante script chiamante L’ambiente dello script chiamante non si modifica durante l’esecuzione di fact perchè la macchina astratta corrispondente è bloccata in attesa che l’altra termini l’esecuzione di fact .

Prima  invocazione ed esecuzione di  fact  (1) 4. Ambiente di fact al 5. Ambiente di fact al momento del termine momento del termine della seconda iterazione del for della terza iterazione del for n 3 n 3 L’esecuzione di fact termina qui. in x k 3 k 4 x x x 6 Ambiente dello Ambiente dello Ambiente dello script chiamante script chiamante script chiamante al termine della prima invocazione di fact .12 - . f 2 f 6 L’interprete MATLAB copia il valore di f nell’ambiente del chiamante.

Ambiente di fact al 3. Ambiente di fact al 1. Seconda invocazione ed esecuzione di  fact  (1) 2. Ambiente di fact al momento dell’esecuzione momento del termine momento della chiamata della prima istruzione di fact della prima iterazione del for n 2 n 2 n 2 f f 1 f 1 k 2 x 6 x 6 x 6 y y y Ambiente dello Ambiente dello Ambiente dello script chiamante script chiamante script chiamante L’ambiente della seconda chiamata a fact è indipendente da quello della prima .

Ambiente di fact al momento del termine della seconda iterazione del for L’esecuzione di fact termina qui. n 2 L’interprete MATLAB copia il valore f di f nell’ambiente del chiamante. Seconda invocazione ed esecuzione di  fact  (2) 4. lo 2 somma al valore di x e mette il risultato k in y 3 x 6 x 6 y y 8 Ambiente dello Ambiente del chiamante script chiamante al termine della seconda invocazione di fact L’ambiente della seconda chiamata a fact è indipendente da quello della prima .

15 - .Ambienti di  esecuzione Ambienti della macchina del chiamante e di quella della chiamata a funzione sono disgiunti Comunicano attraverso i parametri possono contenere variabili omonime. che rimangono distinte NB: dopo esecuzione di una funzione non rimane traccia del suo ambiente .

M=x. end.k]=MCDmcm(r.  s) x=a. y=b.;  [h. m]=MCDmcm(a.Invocazione di  una funzione con  più parametri Esempio function [M.16 - .;  s=42. m=a*b/M. while x ~= y h =  6 if x>y x=x-y. else y=y-x. k =  84 end. b) >>  r=12. .

k]=MCDmcm(r.. Invocazione di  una funzione con  più parametri Sequenza nell’esecuzione di [h. s) MCDmcm x:… y:… MCDmcm x:… y:… a:… b:… M:. m:… a:12 b:42 M: m: r:12 s:42 h:… k:… r:12 s:42 h:… k:… r:12 s:42 h:… k:… principale principale principale (1) (2) (3) MCDmcm x: 6 y: 6 MCDmcm x: 6 y: 6 MCDmcm x: 6 y: 6 a:12 b:42 M:6 m:84 M:12 m:42 M:6 m:84 M:12 m:42 M:6 m:84 r:12 s:42 h:… k:… r:12 s:42 h:6 k:84 r:12 s:42 h:6 k:84 principale principale principale (4) (5) (6) 17 .

m”  come  i file  di  script File  di  funzione deve avere stesso nome della funzione che contiene iniziare con  la  definizione della funzione (NB:  parola function  va in  minuscolo) trovarsi in  una cartella che sta nel PATH  di  MATLAB Per  evitare conflitti di  nomi usare exist(‘nomeFunzione’) restituisce 0  se  la  funzione non  esiste.  ‘sin’  è una funzione predefinita (built-­in) >>  exist('sin') ans =  5   .Organizzazione  delle  funzioni  in  MATLAB In  un  M-­file  di  tipo particolare detto “file  di  funzione” Ha  estensione “.  ≠0  altrimenti es.18 - .