Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program adamsa; //наша цель решить обыкновенное дифференциальное уравнение методом Адамса(двухшаговым)
- h = 0.05; //шаг
- var a, b, k1, k2, k3, k4, delta:real;
- n:integer;
- x, y, yt:array[0. .100] of real;
- //функция которая дана мне в таблице 6
- function f (x1, y1: real):real;
- begin
- f:= x1*y1;
- end;
- begin
- b:= 1; //конец интервала
- a:= 0; //начало интервала
- x[0]:= 0; //начальное условие x
- y[0]:= 1; //начальное условие y
- k1:= f (x[0], y[0]);
- k2:= f (x[0] + h / 2, y[0] + (h / 2) * k1);
- k3:= f (x[0] + h / 2, y[0] + (h / 2) * k2);
- k4:= f (x[0] + h, y[0] + h * k3);
- y[1]:= y[0] + (h / 6) * (k1 + 2 * (k2 + k3) + k4); //четырёхэтапная схема метода Рунге-Кутта нужна для вычисления "начального отрезка"
- yt[0]:= exp (x[0]);
- delta:= abs (yt[0] - y[0]);
- x[1]:= x[0] + h;
- writeln ('x0=', x[0]);
- writeln ('y0=', y[0]);
- writeln ('yt0=', yt[0]);
- writeln ('delta=', delta);
- for n := 1 to 100 do
- begin
- if x[n] >= b + h / 2 //если наш x будет больше конца интервала то прекращаем вычисления
- then break;
- y[n + 1]:= y[n] + (h / 2) * (3 * f (x[n], y[n]) - f (x[n - 1], y[n - 1]));
- x[n + 1]:= x[n] + h;
- yt[n]:= x[n];
- delta:= abs (yt[n] - y[n]);
- writeln ('y=', y[n]: 7: 15, ' ', 'x=', x[n]: 7: 15, ' ', 'yt=', yt[n]: 7: 15, ' ', 'delta=', delta: 7:15);//метод Адамса(двухшаговый)
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement