• Non ci sono risultati.

Le funzioni MATLAB

N/A
N/A
Protected

Academic year: 2022

Condividi "Le funzioni MATLAB"

Copied!
23
0
0

Testo completo

(1)

MATLAB

Le funzioni

(2)

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

(3)

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…)

(4)

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.

(5)

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])

(6)

Funzioni

Esempio (intestazione di una funzione)

function y = doppio (x) doppio è il nome della funzione

x è il parametro formale (input)

y è il risultato (output)

(7)

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.

(8)

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.

(9)

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

(10)

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

(11)

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.

(12)

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.

(13)

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 ?

(14)

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).

(15)

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

(16)

Esempio

function mx = massimo(m,n)

if mn 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);

(17)

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 ?

(18)

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

(19)

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

(20)

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 mnvet(i);

end end

for i1:10

numeri(i) = input ('Inserire un numero: ');

end

disp('Il minimo è : '), disp(min_ele(numeri,i));

(21)

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.

(22)

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

(23)

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

Ad es., se devo solo stampare i risultati su monitor e non riutilizzarli nei calcoli successivi. In questo caso il risultato della funzione non è il calcolo di un nuovo dato, ma le operazioni che svolge e che posso

‘sostituire’ richiamando la funzione.

Riferimenti

Documenti correlati

Scrivere la funzione Matlab compute_inverse che prenda in input una matrice quadrata A di ordine N; dopo aver verificato che la matrice è invertibile,

12.2.2 Equazioni omogenee 12.2.3 Equazioni lineari 12.2.4 Equazioni di Bernoulli 12.3 Cenni sul problema di Cauchy. 12.4 Equazioni

[ i ] Pietro Mengoli (Bologna, 1626 – Bologna, 1686) insigne matematico i cui studi anticipano di circa trent’anni quelli di Leibniz e Newton sul calcolo infinitesimale.. Nella

[r]

Se manca una sola di queste condizioni la funzione non è continua e allora si parla di discontinuità.. Una funzione è continua in un intervallo se lo è in tutti i

Si sono presentate le operazioni, rese pos- sibili dall’ampliamento al campo dei reali ( radici, potenze ad esponente reale, log- aritmi ); si e’ iniziato lo studio delle funzioni

Proposizione: ogni sottospazio di R n si puo’ rappresentare sia come insieme delle soluzioni di un sis- tema lineare omogeneo in n incognite, sia come insieme delle combinazioni

Osservazione : Valgono le stesse considerazioni fatte per il teorema precedente , cioè il limite della differenza di due funzioni può condurre alla forma indeterminata + ∞