MATLAB Le funzioni
MATLAB - Funzioni 2
Funzioni
Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, consente di calcolare un valore come risultato, come avviene anche per una funzione matematica f(x).
f(x) restituisce un valore, in generale, diverso per ogni diverso valore di x. I valori che inseriamo tra parentesi, che in matematica chiamiamo variabili indipendenti, in MATLAB si chiamano parametri (o argomenti) della funzione
MATLAB - Funzioni 3
Funzioni
Una funzione consiste quindi in una serie di istruzioni, che producono un risultato che varia al variare del valore degli argomenti della funzione stessa.
Per definire una funzione è necessario, in generale, specificare:
Nome della funzione
Parametri formali (che costituiscono l’input della funzione)
Risultati forniti (che costituiscono l’output della funzione) function [<risultati>] =nome funzione ([par.formali])
MATLAB - Funzioni 4
Funzioni
Una funzione possono non essere specificati:
Parametri formali (che costituiscono l’input della funzione)
Ad esempio, una funzione che stampa un messaggio prefissato.
Risultati
Ad esempio, se devo solo presentare i risultati su monitor e non riutilizzarli nei calcoli successivi
MATLAB - Funzioni 5
Funzioni
Esempio
function y = doppio (x) doppio è il nome della funzione x è il parametro formale (input) y è il risultato (output)
MATLAB - Funzioni 6
Funzioni
Occorre poi definire il codice della funzione function [risultati] =nome funzione ([par.formali])
corpo della funzione
end
function y = doppio (x) y = 2 * x;
end
MATLAB - Funzioni 7
Funzioni
Una volta definita una funzione, essa può essere utilizzata all’interno di un programma (o di un’altra funzione)
a = input("Inserisci un numero ") duevoltea = doppio (a);
disp (duevoltea);
MATLAB - Funzioni 8
Chiamata di funzioni
La funzione (programma) che utilizza al suo interno un’altra funzione si dice, rispetto ad essa, funzione (programma) chiamante; l’utilizzo di una funzione si dice chiamata di funzione.
Nell’esempio precedente il programma chiamante invoca doppio(x)
Le operazioni che nel codice della funzione vengono eseguite sui parametri formali, nella esecuzione della funzione vengono eseguite sui valori dei corrispondenti argomenti che compaiono nella chiamata. Questo si chiama passaggio dei parametri per valore.
Analoga corrispondenza fra parametri esiste per i risultati
MATLAB - Funzioni 9
Passaggio parametri per valore
La funzione opera sui valori dei parametri formali e non modifica la variabile eventualmente usata nella chiamata.
Es. Se nel programma chiamante ho che
…. x=3;
y=doppio(x); …
dopo l’esecuzione di doppio(x) il valore di x non risulta modificato (y, ovviamente, vale 6).
Ogni chiamata di funzione deve passare tanti valori, attraverso una serie di espressioni dello stesso tipo dei parametri corrispondenti, quanti sono i parametri formali.
MATLAB - Funzioni 10
Funzioni con parametri: riepilogo
Possono operare su valori diversi per ogni chiamata di funzione, a seconda del valore che assumono in quel momento le espressioni che sono inserite nella lista dei parametri della chiamata
Si dice che i parametri vengono passati per valore, cioè la funzione assegna, all’inizio della sua esecuzione, i valori delle espressioni inserite come argomenti della sua chiamata (dette parametri effettivi o argomenti), alle corrispondenti variabili che appaiono nella definizione della funzione come parametri formali.
MATLAB - Funzioni 11
Passaggio parametri per valore
I parametri effettivi (o argomenti, o parametri attuali) sono passati per valore dalla funzione chiamante
I valori dei parametri effettivi sono copiati nei parametri formali utilizzati dalla funzione chiamata, cioè i loro valori sono usati per inizializzare le variabili (parametri formali) corrispondenti all’interno della funzione
Nessun effetto provocato da modifiche nel parametro formale all’interno della funzione si ripercuote sul parametro reale del programma chiamante
MATLAB - Funzioni 12
Esempio
function mx=massimo(m,n) % m,n sono
% i parametri formali if mn mx=m; % della funzione else mx=n;
end;
end
a input("Inserisci un numero ") b input("Inserisci un altro numero ") piugrande = massimo(a,b);
disp("Il massimo è "), disp(piugrande);
MATLAB - Funzioni 13
Passaggio parametri per valore (by value)
g = 5;
h = doppio(g);
disp(g);
disp(h);
function y=doppio(x) % x è un parametro formale y=2*x;
end
Quale sarà il valore stampato per le variabili g e h ?
MATLAB - Funzioni 14
Esempio
Si realizzi un programma che legga da tastiera il costo di listino di un prodotto e la percentuale di sconto e visualizzi il prezzo da pagare
Per realizzare il programma si definisca e si usi una funzione che riceva come parametri i due valori e calcoli il prezzo finale
MATLAB - Funzioni 15
Esempio
function ps = prezzo_scont (valore, percent) ps = valore - (valore*percent/100);
end
Valore e percent sono i parametri formali della funzione [costo, perc] = input("Introduci costo e percentuale (interi) ");
disp("Prezzo di listino: "), disp(costo);
disp("Sconto: "), disp(perc);
disp("Prezzo finale: "), disp(prezzo_scont(costo, perc) );
Costo e percentuale sono i parametri effettivi della chiamata
Esempio
% Restituisce il valore del minimo di un vettore.
% vet: vettore di cui si cerca il minimo
% dim: numero di elementi del vettore function mn = min_ele (vet,dim)
mn vet(1);
for i=1:dim
if vet(i)mn mnvet(i);
end end
for i1:10
numeri(i) = input ("Inserire un numero: ");
end
disp("Il minimo è : "), disp(min_ele(numeri,i));
16 MATLAB - Funzioni
MATLAB - Funzioni 17
Esercizi
Scrivere una funzione
function mx = massimo(vet,dim) che calcoli l’elemento di valore più elevato contenuto nel vettore vet di dimensione dim.
Utilizzando la funzione scrivere un programma che, dati 2 vettori:
calcoli il valore più grande fra il massimo dell’uno e dell’altro
stampi il valore di tale massimo, indicando in quale dei due vettori è contenuto.
Sapendo che la funzione di MATLAB s = sizeof(V) restituisce le dimensioni della variabile V, riscrivere la funzione ma nella forma function mx = massimo(vet)
MATLAB - Funzioni 18
Esercizi
Scrivere una funzione m = media(a,b,c) che restituisce la media di tre numeri a,b,c e un programma he chiami la funzione e stampi i valori di a,b,c e la media.
Scrivere una funzione media_vet(vet, n) che inserisce nell’elemento n_mo del vettore la media dei primi n-1 elementi del vettore stesso e il programma che chiama la funzione e stampa i valori dei primi n-1 elementi e la media, contenuta nell’elemento n_mo.
Scrivere una funzione inverti(vet, n) che stampa i primi n elementi del vettore vet in ordine inverso e il programma che inizializza il vettore con i primi n numeri e chiama la funzione.
Non usare le funzioni di MATLAB, ma solo gli operatori aritmetici di base