Sei sulla pagina 1di 23

Fondamenti di Informatica

MatLab: Le funzioni
Ing. F. Clarizia
Dip. di Ingegneria informatica e Ingegneria elettrica,

Facolt di Ingegneria, Universit di Salerno


Via P. don Melillo 1, 84084 Fisciano (SA)

E-mail: fclarizia@unisa.it

Materiale didattico
prodotto dal
prof. A. Della Cioppa

mercoled 4 novembre 2009


Programmare in MatLab

Il MatLab dispone, come ovvio, di tre strutture


fondamentali:

Sequenza
Selezione
Iterazione

mercoled 4 novembre 2009


Sequenza e selezione
La sequenza banalmente definita dalla sequenza
lessicografica delle istruzioni
La selezione ha la seguente sintassi:
if condizione,

istruzioni

elseif condizione

istruzioni

else

istruzioni

end

mercoled 4 novembre 2009


Iterazione
Ciclo a conteggio:

for i=1:n

istruzioni

end

Ciclo a condizione
while condizione

istruzioni

end

mercoled 4 novembre 2009


I Files
MATLAB un linguaggio di programmazione
potente, cos come un ambiente computazionale
interattivo. I Files che contengono codice MATLAB
sono chiamati M-files.
Dopo aver creato un M-file usando un qualsiasi
editor di testo, tale file pu essere usato come un
comando od una funzione MATLAB. Ci sono due
generi di M-file:
Scripts che non accettano argomenti dentrata o argomenti di
uscita. Loro operano su dati nel workspace.

Functions che possono accettare argomenti dentrata e


argomenti di uscita. Una variabile interna locale alla funzione.
mercoled 4 novembre 2009
Script

Quando si richiama uno script, MATLAB esegue


semplicemente i comandi presenti nel file.
Gli Script possono operare su dati esistenti nel
workspace, o loro possono creare dati nuovi su cui
operare. Sebbene gli script non forniscano dati di
output, qualsiasi variabile che loro creano rimane nel
workspace, per essere usata in calcoli susseguenti.
Inoltre, gli script possono produrre dei grafici, usando
funzioni come plot.

mercoled 4 novembre 2009


Esempio
Per esempio, creiamo un file chiamato rango.m che
contiene questi comandi MATLAB:
% determinazione del rango della magic squares

r = zeros(1,32);

for i=1:32

r(i) = rank(magic(n));

end

bar(n)

mercoled 4 novembre 2009


Esempio
Digitando lasserzione: rango
imponiamo a MATLAB di eseguire i seguenti
comandi:
1. calcola il rango delle prime 30 magic squares
2. traccia il grafico del risultato

Si ottiene cos il grafico seguente:

mercoled 4 novembre 2009


Funzioni

Coefficiente binomiale

n n!
=
k
k !(n k )!

mercoled 4 novembre 2009


Astrazione di Controllo
Quando si scrive un algoritmo in un LdP ad alto
livello, si usano nomi che consento si riferirsi a entit
come costanti, variabili, tipi, operatori, ecc.
Questo modo di operare consente di effettuare una
Control Abstraction:
i nomi usati in un programma possono essere associati
a frammenti arbitrariamente grandi e complessi di
programma.

Una funzione unastrazione di controllo che


consente di nascondere i dettagli implementativi in
una semplice interfaccia (incapsulamento delle
operazioni).
mercoled 4 novembre 2009
Astrazione di Controllo
Il corpo di una funzione contiene operazioni che sono espresse
con i normali costrutti del LdP.

L'operazione fondamentale associata alla funzione la


chiamata, durante la quale il controllo dell'algoritmo in
esecuzione trasferito dal chiamante alla funzione. Una volta
che la funzione ha terminato le sue operazioni, il controllo
ritornato al chiamante.

Le funzioni pi interessanti dal punto di vista dell'astrazione


sono quelle parametrizzate. L'informazione viene passata dal
chiamante alla funzione mediante i cosiddetti parametri
attuali, che vengono forniti nella chiamata della funzione. Ogni
parametro attuale corrisponde a un parametro formale che
rappresenta il nome con cui il valore del parametro attuale
viene conosciuto dentro in corpo della funzione.
mercoled 4 novembre 2009
Astrazione di Controllo

Le funzioni hanno inoltre la particolare abilit di


ritornare un valore al chiamate.
Le chiamate a funzione possono essere perci usate
nel contesto delle espressioni di un LdP.

mercoled 4 novembre 2009


Le funzioni: top-down
Le funzioni dal punto di vista della programmazione
top-down consentono di:
rendere trasparente al resto del programma i dettagli
implementativi che non essenziale condividere
(Modularit);
se ben realizzate, consentono di riutilizzare il codice
scritto in altri programmi (Riutilizzabilit);
Consentono un miglior controllo degli errori e una
loro migliore localizzazione in fase di debbugging
(Chiarezza del codice);

mercoled 4 novembre 2009


MatLab: Funzioni
Le Funzioni sono M-file che possono accettare
argomenti dentrata e forniscono argomenti di uscita.
Il nome dellM-file e della funzione deve essere lo
stesso.
Le Funzioni operano su variabili definite nel
workspace proprio, separato dal workspace a cui si
accede allingresso di MATLAB, cio le variabili usate
allinterno della funzione sono locali.
Le funzioni vanno scritte in modo identico agli M-
file, tranne per lintestazione che del tipo:
function [var. di uscita]=nomefunzione(var. di ingresso)

