2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Метод Рунге-Кутта для система дифференциальных уравнений
Сообщение16.07.2021, 08:41 
Аватара пользователя


26/09/13
648
Таджикистан
Здравствуйте, помогите пожалуйста разобраться.
Дано система дифференциальных уравнений
$$
\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 
Заслуженный участник
Аватара пользователя


20/01/06
1037
а какую выдает ошибку?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group