Здравствуйте, помогите пожалуйста разобраться.
Дано система дифференциальных уравнений
c навчальними условиями
с шагом
на отрезке
Требуется написать программу. Вот я написал программу на 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.