2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Метод Рунге-Кутта для система дифференциальных уравнений
Сообщение16.07.2021, 08:41 
Аватара пользователя
Здравствуйте, помогите пожалуйста разобраться.
Дано система дифференциальных уравнений
$$
\begin{align}
&\dfrac{dx}{dt}=-2x+5z,\\
&\dfrac{dy}{dt}=-(1-\sin(t))x-y+3z,\\ 
&\dfrac{dz}{dt}=-x+2z.
\end{align}
$$
c навчальними условиями $x_0=2, \quad y_0=1,\quad z_0=1$ с шагом $h=0,1$ на отрезке $[0;0.3].$

Требуется написать программу. Вот я написал программу на delphi 7.
Но не как не могу получит ответ. (Пожалуйста помогите).

Код:
var
  Form1: TForm1; y0, x0, z0, a, b, h: extended;
implementation

const t=0.05 ;
const N=5;
{$R *.dfm}

function f1(x,y,z:real):real;
begin
f1:=-2*x+5*z;
end;
function f2(x,y,z:real):real;
begin
f2:=-(1-sin(t)*x-y+3*z);
end;
function f3(x,y,z:real):real;
begin
f3:=-x+2*z;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
x,y,z,k1,x1,y1,z1,k2,y2,x3,z3, k3,y3,x2,z2,k4,dy,dx,dz:extended;
i,N:Integer;
begin
y0 := StrToFloat(Edit1.Text);
x0 := StrToFloat(Edit2.Text);
h  := StrToFloat(Edit3.Text);
a  := StrToFloat(Edit4.Text);
b  := StrToFloat(Edit5.Text);
z0 := StrToFloat(Edit6.Text);
Memo1.Lines.Add('Метод Рунге-Кутта');
Memo1.Lines.Add('i=0   x0='+FloatToStr(x0)+' y0='+FloatToStr(y0)+' z0='+FloatToStr(z0));
for i:=1 to N do
  begin
// Вычисляем K1
   k1:=h*f1(x,y,z);
   k1:=h*f2(x,y,z);
   k1:=h*f3(x,y,z);
   x1:=x+h/2;
   y1:=y+k1/2;
   z1:=z+k1/2;
// Вычисляем K1
   k2:=h*f1(x1,y1,z1);
   k2:=h*f2(x1,y1,z1);
   k2:=h*f3(x1,y1,z1);
   x2:=x+h/2;
   y2:=y+k2/2;
   z2:=z+k2/2;
// Вычисляем K1
   k3:=h*f1(x2,y2,z2);
   k3:=h*f2(x2,y2,z2);
   k3:=h*f3(x2,y2,z2);
   x3:=x+h;
   y3:=y+k3;
   z3:=z+k3;
   k4:=h*f1(x3,y3,z3);
   k4:=h*f2(x3,y3,z3);
   k4:=h*f3(x3,y3,z3);
   dy:=(k1+2*k2+2*k3+k4)/6;
   dx:=(k1+2*k2+2*k3+k4)/6;
   dz:=(k1+2*k2+2*k3+k4)/6;
   x:=x+dx;
   y:=y+dy;
   z:=z+dz;
   y:=y+h;
   x:=x+h;
   z:=z+h;
Memo1.Lines.Add('i=0;   dx='+FloatToStr(dx)+' dy='+FloatToStr(dy)+' dz='+FloatToStr(dz));
x0:=x; y0:=y; z0:=z;
end;
  end;
     end.



 
 
 
 Re: Метод Рунге-Кутта для система дифференциальных уравнений
Сообщение27.07.2021, 18:42 
Аватара пользователя
а какую выдает ошибку?

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group