Скачиваний:
21
Добавлен:
02.05.2014
Размер:
2 Кб
Скачать
☆
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 Кб21Project1.dof
  • #
    02.05.2014277 б21Project1.dpr
  • #
    02.05.20145 Кб22Project1.dsk
  • #
    02.05.2014876 б21Project1.res
  • #
    02.05.20142 Кб21Runge.dcu
  • #
    02.05.20142 Кб21Runge.pas