Скачиваний:
17
Добавлен:
02.05.2014
Размер:
1.56 Кб
Скачать
unit Runge;

interface
type
Vector=array [1..4] of Extended;

Function q(time:Extended) : Extended;
Function Dq(time:Extended) : Extended;
Procedure Deriv(time:Extended; x:Vector; var Dx:Vector);
procedure RK(t,h:Extended; Y:Vector; var DY:Vector);

var
m1,m2,c1,c2,k1,k2:Extended;
tk,t,h, q0,omega_q:Extended;
omega1,omega2:Extended;
ksi1,ksi2:Extended;
eta1,eta2:Extended;
gamma:Extended;

implementation

uses Perturb;

var
KK1,KK2,KK3,KK4:Vector;

Function q(time:Extended) : Extended;
begin
Result:=QQ[Trunc(time/h)];
end;

Function Dq(time:Extended) : Extended;
begin
Result:=QQ[Trunc(time/h)+1];
end;

Procedure Deriv(time:Extended; x:Vector; var Dx:Vector);
begin
Dx[1] := x[2];
Dx[2] :=-eta1*(x[2]-x[4])-sqr(omega1)*(x[1]-x[3]);
Dx[3] := x[4];
Dx[4] := gamma*(eta1*(x[2]-x[4])+sqr(omega1)*(x[1]-x[3]))-
eta2*(x[4]-Dq(time))-sqr(omega2)*(x[3]-q(time));
end;

procedure RK(t,h:Extended; Y:Vector; var DY:Vector);
var
tY:Vector;
i:integer;
begin
for i:=1 to 4 do
tY[i]:=Y[i];
Deriv(t,tY,KK1);

for i:=1 to 4 do
tY[i]:=Y[i]+h/2*KK1[i];
Deriv(t+h/2,tY,KK2);

for i:=1 to 4 do
tY[i]:=Y[i]+h/2*KK2[i];
Deriv(t+h/2,tY,KK3);

for i:=1 to 4 do
tY[i]:=Y[i]+h*KK3[i];
Deriv(t+h,tY,KK4);

DY[1]:=Y[1]+h/6*(KK1[1]+2*KK2[1]+2*KK3[1]+KK4[1]);
DY[2]:=Y[2]+h/6*(KK1[2]+2*KK2[2]+2*KK3[2]+KK4[2]);
DY[3]:=Y[3]+h/6*(KK1[3]+2*KK2[3]+2*KK3[3]+KK4[3]);
DY[4]:=Y[4]+h/6*(KK1[4]+2*KK2[4]+2*KK3[4]+KK4[4]);
end;

end.
Соседние файлы в папке Монте_Карло(3)
  • #
    02.05.20142.44 Кб17Project1.dof
  • #
    02.05.2014277 б17Project1.dpr
  • #
    02.05.20144.53 Кб17Project1.dsk
  • #
    02.05.2014876 б17Project1.res
  • #
    02.05.20142.37 Кб17Runge.dcu
  • #
    02.05.20141.56 Кб17Runge.pas