mercoled 4 novembre 2009


Funzioni definite dallutente
La parola chiave function deve essere scritta con lettere
minuscole

Parametro formale
Esempio di output
parametro formale
di input
function res= mia_media(a,b)
res=(a+b)/2;
nome funzione
end;

Richiamiamo la funzione nella finestra dei comandi


>> calc_media=mia_media(3,7);
valori parametro attuale
>> calc_media per a e b (espressioni
costanti)
>> 5 parametro
attuale di output
mercoled 4 novembre 2009
Funzioni definite dallutente
Altro esempio di funzione
function z= fun(x,y)
u=3*x;
z=u+6*y.^2;
Le variabili x, y, u e z sono variabili locali per la funzione fun
questo significa che i loro valori non saranno disponibili nel
workspace esterno alla funzione
E possibile passare array come argomenti di input
r=fun([2:4],[7:9])
r=300 393 498

Scriviamo una funzione contenente 2 parametri di output


function [A,C]=circle(r)
A=pi*r.^2;
C=2*pi*r;
end

mercoled 4 novembre 2009


Funzioni definite dallutente
La funzione circle calcola larea (il cui valore sar restituito nel primo
parametro A) e la circonferenza (il cui valore sar restituito nel secondo
parametro C) di un cerchio di raggio r (parametro di input della funzione).

Richiamiamo la funzione circle


[A,C]=circle(4);
A=50.2655
C=25.1327

Una funzione pu essere priva di argomenti di input e output

La funzione seguente memorizza la data corrente nella variabile today e


visualizza il valore di tale variabile
function show_date
today=date
mercoled 4 novembre 2009
Cosa succede quando viene invocata la
funzione circle?
Una invocazione di funzione unespressione
Viene sospesa lesecuzione e viene ceduto il controllo alla funzione circle
dopo aver opportunamente associato i parametri attuali ai parametri formali
(passaggio dei parametri)

>> [area,circonf]=circle(3)

Vengono eseguite le istruzioni di circle, a partire dalla prima;


Lesecuzione di circle termina con lesecuzione dellultima istruzione della
funzione (eventualmente end) o se si incontra unistruzione speciale
denominata return;
Al termine dellesecuzione di circle il controllo ritorna allambiente (o alla
funzione che laveva chiamata), che prosegue lesecuzione a partire dal punto
in cui circle era stata attivata
Vedere la voce Calling Function dellhelp di matlab
per maggiori dettagli
mercoled 4 novembre 2009
Cosa succede quando viene invocata una funzione?

ris=Fa (P1)

Istruzione 1 di Fa
Istruzione 2 di Fa
Istruzione 3 di Fa
Comando 1 Calcolo ris
return (oppure end)
Comando 2
Comando 3: INVOCO Fa (V1)
Comando 4
Comando 5 INVOCO Fb (X1,X2)
Comando 6 [a,b] =Fb (Q1, Q2)

Istruzione 1
Istruzione 2
.
Calcolo a e b

mercoled 4 novembre 2009


Differenze tra return e end

La parola chiave end indica la fine fisica della funzione.


Se provate a mettere altre istruzioni dopo la parola chiave end
leditor vi segnala un errore
La parola chiave return indica una fine logica delle
funzione e pu essere posta in qualsiasi punto della
funzione (ce ne possono essere anche pi di una) ed indica
semplicemente che si ritorna il controllo al chiamante

mercoled 4 novembre 2009


Esempi su differenze tra return ed end
function [A,C]=circle(r)
A=pi*r.^2; function [A,C]=circle(r)
A=pi*r.^2;
C=2*pi*r; C=2*pi*r;
return

function [A,C]=circle(r) function [A,C]=circle(r)


A=pi*r.^2;
A=pi*r.^2; return
C=2*pi*r;
C=2*pi*r; end
end function [A,C]=circle(r)
if r<0
disp(raggio negativo: errore)
function [A,C]=circle(r) return
else
A=pi*r.^2; A=pi*r.^2;
C=2*pi*r;
end; return
C=2*pi*r;

mercoled 4 novembre 2009


Variabili locali e Variabili globali
Le variabili di input specificate nella riga di definizione della
funzione sono locali alla funzione

Tutte le variabili interne alla funzione vengono cancellate dopo


che la funzione stata eseguita

Il comando global serve a dichiarare globali alcune variabili

I loro valori saranno disponibili nellarea principale di matlab


ed allinterno della funzione che le ha definite

Sintassi
Global a x q
mercoled 4 novembre 2009
Esempio
Vediamo come scrivere una una funzione con
parametri in ingresso e parametri in uscita.
Si voglia costruire una funzione che, dati i lati a e b
di un rettangolo fornisca larea A, il perimetro p e
la diagonale d. Indichiamo con (a, b) la lista dingresso
(parentesi tonde) e con [A, p, d] la lista duscita
(parentesi quadre) (si noti la virgola fra i parametri).
function [A, p, d] = rettangolo(a, b)

A = a * b;

p = 2 * (a + b);

d = sqrt( a^2 + b^2);

[area; perim; diag] =rettangolo(2; 3)


mercoled 4 novembre 2009