Рассмотрим примеры программ, использующие методы цифрового интегрирования.
Пример 14.3. Вычислить интеграл, используя различные методы цифрового интегрирования. Процесс интегрирования оформить в виде подпрограммы.
Решение: Для вычисления интеграла целесообразно использовать подпрограмму - функцию.
При этом в тексте программы необходимо:
1) Включить директиву дальнего вызова {$F+} либо выполнить необходимые настройки в среде программирования т.к. из одной функции вызывается другая. (Подключить к тексту программы, используемые ею директивы можно с помощью клавиш Ctrl-OO).
2) Описать тип функции.
3) В списке формальных параметров сослаться на тип (т.е. использовать параметр -Funftion).
Текст программы
Program pr_intF;
{ Вычислить интеграл, используя различные методы цифрового
интегрирования. Процесс интегрирования оформить в виде подпрограммы}
Uses crt;
{$F+} {Директива поддерживающая дальний вызов подпрограмм}
Type par =function(x:real):real; {Описание типа функции}
Var C,D,Y :real;
n :integer;
Function F1(x:real):real;
begin
F1:=x;
end;
Function pnint(F:par; a,b:real;n:integer):real;
{Метод прямоугольников с недостатком}
Var
s,h :real;
i :integer;
Begin
h:=(b-a)/n; s:=0;
For i:=0 to n-1 do s:=s+f(a+i*h);
pnint:=h*s
End;
Function pkint(F:par; a,b:real;n:integer):real;
{Метод прямоугольников с избытком}
Var
s,h :real;
i :integer;
Begin
h:=(b-a)/n; s:=0;
For i:=1 to n do s:=s+f(a+i*h);
pkint:=h*s
End;
Function psint(F:par; a,b:real;n:integer):real;
{Метод прямоугольников по средней линии}
Var
s,h :real;
i :integer;
Begin
h:=(b-a)/n; s:=0;
For i:=1 to n do s:=s+f(a+i*h-h/2);
psint:=h*s
End;
Function tint(F:par; a,b:real;n:integer):real;
{Метод трапеций}
Var
s,h :real;
i :integer;
Begin
h:=(b-a)/n; s:=f(a)/2+f(b)/2;
For i:=1 to n-1 do s:=s+f(a+i*h);
tint:=h*s
End;
Function sint(F:par; a,b:real;n:integer):real;
{Метод Симпсона}
Var
s,h :real;
i :integer;
Begin
h:=(b-a)/n; s:=f(a)/2+f(b)/2;
if odd(n) then n:=n+1;
For i:=1 to n-1 do s:=s+(i mod 2+1)*f(a+i*h);
sint:=2*h*s/3
End;
Begin
ClrScr;
Writeln('Введите пределы интегрирования (C и D) а число подинтервалов n');
Readln (C,D,n);
{Y:=pnint(F1,C,D,n);}
{Y:=pkint(F1,C,D,n);}
Y:=psint(F1,C,D,n);
{Y:=tint(F1,C,D,n);}
{Y:=sint(F1,C,D,n);}
Writeln('Результат интегрирования' );
Writeln(' ':10,'Y=',Y:10);
Readln;
End.
Результат работы программы:
Введите пределы интегрирования (C и D) а число интервалов n
0 10 100
Результат интегрирования
Y= 5.000E+01