Matlab Parte6 PDF
Matlab Parte6 PDF
di Programmazione
A.A. 2013-2014
Introduzione al MatLab
VI parte
1
Docente: Vittoria Bruni
Email: [email protected]
2
Il materiale didattico è disponibile sul sito http://ingaero.uniroma1.it/
nella pagina dedicata al corso Metodi Numerici con elementi di
Programmazione
3
Files .m
Matlab permette di definire nuove funzioni
Si crea il file di testo stat.m (nome del file in cui si memorizza la funzione)
con il seguente contenuto
-----------------------------------------------------------------------------------
function [mean,stdev]=stat(x)
% Calcola la media (mean) e la deviazione standard (stdev) degli
% elementi del vettore x
n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2)/n);
------------------------------------------------------------------------------------------------
E si chiama dal Command Window nel modo seguente
>>x=rand(50,1);
>>[mean,stdev]=stat(x);
Creazione di m-files
- Il nome della funzione deve sempre iniziare con una lettera dello
alfabeto, può contenere numeri e underscore ma non può contenere
spazi
-----------------------------------------------------------------------------------
function [mean,stdev]=stat(x)
% Calcola la media (mean) e la deviazione standard (stdev) degli elementi
% del vettore x (dato di input)
n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2)/n);
------------------------------------------------------------------------------------------------
Esempio
-----------------------------------------------------------------------------------
function [mean,stdev]=stat(x)
% Calcola la media (mean) e la deviazione standard (stdev) degli elementi
% del vettore x (dato di input)
n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2)/n);
------------------------------------------------------------------------------------------------
Esempio
Elenco delle variabili da restituire in
output
n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2)/n);
------------------------------------------------------------------------------------------------
Esempio
-----------------------------------------------------------------------------------
function [mean,stdev]=stat(x)
% Calcola la media (mean) e la deviazione standard (stdev) degli elementi
% del vettore x (dato di input)
-----------------------------------------------------------------------------------
function [mean,stdev]=stat(x)
% Calcola la media (mean) e la deviazione standard (stdev) degli elementi
% del vettore x (dato di input)
n = length(x);
mean = sum(x)/n;
Sequenza di istruzioni
stdev = sqrt(sum((x-mean).^2)/n);
------------------------------------------------------------------------------------------------
Definizione delle variabili
da restitutire in output
Esempio
Elenco delle variabili da restituire in
output
Nome della funzione (coincide al nome
dato al file .m)
Elenco delle variabili di input
-----------------------------------------------------------------------------------
function [mean,stdev]=stat(x)
% Calcola la media (mean) e la deviazione standard (stdev) degli elementi
% del vettore x (dato di input)
Per esempio la variabile n della funzione stat non sarà contenuta nella
lista delle variabili dello workspace perché non è uno degli output
function [mean,stdev]=stat(x)
% Calcola la media (mean) e la deviazione standard (stdev) degli elementi
% del vettore x (dato di input)
n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2)/n);
Esercizi
Scrivere una funzione che calcoli il fattoriale di un numero
intero n. Il nome della funzione è fatt
>> x = fun_eqlin(10,2);
>> disp(x)
0.2000
>> x = fun_eqlin(0,2);
equazione impossibile
>> x = fun_eqlin(0,0);
equazione indeterminata
21
Esercizio
Scrivere una function Matlab (fun_eq2grado) per il calcolo delle radici della
equazione di secondo grado ax2+bx+c=0
La funzione deve ricevere come input i tre coefficienti dell’equazione e
restituire come output le soluzioni
>> x=fun_eq2grado(0,3,2);
l'equazione e' di primo grado
>> disp(x)
-0.6667
>> x=fun_eq2grado(1,2,1);
>> disp(x)
-1.00000
>> x=fun_eq2grado(1,1,1);
le radici non sono reali
24
Function files
- Una funzione può contenere un’altra funzione (sotto-funzioni) mentre
uno script può solo richiamare funzioni memorizzate in altri file .m
Una sotto-funzione può essere richiamata solo dalla funzione
all’interno della quale è definita
function [mean,stdev]=stat(x) function [m] = calcola_media(x,n)
% Calcola la media (mean) e % calcola_media calcola il valor
% la deviazione standard (stdev) % medio degli elementi del vettore x
% di lunghezza n
% degli elementi del vettore x (input)
% INPUT
n = length(x); % x = vettore di numeri
mean = calcola_media(x,n); % n = lunghezza di x
stdev = calcola_stddev(x,n); %
% OUTPUT
% m = media degli elementi di x
function [st] = calcola_stddev(x,n) if length(x)=n,
mean = calcola_media(x,n); error(‘controllare la lunghezza di x’),
y = (x-mean).^2; end
m=sum(x)/n;
st = sqrt(calcola_media(y,n));
Function files
File stat.m File calcola_media.m
function [mean,stdev]=stat(x)
% Calcola la media (mean) e Sottofunzione della funzione stat.m
% la deviazione standard (stdev) • calcola_stdev non è un file .m,
% degli elementi del vettore x (input) non compare nella lista dei file
n = length(x); .m della directory di lavoro,
mean = calcola_media(x,n); • può essere usata solo all’interno
di stat.m
stdev = calcola_stddev(x,n);
non è riconosciuta all’esterno
28
Esercizio
29
Esercizio
function [xn,err1,err2,iter] = bisezione_fun (f,a,b,eps)
% [xn,err1,err2,iter] = bisezione_fun (f,a,b,eps)
% cerca la radice della funzione f nell'intervallo [a,b] con precisione eps
% utilizzando un doppio criterio di arresto
%
% INPUT
% f = espressione della funzione di cui si vuole cercare la radice
% a = estremo inferiore dell'intervallo in cui è stata isolata la radice
% b = estremo superiore dell'intervallo in cui è stata isolata la radice
% eps = limite superiore dell'errore da usare come criterio di arresto
%
% OUTPUT
% xn = approssimazione della radice
% err1 = |xn-x(n-1)| differenza in valore assoluto tra due approssimazioni
% successive
% err2 = f(xn) valore della funzione nell'approssimazione xn
% iter = numero di iterazioni eseguite
30
Esercizio
format long;
%inizializzazione dei parametri
iter = 0; err1 = b-a; err2 = 10^10;, x0=a;
33
Esercizio
34
Esercizio
35
36
37
Esercizio
38
Esercizio 1
39
40
41
42
43
Esercizio 2
44
45
46
47
48
49
50
Esercizi
51
Esercizi
52
Esercizio 1
53
54
55
56
57
58
Esercizio2
59
60
61
Dal Command Window
62
63
64
65
66
67
68
69
Esercizio
70
Esercizio
Per risolvere l’esercizio precedente è necessario prima risolvere il
seguente
71
Esercizio
72
73
74
75
76
77
78
79
80
81
Esercizio
82
83