18.01.2015 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!