Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MATLAB/Octave
Funzioni
Informatica B
Prologo
N = ~mod(M, 2);
A = sum(N);
Funzioni offerte da MATLAB
maxVal = max(A);
-2-
Prologo
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-
Definizione di una funzione
Esempio: funzione fact per il calcolo del fattoriale
function [f]=fact(n)
f=1;;
for k=1:n Testata o intestazione
-6-
Invocazione di una funzione
>> x=fact(4)
x =24
Sintassi dell’invocazione ispirata a notazione
matematica
una funzione, applicata a suoi argomenti, 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, risultati “raccolti” usando la notazione dei vettori
-8-
Sintassi dell’invocazione di una funzione (2)
-9-
Comportamento dell’interprete MATLAB
quando viene invocata una funzione
§ Consideriamo il seguente esempio
>> x=fact(3) function [f]=fact(n)
f=1;;
x = 6 for k=1:n
>> y=fact(2) + x f=f*k;;
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
- 10 -
Prima invocazione ed esecuzione di fact (1)
x x x
x x x 6
- 12 -
Seconda invocazione ed esecuzione di fact (1)
x 6 x 6 x 6
y y y
4. 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, lo
2 somma al valore di x e mette il risultato
k in y
3
x 6 x 6
y y 8
- 15 -
Invocazione di una funzione con più
parametri
Esempio function [M, m]=MCDmcm(a, b)
>> r=12;; s=42;; [h,k]=MCDmcm(r, s) x=a; y=b;
while x ~= y
h = 6 if x>y x=x-y;
else y=y-x;
k = 84 end;
end;
M=x;
m=a*b/M;
- 16 -
Invocazione di una funzione con più parametri
Sequenza nell’esecuzione di [h,k]=MCDmcm(r, s)
r:12 s:42 h:… k:… r:12 s:42 h:… k:… r:12 s:42 h:… k:…
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
17
Organizzazione delle funzioni in MATLAB
In un M-file di tipo particolare detto “file di funzione”
Ha estensione “.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, ≠0 altrimenti
es. ‘sin’ è una funzione predefinita (built-in)
>> exist('sin')
ans = 5
- 18 -