Funzioni MATLAB Le 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 Funzioni 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: 2 Nome della funzione Parametri formali (che costituiscono l’input della funzione) Risultati forniti (che costituiscono l’output della funzione) 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 function [<risultati>] = nome funzione ([par.formali]) MATLAB - Funzioni 3 MATLAB - Funzioni 4 1 Funzioni Funzioni Esempio Occorre poi definire il codice della funzione function [risultati] =nome funzione ([par.formali]) function y = doppio (x) doppio è il nome della funzione x è il parametro formale y è il risultato corpo della funzione end (input) function (output) y = doppio (x) y = 2 * x; end MATLAB - Funzioni 5 Funzioni MATLAB - Funzioni Chiamata di funzioni 6 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 7 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 8 2 Passaggio parametri per valore Funzioni con parametri: riepilogo 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 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 MATLAB - Funzioni 10 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); Nessun effetto provocato da modifiche nel parametro formale all’interno della funzione si ripercuote sul parametro reale del programma chiamante MATLAB - Funzioni 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. Esempio I parametri effettivi (o argomenti, o parametri attuali) sono passati per valore dalla funzione chiamante 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 9 Passaggio parametri per valore 11 MATLAB - Funzioni 12 3 Passaggio parametri per valore (by value) Esempio 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 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 13 MATLAB - Funzioni 14 Esempio Esempio function ps = prezzo_scont (valore, percent) ps = valore - (valore*percent/100); end % Restituisce il valore del minimo di un vettore. % vet: vettore di cui si cerca il minimo % dim: numero di elementi del vettore Valore e percent sono i parametri formali della funzione function mn = min_ele (vet,dim) mn vet(1); for i=1:dim if vet(i)mn mnvet(i); end end [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) ); for i1:10 numeri(i) = input ("Inserire un numero: "); end disp("Il minimo è : "), disp(min_ele(numeri,i)); Costo e percentuale sono i parametri effettivi della chiamata MATLAB - Funzioni 15 MATLAB - Funzioni 16 4 Esercizi 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 17 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 MATLAB - Funzioni 18 5