MATLAB
Le funzioni
Funzioni
Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, calcola un valore come risultato, esattamente come avviene anche per una funzione matematica f(x).
f(x) restituisce, in generale, un valore 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
Funzioni
Una funzione comprende una serie di istruzioni che producono un risultato che varia al variare del valore degli argomenti della funzione stessa ma che è ottenuto mediante lo stesso procedimento.
Es.
il valore del massimo fra 3,5,2,9 è diverso dal massimo
fra 1,3,8,7; però, in entrambi i casi, per trovare il
massimo uso lo stesso procedimento (confronto i primi
due, trovo il massimo, confronto il massimo trovato col
terzo, e così via…)
Funzioni
Usare le funzioni serve per poter riutilizzare codice scritto in precedenza
Esempio
calcolare il massimo fra gli elementi di un vettore vet richiede l’esecuzione di un certo numero di istruzioni, ma in MATLAB ho a disposizione la funzione max(x) (x indica un generico argomento) e posso evitare di scrivere tutte le volte tutte le istruzioni che mi servono per calcolarlo. Mi basterà scrivere (ad es.)
disp(max(vet))
anche se, in realtà, il calcolatore ovviamente esegue
tutta la procedura.
Funzioni
Per definire una funzione è necessario specificare:
Nome della funzione (mi serve per chiamarla)
I cosiddetti parametri formali (cioè gli argomenti della funzione, che rappresentano i dati di input alla funzione, cioè i dati di cui ho bisogno per calcolare il valore (output) della funzione.
Risultati forniti (cioè l’output della funzione)
function [<risultati>] = nome_funzione ([par.formali])
Funzioni
Esempio (intestazione di una funzione)
function y = doppio (x) doppio è il nome della funzione
x è il parametro formale (input)
y è il risultato (output)
Funzioni
Per definire una funzione è necessario definire l’intestazione della funzione (che descrive cosa produce la funzione e con quali dati) seguita dal codice della funzione (cioè come lo produce). La definizione della funzione è chiusa da end
Es.
function y = doppio(x) y = 2 * x;
end
Assegno un valore ad x (input) e lo uso per assegnare un
nuovo valore ad y (output), che sarà il risultato della
funzione.
Funzioni
function [risultati] = nome funzione ([par.formali]) istruzioni
end
Il valore della funzione è il valore che, al termine dell’esecuzione delle istruzioni, hanno le variabili di output (risultati). Quindi le istruzioni che descrivono le operazioni che esegue la funzione DEVONO assegnare dei valori alle variabili specificate a sinistra dell’uguale nell’intestazione.
Il risultato è calcolato seguendo la procedura descritta dalle istruzioni, che descrivono come devono essere elaborate le variabili rappresentate dai parametri formali (dati di input) per calcolare i risultati.
Chiamata di funzioni
Una volta definita una funzione (nell’esempio, la funzione doppio(x), essa può essere utilizzata all’interno di un programma (o di un’altra funzione)
a = input('Inserisci un numero ') duevoltea = doppio(a);
disp (duevoltea);
Chiamata di funzione
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 la funzione 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 (o parametri effettivi). Si ha quindi passaggio dei parametri per valore.
Analoga corrispondenza fra parametri esiste per i risultati
Chiamata di funzioni
function [d,s] = diffsomma(a,b)
d = a - b; %calcola la differenza s = a + b; %calcola la somma
end
Programma chiamante
x input('Inserisci un numero ')
y input('Inserisci un altro numero ') [dxy,sxy] = diffsomma(x,y)
disp('La differenza fra ’), disp(x), disp(’e’), disp(y), disp(’è ’), disp(dxy);
fprintf('La somma fra ’),disp(x), disp(’e’), disp(y), disp(’è ’), disp(sxy);
La funzione viene eseguita usando come valori per a e b, rispettivamente, i valori di x e y . Restituisce due valori ( d e s nella funzione) che, nel
programma chiamante, sono assegnati, rispettivamente, a dxy e sxy.
Passaggio parametri per valore
La funzione opera sui valori dei parametri attuali (che
possono essere espressioni generiche) 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).
Normalmente, ogni chiamata di funzione deve specificare come argomenti, attraverso una serie di espressioni dello stesso tipo dei parametri corrispondenti, tanti valori quanti sono i parametri formali.
Passaggio parametri per valore
function risultato = somma (a,b) risultato = a+b;
end
Esempio:
x=3, y=2;
z = somma (x,y);
z = somma (z+2,5);
p = somma (3,x);
Quanto valgono p e z al termine dell’esecuzione del codice ?
Funzioni con parametri: riepilogo
Operano su valori diversi per ogni chiamata di funzione, a seconda del valore che assumono in quel momento le espressioni che sono inserite come parametri effettivi nella chiamata.
Si dice che, quando si chiama una funzione, i parametri vengono passati per valore, cioè la funzione assegna i valori che, nella chiamata, hanno le espressioni inserite fra parentesi (dette parametri effettivi o argomenti), alle corrispondenti variabili che, nella intestazione della
funzione, appaiono fra parentesi (parametri formali).
Passaggio parametri per valore
I parametri effettivi (o argomenti, o parametri attuali) sono passati per valore dal programma chiamante
I valori dei parametri effettivi sono copiati nei parametri formali utilizzati dalla funzione chiamata, cioè i loro
valori sono usati per assegnare un valore alle 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
Esempio
function mx = massimo(m,n)
if mn mx=m; % m,n sono else mx=n; % i parametri formali
end; % della funzione end
Programma chiamante:
% a e b sono i parametri attuali della
% chiamata
a input('Inserisci un numero ')
b input('Inserisci un altro numero ') piugrande = massimo(a,b);
disp('Il massimo è '), disp(piugrande);
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 ?
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 riceve come parametri i
due valori e calcola il prezzo finale
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 minimo elemento 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));
Esercizi
Scrivere una funzione
function mx = massimodisp(vet,dim) che calcoli l’elemento in posizione dispari di valore più elevato
contenuto nel vettore vet di dimensione dim.
Sapendo che la funzione s = length(V) restituisce la lunghezza del vettore V, utilizzare questa funzione per
riscrivere la funzione massimodisp nella forma function mx = massimodisp(vet)
Usando massimodisp,scrivere un programma che, dati 2 vettori:
calcoli il valore più grande fra il massimo in posizione dispari dell’uno e il minimo dell’altro
stampi tale valore, indicando in quale dei due vettori è contenuto.
Esercizi
Scrivere una funzione m = media(a,b,c) che restituisce la media di tre numeri a,b,c e un programma che chiama la
funzione e stampa i valori di a,b,c e la media.
Generalizzare la funzione per un numero qualsiasi n di valori, ponendola nella forma
function m = mediavet (vet, n)
Scrivere una funzione somman(vet, n) che restituisce la somma dei primi n elementi del vettore vet e il programma che inserisce in un vettore n numeri e chiama la funzione per stamparne la somma.
Non usare le funzioni di MATLAB, ma solo gli operatori aritmetici di base
Funzioni: Osservazioni
In una funzione possono non essere specificati:
Parametri formali (che costituiscono l’input della funzione)
Ad es., una funzione che stampa sempre lo stesso messaggio non ha bisogno di dati di input.
Risultati