Musiał Wojciech gr31 IMIR
Sprawozdanie z laboratorium 26.11.09
Różniczkowanie Numeryczne
Zadanie: Znaleźć rozwiązanie funkcji: = y warunki początkowe: y(0)=0,
Kod programu obliczającego równanie metodą Eulera i Rungego-Kutty II, oraz liczącego wartości błędów przybliżeń poszczególnych metod.:
a) m-plik z zapisaną funkcją:
function [f02]=f(x,y)
f02=y;
b) m-plik z równaniem Rungego-Kutty:
function [rkm]=RKI(x,y,h)
k1=h*funkcja(x,y);
k2=h*funkcja(x+h,y+k1);
rkm=y+0.5*(k1+k2);
c) m-plik z rozwiązaniem
clear all
a=0
b=2 %a,b - przedział różniczkowania
x0=0
y0=1 %x0, y0 - wartoœci początkowe
for k=1:100
n(k)=k*10
h=(b-a)/n(k)
x=a:h:b
y(1)=y0
yrkm(1)=y0
for i=2:length(x)
y(i)=y(i-1)+h*funkcja(x(i-1),y(i-1)); %metoda Eulera
yrkm(i)=RKI(x(i-1),yrkm(i-1),h); %metoda Rungego-Kutty
end
z=exp(x) %wartość dokładna funkcji
Eeu(k)=sqrt(((sum(z-y)).^2)/length(z)) %błąd metody Eulera
Erk(k)=sqrt(((sum(z-yrkm)).^2)/length(z)) %błąd metody R-K
end
figure(1)
plot(x,y)
title('Wynik metody Eulera')
grid
figure(2)
plot(x,z)
title('Dokladny wynik funkcji')
grid
figure(3)
plot(x,yrkm)
title('Wynik metody Rungego-Kutty')
grid
figure(4)
plot(x,y,x,z, x,yrkm)
title('Zestawienie wszystkich trzech wynikow')
grid
figure(5)
plot(n,Eeu)
title('Blad metody Eulera')
grid
figure(6)
plot(n,Erk)
title('Blad metody Rungego-Kutty')
grid
figure(7)
plot(n,Eeu,'r', n,Erk,'g')
title('Porownanie bledu obu metod')
text(500, 1.3,'czerwony - blad m. Eulera')
text(500, 1.1,'zielony - blad m.R-K')
grid
Wynik działania programu:
Wnioski:
Na
wykresie porównującym błędy przybliżeń obu metod bardzo dobrze
widać że najdokładniejsza i najszybsza jest metoda Rungego-Kutty
II. Metoda Eulera okazuje się metodą czasochłonną, z dużo
większym błędem niż R-K II. Pomimo dużego podziału (n=1000)
błąd metody Eulera jest wciąż znacznie większy niż w metodzie
R-K (różnica ponad 0.1)