Информатика -продвинутый курс



         

ЗАКОНЫ ПОДОБИЯ - часть 5


Function Ff(I : Integer; X : Real; Y : G) : Real;

{описание правых частей дифференциальных уравнений}

Begin

Case I Of

1: Ff:=-A1*Sinus*Y[l]-Bl*Sinus*Sqrt(Sqr(Y(l])+Sqr(Y[2]))*Y[1];

2: Ff:=-Sinus-A1*Sinus*Y[1]-B1*Sinus*Sqrt(Sqr(Y(1])+Sqr(Y[2]))*Y[2];

3: Ff:=Y[1]/(2*Cosinus);

4: Ff:=2*Y[2]/Sinus

End

End;

Procedure Runge_Kut (N: Integer; Var X: Real; Y0: G; Var Y: G; Н: Real);

(метод Рунге-Кутта четвертого порядка)

Var I : Integer; Z, K1, K2,

КЗ, К4 : G;

Procedure Right(X : Real; Y : G; Var F : G) ;

{вычисление правых частей дифференциальных уравнений}

Var I : Integer;

Begin

For I := 1 To N Do F[I] := Ff(I, X, У)

  End;

Begin Right(X, Y0, K1); X := X + Н / 2;

 For I := 1 To N Do Z[I]:=Y0[I]+H*K1[I]/2; Right(X, Z, K2);

For I := 1 To N Do Z[I]:=YO[I]+H*K2[I]/2; Right(X, Z, КЗ); Х:=Х+Н/2;

For I := 1 To N Do Z[I] := Y0[I] + H * КЗ [I]; Right (X, Z, К4);

For I := 1 To N Do

Y[I]:=Y0[I]+H*(K1[I]+2*K2[I]+2*K3[I]+K4[I])/6;

End;

{следующий блок - для получения численных результатов при одном наборе параметров}

{Begin

Sinus := Sin(Al); Cosinus := Cos(Al); Al := A; Bl := B; ClrScr;

N:=4; X0:=0; Y0[l]:=Cosinus; Y0[2]:=Sinus; Y0[3]:=0; Y0[4]:=0;

WriteLn(' время скорость координаты');

WriteLn; X := Х0; Xpr := 0; Y[4] := Y0[4];

While Y[4] >= 0 Do

Begin

If X >= Xpr Then

Begin

WriteLn ('t=', X : 6 : 3, ' Vx='. Y0[l] : 6 : 3, ' Vy=',

Y0[2] : 6 : 3. ' X=', y0[3] : 6 : 3, ' Y=', Y0[4] : б

: 3) ;

Xpr := Xpr + Hpr

End;

Runge_Kut(N, X, Y0, Y, H); Y0 := Y

End;

WriteLn; WriteLn('для продолжения нажмите любую клавишу');

Repeat Until KeyPressed

End.}

{следующий блок - для изображения траекторий при нескольких наборах параметров)

Begin

DetectGraph (J, M); InitGraph (J, M, '');

L := 1; Al := A; Bl := В; Sinus := Sin(Al); Cosinus := Cos(Al);

While L < 5 Do

Begin

N

:= 4; (Количество уравнений в системе)

Х0 := 0; Y0[l] := Cosinus; (Начальные условия}

Y0[2] := Sinus; Y0[3] := 0; Y0[4] := 0:

SetColor(L); Line(400, 50 + 20 * (L - 1), 440, 50 + 20 * (L - 1));




Содержание  Назад  Вперед