Показать сообщение отдельно
Старый 03.10.2019, 20:15   #2 (permalink)
t13ka
Новичок
 
Регистрация: 02.10.2019
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я понял что в отличии от y'' в которой у нас два уравнения, мое решение будут отличаться лишь добавлением еще одного уравнения. Тогда ниже приклепил свое решение на бумаге и код который я попытался переделать из вашей программы
Код:
Const
 x0 = 0;
 y0 = 1;
 z0 = 0;
 v0 = 0;
 h = 0.1;
 x_max = 2;

Var
 X, Y, Z, Y1, Z1: 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 := v + (p1 + 2 * p2 + 2 * p3 + p4) / 6;
end;

Begin
 N := Round((x_max - x0) / h);
 X := x0;
 Y := y0;
 Z := z0;
 V := v0;
 Writeln('x= ', X:4:2, '    y= ', Y:8:5);
 For i:=1 to N do
  begin
   RK(X, Y, Z, V, Y1 , Z1, V1);
   X := X + h;
   Y := Y1;
   Z := Z1;
   V := V1;
   Writeln('x= ', X:4:2, '    y= ', Y:8:5);
  end;
 Readln
End.
Изображения
 
t13ka вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070