introduzione a matlabluciozambon.altervista.org/home/students/matlab_3_function_2008.pdf · lucio...
TRANSCRIPT
1Lucio Zambon
®Introduzione a MatlabFunzioniUna funzione è una sequenza di istruzioni identificata con un nome.Le funzioni sono salvate in un file .m (m-file)I file .m devono stare in una cartella nota a Matlab tramite la variabile d'ambiente PATHPer aggiungere una cartella a PATH si usa il comando omonimo PATH, ad esempio:path(path,'c:\tools\goodstuff')
2Lucio Zambon
®Introduzione a Matlab
Funzioni: parametri di I/OUna funzione può avere uno o più parametri in ingresso e può restituire uno o più parametri in uscitafunction [out1, out2...] = fun_name(in1, in2...)in1, in2... = parametri in ingresso (opzionali)out1, out2... = parametri in uscita (opzionali)
3Lucio Zambon
®Introduzione a MatlabFunzioni: parametri di I/O variabilinargin, nargout numero parametri d'ingresso/uscita con cui è stata chiamata la funzione correntevarargin, varargout permette di avere un numero arbitrario di parametri d'ingresso/uscita Le variabili definite dentro una funzione sono locali ad essa, non sono utilizzabili altrove. global permette di utilizzare variabili globali
4Lucio Zambon
®Introduzione a Matlab
Esempio di funzione (1)% MYSQUARE calcola il quadrato di un numero% mysquare(x), x numero da elevare al quadratofunction risultato = mysquare(x) risultato = x^2;% a destra del percento ci sono i commenti% che vengono ignorati dall'interprete% i commenti delle prime righe vengono mostrati% da help mysquare
5Lucio Zambon
®Introduzione a Matlab
Esempio di funzione (2)Funzione che restituisce 2 variabili in uscita: lamedia e la deviazione standard function [mean,stdev] = stat(x) %STAT Interesting statistics. n = length(x); mean = sum(x) / n; stdev = sqrt(sum((x - mean).^2)/n);
6Lucio Zambon
®Introduzione a Matlab
Espressioni condizionali: IFIF espressione
istruzioniELSEIF espressione
istruzioniELSE
istruzioniEND
7Lucio Zambon
®Introduzione a Matlab
Esempio di istruzione IFif a ~= 0 % ~= diverso, == test ugualianza
b = 1/aelse
b = NaN % Not-a-Numberend
8Lucio Zambon
®Introduzione a MatlabEspressioni condizionali: SWITCHSWITCH switch_espr
CASE case_espr, istruzione, ..., istruzione
CASE {case_espr1, case_espr2,...}istruzione, ..., istruzione
OTHERWISE, istruzione, ..., istruzione
END
9Lucio Zambon
®Introduzione a MatlabEsempio di istruzione SWITCHMETHOD = 'Bilinear';switch lower(METHOD)
case {'linear','bilinear'}disp('Il metodo è lineare')
case 'cubic'disp('Il metodo è cubico')
otherwisedisp('Metodo sconosciuto.')
end
10Lucio Zambon
®Introduzione a Matlab
IterazioniUn blocco di istruzioni può essere ripetuto un numero arbitrario di volte mediante le istruzioni chiamate ciclo FOR e ciclo WHILE.I cicli possono essere annidati uno nell'altro. Attenzione ai cicli infiniti!
11Lucio Zambon
®Introduzione a Matlab
Ciclo FORFOR variabile = espressione
istruzione, ..., istruzione
END
12Lucio Zambon
®Introduzione a Matlab
Esempio ciclo FORi = 1for x = [-5:0.1:5]
y(i) = x^2i = i + 1
end
14Lucio Zambon
®Introduzione a Matlab
Esempio ciclo WHILEdividendo = 4567divisore = 37quoziente = 0resto = dividendowhile resto > divisore
resto = resto - divisorequoziente = quoziente + 1
end
15Lucio Zambon
®Introduzione a Matlab
BREAKInterrompe ed esce da un ciclo for o while.Nel caso di cicli annidati esce solo da quello più interno in cui è contenuto.Se non è contenuto in un ciclo for o while esce dalla funzione in cui è contenuto.Interrompe l'esecuzioni di istruzioni if e switch.
16Lucio Zambon
®Introduzione a Matlab
Esempio BREAKi = 1for x = [-5:0.1:5]
if x == 0, i, break, endy(i) = 1/x;i = i + 1;
end
17Lucio Zambon
®Introduzione a Matlab
CONTINUEInterrompe un'iterazione di un ciclo for o while e riprende dall'iterazione successiva.Nel caso di cicli annidati interrompe solo quello più interno in cui è contenuto.
18Lucio Zambon
®Introduzione a MatlabEsempio CONTINUEi = 0;for x = [-5:0.1:5]
i = i + 1;if x == 0
y(i) = NaN;continue
endy(i) = 1/x;
end
19Lucio Zambon
®Introduzione a MatlabRETURNInterrompe l'esecuzione di una funzioneEsempio:function d = det(A)
if isempty(A)d = 1;return
else...
end
20Lucio Zambon
®Introduzione a MatlabAltri comandi utilitic toc serve a rilevare il tempo di esecuzione di una frazione di codice profile analizza il tempo di esecuzione di tutte le funzioni utilizzatepause sospende l'esecuzione in attesa che l'utente prema un tastoclc cancella la command window
21Lucio Zambon
®Introduzione a MatlabRicorsioneUna funzione può richiedere al suo interno l'esecuzione di altre funzioni, ma anche di se stessa. L'invocazione ricorsiva di una funzione deve essere contenuta in una condizione d'uscita pena l'iterazione infinita. Esempio: function y = fatt(x)
y = 1; if x>0
y = x * fatt(x-1);end