Результаты выполнения илллюстрирующей программы для
SРLINE & SEVAL
Arg SEVAL's value Exact value Rel error
U= 1.00 S= 0.84147098 T= 0.84147098 Err=0.0000
U= 1.20 S= 0.95473538 T= 0.93203909 Err=0.0244
U= 1.40 S= 1.01250015 T= 0.98544973 Err=0.0274
U= 1.60 S= 1.02041537 T= 0.99957360 Err=0.0209
U= 1.80 S= 0.98413110 T= 0.97384763 Err=0.0106
U= 2.00 S= 0.90929743 T= 0.90929743 Err=0.0000
U= 2.20 S= 0.80145624 T= 0.80849640 Err=0.0087
U= 2.40 S= 0.66571681 T= 0.67546318 Err=0.0144
U= 2.60 S= 0.50708023 T= 0.51550137 Err=0.0163
U= 2.80 S= 0.33054760 T= 0.33498815 Err=0.0133
U= 3.00 S= 0.14112001 T= 0.14112001 Err=0.0000
U= 3.20 S= -0.05566063 T= -0.05837414 Err=-0.0465
U= 3.40 S= -0.25208917 T= -0.25554110 Err=-0.0135
U= 3.60 S= -0.43991964 T= -0.44252044 Err=-0.0059
U= 3.80 S= -0.61090607 T= -0.61185789 Err=-0.0016
U= 4.00 S= -0.75680250 T= -0.75680250 Err=0.0000
Здесь рассматривается лишь одна из возможных постановок задачи численного интегрирования – получение оценки определенного интеграла в пределах от до от функции с заданной пользователем точностью, причем считается, что может быть вычислена в любой точке с помощью определяемой пользователем процедуры-функции FUN.
Рrocedure quanc8( fun: рointer;
a, b, abserr, relerr: float;
var result, errest: float;
var nofun: longint;
var flag: float );
Оценка с требуемой точностью определенного интеграла от функции, задаваемой именем процедуры-функции, вычисляющей ее значения в произвольных точках интервала интегрирования.
QUANC8 представляет собой автоматическую адаптивную программу, основанную на формуле Ньютона-Котеса 8-ого порядка.
Входная информация
FUN
― указатель на внешнюю функцию, реализующую вычисление подынтегральной функции. Процедура-функция FUN должна удовлетворять двум следующим требованиям:
1. Должна иметь описание:
function FUN( x : float ): float;
и по значению x вычислять значение , где – интегрируемая функция;
2. Функция FUN должна быть протранслирована с дальним типом вызова (с использованием директивы {$F+});
a
― нижний предел интегрирования;
b
― верхний предел интегрирования (b может быть меньше, чем a);
аbserr
― абсолютная желаемая погрешность;
relerr
― граница относительной погрешности (должна быть неотрицательна);
abserr
― граница абсолютной погрешности (должна быть неотрицательна).
Выходная информация
result
― приближенное значение интеграла;
errest
― оценка величины действительной ошибки;
nоfun
― число значений функции, использованных при вычислении интеграла;
flag
― индикатор надежности. Если flag равен нулю, то result удовлетворяет заданной границе погрешности. При ххх – число интервалов, для которых не было сходимости, а 0.ууу – доля основного интервала, оставшаяся для обработки в тот момент, когда подпрограмма приблизилась к предельному числу для nofun.
рrogram Tquanc8;
{$N-}
uses FMM, crt;
Var
a, b, relerr, abserr,
result, errest, flag, k : float;
nofun,i : longint;
{$F+}
Function fun(y : float) : float;
begin
if y=0.0 then fun:=k
else fun:=sin(k*y)/y;
end;
{$F-}
begin
clrscr;
writeln(' Иллюстрирующая программа для QUANC8');
writeln;
writeln(' Будем интегрировать sin(k * x) / x ');
writeln(' Введите, пожалуйста, пределы интегрирования:');
write(' Нижний, a:= ');readln(a);
write(' Верхний, b:= ');readln(b);
relerr:=1.0e-6;
abserr:=0.0;
k:=1;
writeln;
writeln(' K Result Errest flag',
' Nofun');
writeln;
while k < 101.1 do begin
quanc8(@fun,a,b,abserr,relerr,result,errest,nofun,
flag);
writeln(k:3:0, ' ',result:14:10,' ',errest,
' ',flag:5:2,' ',nofun:4);
k:=k+10;
end;
end.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.