Appunti di Calcolo Numerico - Esercizi e Dispense - Università degli ...
Appunti di Calcolo Numerico - Esercizi e Dispense - Università degli ...
Appunti di Calcolo Numerico - Esercizi e Dispense - Università degli ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
12.9. Applicazioni <strong>di</strong> MATLAB® nel <strong>Calcolo</strong> <strong>Numerico</strong><br />
% E s e r c i z i o sull ’ i n s t a b i l i t a ’ numerica<br />
% calcolo dell ’ i n t e g r a l e y_n= int_0^1 x^n / ( x+10) dx<br />
%<br />
% y i n s t : v e t t o r e con i v a l o r i dell ’ algoritmo i n s t a b i l e<br />
% y s t : v e t t o r e con i v a l o r i dell ’ algoritmo s t a b i l e<br />
%<br />
% algoritmo i n s t a b i l e<br />
%<br />
y inst (1)= log (11) −log ( 1 0 ) ; %corrisponde al valore i n i z i a l e<br />
for i =1:30<br />
y inst ( i +1)= 1/ i −10* y inst ( i ) ;<br />
end<br />
%<br />
% algoritmo s t a b i l e<br />
% s i r i c hiede che i l valore dell ’ i n t e g r a l e y_n1 s i a approssimato<br />
% con una accuratezza data dal valore <strong>di</strong> input t o l<br />
n1= input (’ in<strong>di</strong>ce n1’ ) ;<br />
t o l =input (’ tolleranza tol’ ) ;<br />
k= −log10 ( t o l ) + n1 ;<br />
k= f i x ( k + 1 ) ; % f i x e ’ una function che e f f e t t u a l ’ arrotondamento<br />
% del numero in modo da avere un valore intero<br />
yst ( k ) = 0 ;<br />
for j =k−1:−1:1<br />
yst ( j ) =1/10*(1/ j − yst ( j + 1 ) ) ;<br />
end<br />
Uno volta eseuito lo script, nella Command Window si hanno i due vettori che possono essere confrontati<br />
tra loro. Il valore iniziale y 0 si avrà nella prima componente dei vettori che vengono creati. Perciò si faccia<br />
attenzione agli in<strong>di</strong>ci utilizzati (per yst si usa j e j+1: perchè).<br />
Volendo, si può mo<strong>di</strong>ficare lo script facendo uso della function <strong>di</strong> MATLAB® single che converte il<br />
risultato in singola precisione in modo da confrontare i due algoritmi con i calcoli in singola precisione.<br />
% y i n s t s i n g : v e t t o r e dell ’ algoritmo i n s t a b i l e lavorando<br />
% in singola precisione<br />
% y s t s i n g : v e t t o r e dell ’ algoritmo s t a b i l e lavorando<br />
% in singola precisione<br />
yinstsing (1)= single ( log ( 1 1 ) ) −single ( log ( 1 0 ) ) ;<br />
for i =1:30<br />
yinstsing ( i +1)= single (1/ i ) −single (10* yinstsing ( i ) ) ;<br />
end<br />
n1= input (’ in<strong>di</strong>ce n1’ ) ;<br />
t o l =input (’ tolleranza tol’ ) ;<br />
k= −log10 ( t o l ) + n1 ;<br />
k= f i x ( k + 1 ) ;<br />
ystsing ( k ) = 0 ;<br />
for j =k−1:−1:1<br />
ystsing ( j ) = single (1/10)* single (1/ j − ystsing ( j + 1 ) ) ;<br />
end<br />
Come si può osservare dalle Figure 12.4 e 12.5, i risultati ottenuti dall’algoritmo instabile cambiano a seconda<br />
che si usi o meno la function single mentre abbiamo gli stessi risultati (consideriamo le cifre corrette in<br />
singola precisione, usando il formato format short e) per l’algoritmo stabile.<br />
12.9.2 Sull’interpolazione e approssimazione <strong>di</strong> dati<br />
In MATLAB® esistono già delle function che permettono <strong>di</strong> interpolare e approssimare delle serie <strong>di</strong> dati.<br />
C’è la function polyfit che, dati i vettori contenenti le ascisse e le or<strong>di</strong>nate da interpolare o approssimare,<br />
<strong>di</strong> <strong>di</strong>mensione n, e il grado m del polinomio che si vuole creare, fornisce in output il vettore contenente i<br />
195