Новичок
Регистрация: 02.10.2019
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
ну или немного переделанный вариант, который работает, но выдает неправильные значения
Код:
Const
x0 = 0;
y0 = 1;
z0 = 0;
v0 = 0;
h = 0.1;
x_max = 2;
Var
X, Y, Z, Y1, Z1, C, C1: real;
i,N:integer;
Function f(x, y, z: real): real;
begin
f := x + x * y * y - z * z;
end;
Function g(x, y, z: real): real;
begin
g := x + x * y * y - z * z;
end;
Function v(x, y, z: real): real;
begin
v := z;
end;
Procedure RK(x, y, z: real; var Uy: real; var Uz: real; var Uv: real);
var k1, k2, k3, k4, q1, q2, q3, q4, p1, p2, p3, p4:real;
begin
k1 := h * f(x, y, z);
q1 := h * g(x, y, z);
p1 := h * v(x, y, z);
k2 := h * f(x + h / 2, y + q1 / 2, z + k1 / 2);
q2 := h * g(x + h / 2, y + q1 / 2, z + k1 / 2);
p2 := h * v(x + h / 2, y + q1 / 2, z + k1 / 2);
k3 := h * f(x + h / 2, y + q2 / 2, z + k2 / 2);
q3 := h * g(x + h / 2, y + q2 / 2, z + k2 / 2);
p3 := h * v(x + h / 2, y + q2 / 2, z + k2 / 2);
k4 := h * f(x + h, y + q3, z + q3);
q4 := h * g(x + h, y + q3, z + q3);
p4 := h * v(x + h, y + q3, z + q3);
Uz := z + (k1 + 2 * k2 + 2 * k3 + k4) / 6;
Uy := y + (q1 + 2 * q2 + 2 * q3 + q4) / 6;
Uv := z + (p1 + 2 * p2 + 2 * p3 + p4) / 6;
end;
Begin
N := Round((x_max - x0) / h);
X := x0;
Y := y0;
Z := z0;
C := v0;
Writeln('x= ', X:4:2, ' y= ', Y:8:5);
For i:=1 to N do
begin
RK(X, Y, Z, C, Y1 , Z1);
X := X + h;
Y := Y1;
Z := Z1;
C := C1;
Writeln('x= ', X:4:2, ' y= ', Y:8:5);
end;
Readln
End.
|