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
var
KK1,KK2,KK3,KK4:Vector;

Function q(time:Extended) : Extended;
begin
Result := q0 * sin(omega_q * time);
end;

Function Dq(time:Extended) : Extended;
begin
Result := q0 * omega_q * cos(omega_q * time);
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.
Соседние файлы в папке Моделирование_внешней_среды(2)
  • #
    02.05.2014434 б17Project1.cfg
  • #
    02.05.20142.02 Кб17Project1.dof
  • #
    02.05.2014242 б17Project1.dpr
  • #
    02.05.2014876 б17Project1.res
  • #
    02.05.20142.28 Кб17Runge.dcu
  • #
    02.05.20141.56 Кб17Runge.pas
  • #
    02.05.20149.1 Кб17Unit1.dcu
  • #
    02.05.201451 б17Unit1.ddp
  • #
    02.05.201413.89 Кб17Unit1.dfm
  • #
    02.05.20143.62 Кб17Unit1.pas