Описание типов и констант модуля FMM. Задачи линейной алгебры. Подпрограмма DECOMP. Подпрограмма SOLVE, страница 6

Результаты выполнения тестового примера

Результаты выполнения илллюстрирующей программы для

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

ГЛАВА 4. Численное интегрирование

Здесь рассматривается лишь одна из возможных постановок задачи численного интегрирования – получение оценки определенного интеграла в пределах от  до  от функции  с заданной пользователем точностью, причем считается, что  может быть вычислена в любой точке  с помощью определяемой пользователем процедуры-функции FUN.

§ 5. Подпрограмма QUANC8

Объявление

Р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.