Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_к_ВП-1.doc
Скачиваний:
4
Добавлен:
27.09.2019
Размер:
840.7 Кб
Скачать

Проверка выполнения программы

Как видно из проверки, результаты таблицы совпадают с результатами вычислений. Следовательно, программа выполнена правильно.

Пример 4.1.

{Решение диф. уравнения методом Рунге-Кутта 4-го порядка}

Program Runge;

Const Y1 = 0.0; (* начальное значение функции *)

Y2 = 1./9.; (* начальное значение производной *)

Xbgn = 0.0; (* начало отрезка интегрирования *)

Xend = 3.0; (* конец отрезка интегрирования *)

shag = 0.1; (* шаг интегрирования *)

eps = 0.0001;(* погрешность*)

Type

IntType = Integer; {базовый целый тип}

RealType = Real; {базовый вещественный тип}

Vec = Array [1..2] of RealType; {векторный тип}

Var

X, h: RealType;

Y : Vec;

Out : Text;

Procedure Proizvod (x : RealType ; Var Y,F : Vec) ;

{Подпрограмма вычисления производных}

Begin

F[1]:= Y[2];

F[2]:= - 0.08*Exp(-2.5*x);

End ; {Proisvod}

Procedure Roonge_Koott (N : IntType; x, h: RealType ; Var Y : Vec ) ;

{Реализация метода Рунге-Кутта 4-го порядка}

{N - порядок системы уравнений}

Var

I, j : IntType;

H1, H2, Q : RealType;

Y0, Y1, F : Vec;

Begin

H1:= 0.0;

H2:= h/2.0;

For i:= 1 to N do

begin

Y0[i]:= Y[i];

Y1[i]:= Y[i];

end;

For j:= 1 to 4 do

begin

Proizvod(x+H1,Y,F);

If j = 3 Then H1:= h

else H1:= H2;

For i:= 1 to N do

begin

Q:= H1 * F[i];

Y[i]:= Y0[i] + Q;

If j = 2 Then Q:= 2 * Q;

Y1[i]:= Y1[i] + Q/3.0;

end;

end;

For i:= 1 to N do Y[i]:= Y1[i];

End ;

Begin

Assign(Out,'D:\FORTRAN\PRAC_F77\СИДНЕНКО\runge-4p.rez'); Rewrite(Out);

WriteLn(Out,'┌───────────┬───────────┬───────────┐');

WriteLn(Out,'│ * X * │* Y1-fun * │* Y2-pro * │');

WriteLn(Out,'├───────────┼───────────┼───────────┤');

Y[1]:= Y1;

Y[2]:= Y2;

x:= Xbgn;

h:= shag;

While (x <= Xend) and (h > 0.0) do

begin

WriteLn(Out,'│ ',x:7:4,' │ ',Y[1]:7:4,' │ ',Y[2]:7:4,' │');

Roonge_Koott (2, x, h, Y) ;

x:= x + h;

end;

WriteLn(Out,'└───────────┴───────────┴───────────┘');

Close(Out);

end.

Пример 4.2.

{$N+}

{Решение диф. уравнения методом Рунге-Кутта 4-го порядка}

Program Run_pas;

Const

A = 0.16;

Xbgn = 0.0; { начало отрезка интегрирования }

Xend = 3.0; { конец отрезка интегрирования }

eps = 0.1E-6; { погрешность }

N = 2; { порядок системы диф. уравнений }

h = 0.1; { шаг интегрирования }

Y10 = 0.0; { начальное значение функции }

Y20 = 1./17; { начальное значение производной }

Constant: Array[1..4] of Real=(0, 0.5, 0.5, 1.0);

{NameOut = 'run-p.out';}

NameOut = 'D:\FORTRAN\PRAC_F77\Var_Tkal\Runge\run-p.out';

Type

IntType = LongInt; {базовый целый тип}

RealType = Extended; {базовый вещественный тип}

Vec = Array [1..2] of RealType; {векторный тип}

TypeKoeff= Array [0..4,1..2] of RealType;

Var

M : IntType;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]