Metody numeryczne, Sprawko, Rafał Kudelski Gr


Rafał Kudelski Gr. 4

Mamy rozwiązać równanie przy danych warunkach początkowych x0x01 graphic

i y(0)=1

0x01 graphic
= -tg(x) * y

Rozwiązanie analityczne

0x01 graphic

ln|y| =0x01 graphic

ln|y| = ln|cosx|+C1 |e0x01 graphic
0x01 graphic

|y| = e ln |cosx| * eC0x01 graphic

y = 0x01 graphic
e C0x01 graphic
* cosx

y = C + cosx

Z warunków początkowych

y(0) = 1

1 = C + cos 0

C = 1

y = cos x

Opis i porównanie metod

Metoda Eulera (metoda siecznych) jest najprostszą metodą przybliżoną dla zagadnienia początkowego
0x01 graphic
     x0x01 graphic
    0x01 graphic
                                                                      

z warunkiem początkowym
y(x0)=y0

Ogólny wzór tej metody ma postać yi+1=yi+hf(xi,yi), i=0,1,2,...,     gdzie h - krok.

Klasyczna metoda Rungea-Kutty czwartego rzędu opiera się na wzorach:

k1=hf(xi,yi)

k2=hf(xi+h/2,yi+k1/2)

k3=hf(xi+h/2,yi+k2/2)

k4=hf(xi+h,yi+k3)

y(i+1)=y(i)+((k1+2*k2+2*k3+k4)/6)

Łatwo zauważyć, że metoda Eulera jest to metoda Rungea-Kutty ale pierwszego stopnia.

Program w Matlabie

Program oblicza nam równanie różniczkowe 0x01 graphic
= -tg(x) * y metodą Eulera oraz metoda Rungea-Kutty. Następnie rysuje wykres funkcji rzeczywistej (obliczonej metodą analityczną) oraz wykres funkcji obliczona metoda Eulera i metoda Rungea-Kutty. Dalej program oblicza błędy oby metod i przedstawia na wykresie. Program wywołujemy wraz z parametrem który jest wielkością kroku.

M-plik programu:

function[X,Y]=row2(c)

x=0:c:3

y(1)=1;

for i=1:(length(x)-1)

k1=c*obliczk(x(i),y(i));

k2=c*obliczk(x(i)+0.5*c,y(i)+0.5*k1);

k3=c*obliczk((x(i)+0.5*c),(y(i)+0.5*k2));

k4=c*obliczk((x(i)+c),(y(i)+k3));

y(i+1)=y(i)+((k1+2*k2+2*k3+k4)/6);

end

y

figure(4);

plot(x,y);

title('Funkcja wyliczona metoda Rungea-Kutty');

r=cos(x)

ye(1)=1;

for i=1:(length(x)-1)

ye(i+1)=ye(i)+c*(-tan(x(i))*ye(i));

end

ye

figure(1);

plot(x,ye);

title('Funkcja wyliczona metoda Eulera');

figure(2);

fplot('cos(x)',[0 3])

title('Funkcja rzeczywista');

for i=1:((3/c)+1)

be(i)=(abs(r(i)-ye(i)))/r(i);

end

be

figure(3);

plot(x,be);

title('Blad metody Eulera');

for i=1:((3/c)+1)

b(i)=(abs(r(i)-y(i)))/r(i);

end

b

figure(5);

plot(x,b);

title('Blad metody Rungea-Kutty');

Program obliczk:

function[A]=obliczk (x,y)

A=-(tan(x)*y);

Błąd metody jest liczony zgodnie ze wzorem:

błąd = (|wartość rzeczywista - wartość obliczona|)/wartość rzeczywista

Wyniki działania programu.

Dla h = 1

>> row2(1)

x =

0 1 2 3

y =

Column 1

1

Column 2

0.529040511929454

Column 3

2.9495999335963

Column 4

7.03252270563991

r =

Column 1

1

Column 2

0.54030230586814

Column 3

-0.416146836547142

Column 4

-0.989992496600445

ye =

Column 1

1

Column 2

1

Column 3

-0.557407724654902

Column 4

-1.77536582311576

be =

Column 1

0

Column 2

0.850815717680925

Column 3

-0.33944962619404

Column 4

-0.793312403086112

b =

Column 1

0

Column 2

0.0208435052310028

Column 3

-8.08788262832837

Column 4

-8.10361212816161

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

dla h=0.1 podaje tylko wykresy jakie zwrócił program ponieważ obliczeń jest bardzo dużo i nie ma sensu ich tu wstawiać oraz pomijam funkcje rzeczywista gdyż jest taka sama.

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

dla h = 0.001 podobnie jak w poprzednim przypadku podaje tylko 4 wykresy

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

Z wykresów widać, że dla h = 1 wykresy zarówno w metodzie Eulera jak i w metodzie Rungea -Kutty odbiegają od wykresu funkcji rzeczywistej oraz występują duże błędy.

Wraz ze zmniejszaniem się wartości h wykresy staja się coraz dokładniejsze. Dla h = 0.1 wykres funkcji obliczony metodą Rungea - Kutty jest niemal już idealny. W tym przypadku dokładnie widać ze metoda Rungea - Kutty jest bardziej dokładna niż metoda Eulera ponieważ wykres wykonany w metodzie Eulera odbiega dużo bardziej od rzeczywistego niż wykres wykonany w metodzie Rungea - Kutty. Obserwujemy także zmniejszanie się błędu.

Dla h = 0.001 wykresy funkcji są niemal identyczne jak wykres funkcji rzeczywistej w obydwu metodach. Błędy metody są także znikome choć najmniejsze są w przypadku metody Rungea-Kutty.



Wyszukiwarka