
Come fare una funzione su Matlab
In questa lezione ti spiego come si crea una funzione su Matlab
Cos'è una funzione? E' una parte del codice di un programma che puoi eseguire ogni volta che ti serve. Il codice di una funzione è separato dal programma principale. Potrebbe trovarsi nello stesso file del programma oppure in un file differente. L'utilizzo delle funzioni ti permette di rendere il codice di un programma più sintetico e ordinato.
Per definire una funzione in Matlab devi seguire questa sintassi
function [y1, y2, ... ] = nomefunzione([x1,x2,...])
codice da eseguire
end
- Le lettere x1,x2... sono le variabili di input che la funzione riceve in ingresso dalla chiamata.
- Le lettere y1,y2... sono le variabili di output che la funzione restituisce in uscita al programma chiamante
In Matlab le funzioni vanno aggiunte sempre alle ultime righe di uno script. Altrimenti lo script va in errore.
Una volta definita una funzione, puoi chiamarla da diversi punti del programma ed eseguirla più volte.
Un esempio pratico
Scrivi un nuovo script e crea una funzione dandogli il nome media()
La funzione riceve in ingresso due dati numerici x1 e x2 e restituisce in uscita la media aritmetica y dei due numeri
function y = media(x1,x2)
y = (x1+x2)/2;
end
Ora inserisci nel codice del programma principale una chiamata m=media(2,4) alla funzione media().
Nella chiamata passa due valori 2 e 4
m=media(2,4);
disp(m);
function y = media(x1,x2)
y = (x1+x2)/2;
end
La funzione media() riceve i due valori in ingresso x1=2 e x2=4, calcola la media y=(2+4)/2 e restituisce in output il risultato y=3
Il programma principale (chiamante) riceve il valore in output della funzione (3) e lo assegna alla variabile emme (m=3).
Infine, il programma stampa sullo schermo il valore contenuto nella variabile emme.
3
Ora inserisci un'altra chiamata alla funzione m=media(4,6) nel programma principale.
Questa seconda chiamata passa alla funzione i numeri 4 e 6.
m=media(2,4);
disp(m);
m=media(4,6);
disp(m);
function y = media(x1,x2)
y = (x1+x2)/2;
end
- Nota. Come puoi vedere il programma chiama la funzione media() due volte da due punti distinti del programma principale.
- La prima volta passa i valori 2 e 4 ricevendo come risposta 3.
- La seconda volta passa i valori 4 e 6 ricevendo come risposta 5.
Nella seconda chiamata la funzione media riceve i parametri x1=4 e x2=6, calcola la media (4+6)/2=5 e restituisce al programma chiamante il risultato 5.
Il programma chiamante riceve il risultato della funzione (5), lo assegna alla variabile emme (m=5) e infine stampa a video il contenuto della variabile.
Pertanto, questa volta l'output è 5.
3
5
Come restituire più valori in uscita
In Matlab una funzione può restituire anche più di un valore.
Ad esempio, la funzione [y1,y2] = potenza(x) riceve in ingresso un solo valore numerico (x) producendo in uscita due valori.
[y1,y2]=potenza(2);
disp(y1);
disp(y2);
function [y1, y2] = potenza(x)
y1=x^2;
y2=x^3;
end
In questo caso la chiamata [y1,y2]=potenza(2) passa alla funzione un solo valore in ingresso x=2.
La funzione potenza() calcola il quadrato x2=4 e il cubo x3=8 della variabile x=2 e li restituisce al programma chiamante.
Il programma chiamante riceve i due valori in uscita, li assegna alle variabili y1=4 e y2=8 e infine li stampa a video.
4
8
L'istruzione return
L'istruzione return ti permette di anticipare la chiusura di una funzione.
Quando Matlab incontra l'istruzione return nel blocco del codice di una funzione, termina l'esecuzione della funzione e restituisce il controllo al programma chiamante.
Ti faccio un esempio pratico.
[y1,y2]=potenza(-2);
disp(y1);
disp(y2);
function [y1, y2] = potenza(x)
if x<0
y1=0
y2=0
return
end
y1=x^2;
y2=x^3;
end
In questo codice di esempio, se il valore passato è negativo (x<0) l'istruzione return termina l'esecuzione della funzione potenza() restituendo i risultati y1=0 e y2=0.
L'output della funzione è
0
0
Se nel blocco di codice non è presente l'istruzione return, il controllo al programma chiamante torna automaticamente dopo l'esecuzione dell'ultima istruzione del blocco di codice della funzione.