Laboratorium do wykładu 7

## Zastosowanie wzoru Taylora

Ćwiczenie 1.

Będę stosował wzór Taylora ze str. 6. We wzorze tym występują pochodne z funkcji y od pierwszej do czwartej. Oznaczę je  odpowiednio: d1y, d2y,d3y i d4y. Prawa strona wzoru przyjmuje teraz postać:

p:y+h*d1y+1/2*h^2*d2y+1/6*h^3*d3y+1/24*h^4*d4y

W zadaniu mam podany krok

h:0.05;

Definiję teraz poszczególne pochodne. Pierwszą pochodną mam daną w równaniu, które rozwiązuję

d1y:cos(x)-sin(y)+x^2;

Pozostałe pochodne muszę wyliczyć.

d2y:-sin(x)-d1y*cos(y)+2*x;
d3y:-cos(x)-d2y*cos(y)+(d1y)^2*sin(y)+2;
d4y:sin(x)-d3y*cos(y)+3*d1y*d2y*sin(y)+(d1y)^3*cos(y);

i:0;

Zapisuję warunek początkowy

x[0]:-1;
y[0]:3;

Dla uproszczenia zapisu oznaczam te wartości początkowe przez x i y.

x:x[0];
y:y[0];

Pochodne teraz przyjmują konkretne wartości:

d1y:d1y,numer;
d2y:d2y,numer;
d3y:d3y,numer;
d4y:d4y,numer;

Wartość funkcji y(x+h) obliczana ze wzoru Taylora przyjmuje teraz wartość

p:y+h*d1y+1/2*h^2*d2y+1/6*h^3*d3y+1/24*h^4*d4y;

Obliczam wartości rozwiązania w zależności od parametru i.

iter(i):=block([p],x:x[i],y:y[i],d1y:d1y,d2y:d2y,d3y:d3y,d4y:d4y,p:y+h*d1y+1/2*h^2*d2y+1/6*h^3*d3y+1/24*h^4*d4y,
i:i+1,x[i]:x+h,y[i]:p,return(p))$

Wypisuję kolejnych 40ści wartości przybliżających rozwiązanie w zadanym przedziale.

for i:0 thru 39 do print(i+1,x[i+1],iter(i));

kill(all);

## Zastosowanie wzoru Eulera

Ćwiczenie 2.

Stosuję wzór Eulera ze str. 9. 

W zadaniu mam podany krok

h:0.01;

Zapisuję warunek początkowy

x[0]:0;
y[0]:1;

x:x[0];
y:y[0];

Wartość funkcji y(x+h) obliczana ze wzoru Eulera przyjmuje teraz wartość

p:y+h*(1-4*y);

iter(i):=block([p],x:x[i],y:y[i],p:y+h*(1-4*y),i:i+1,x[i]:x+h,y[i]:p,return(p))$

Wypisuję rozwiązanie przybliżone porównując je jednocześnie z dokładnym rozwiązaniem: y=1/4(3e^(-4x)+1).

for i:0 thru 199 do print(i+1,x[i+1],iter(i),1/4*(3*%e^(-4*x[i+1])+1));

kill(all);

Ćwiczenie 3.

Stosuję wzór Eulera ze str. 9. 

W zadaniu mam podany krok

h:0.005;

Zapisuję warunek początkowy

x[0]:0;
y[0]:3;

x:x[0];
y:y[0];

Wartość funkcji y(x+h) obliczana ze wzoru Eulera przyjmuje teraz wartość (w pierwszym kroku):

p:y+h*(-y*log(y)),numer;

iter(i):=block([p],x:x[i],y:y[i],p:y+h*(-y*log(y)),i:i+1,x[i]:x+h,y[i]:p,return(p))$

Wypisuję rozwiązanie przybliżone.

for i:0 thru 199 do print(i+1,x[i+1],iter(i)),numer;

kill(all);

## Wzory Rungego-Kutty

Ćwiczenie 4.

Stosuję wzór Rungego-Kutty ze str. 11. 

W zadaniu mam podany krok

h:0.02;

Zapisuję warunek początkowy

x[0]:0;
y[0]:0.5;

x:x[0];
y:y[0];

Definiuję prawą stronę naszego równania:

f(x,y):=-y*log(y);

Definuję funkcje składowe:

F1(x,y):=h*f(x,y);
F2(x,y):=h*f(x+h,y+F1(x,y));

Wartość funkcji y(x+h) obliczana ze wzoru Rungego-Kutty drugiego rzędu przyjmuje w pierwszym kroku wartość:

p:y+1/2*(F1(x,y)+F2(x,y));

iter(i):=block([p],x:x[i],y:y[i],p:y+1/2*(F1(x,y)+F2(x,y)),i:i+1,x[i]:x+h,y[i]:p,return(p))$

Wypisuję rozwiązanie przybliżone.

for i:0 thru 49 do print(i+1,x[i+1],iter(i)),numer;

kill(all);

Ćwiczenie 5.

Stosuję wzór Rungego-Kutty ze str. 11. 

W zadaniu mam podany krok

h:1/128;

Zapisuję warunek początkowy

x[0]:1;
y[0]:2;

x:x[0];
y:y[0];

Definiuję prawą stronę naszego równania:

f(x,y):=(x*y-y^2)/(x^2);

Definuję funkcje składowe:

F1(x,y):=h*f(x,y);
F2(x,y):=h*f(x+1/2*h,y+1/2*F1(x,y));
F3(x,y):=h*f(x+1/2*h,y+1/2*F2(x,y));
F4(x,y):=h*f(x+h,y+F3(x,y));

Wartość funkcji y(x+h) obliczana ze wzoru Rungego-Kutty czwartego rzędu przyjmuje w pierwszym kroku wartość:

p:y+1/6*(F1(x,y)+2*F2(x,y)+2*F3(x,y)+F4(x,y)),numer;

iter(i):=block([p],x:x[i],y:y[i],p:y+1/6*(F1(x,y)+2*F2(x,y)+2*F3(x,y)+F4(x,y)),i:i+1,x[i]:x+h,y[i]:p,return(p))$

Wypisuję rozwiązanie przybliżone.

for i:0 thru 255 do print(i+1,x[i+1],iter(i)),numer;

kill(all);