Текст подпрограммы и версий
qsr2r_p.zip 
Тексты тестовых примеров
tqsr2r_p.zip 

Подпрограмма:  QSR2R (модуль QSR2R_p)

Назначение

Вычисление определенного интеграла по квадратурной формуле Pомберга с заданной абсолютной погрешностью.

Математическое описание

 QSR2R вычисляет интеграл
            b
           ∫ f (x) dx 
          a 

по квадратурной формуле Pомберга с заданной абсолютной погрешностью.

Бахвалов H.C. "Численные методы", т.1, "Hаука", 1973.

Использование

procedure QSR2R(var RINT :Real; A :Real; B :Real; F :Func_F1; E :Real;
                var IERR :Integer);

Параметры

RINT - вещественная переменная, содержащая вычисленное значение интеграла;
A, B - заданные нижний и верхний пределы интегрирования (тип: вещественный);
F - имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию  f (x);
E - заданная абсолютная погрешность вычисления интеграла (тип: вещественный);
IERR - целая переменная, указывающая причину окончания вычислений; если интеграл сосчитан, то IERR = 0, в противном случае IERR = 65.

Версии: нет

Вызываемые подпрограммы

UTQS11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы QSR2R.

Замечания по использованию

  Если интеграл не может быть вычислен с точностью E, выдается диагностическое сообщение "заданная точность не может быть достигнута".

Пример использования

Unit TQSR2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQSR2R_p, QSR2R_p;

function TQSR2R: String;

implementation

function TQSR2R: String;
var
IERR :Integer;
RINT,A,B,E :Real;
begin
Result := '';  { результат функции }
A := 0.0;
B := 1.0;
E := 0.0000000001;
QSR2R(RINT,A,B,FQSR2R,E,IERR);
Result := Result + Format(' %20.16f  %5d ',[RINT,IERR]) + #$0D#$0A;
UtRes('TQSR2R',Result);  { вывод результатов в файл TQSR2R.res }
exit;
end;

end.

Unit FQSR2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;

function FQSR2R(X :Real): Real;

implementation

function FQSR2R(X :Real): Real;
label
_1,_2,_3;
begin
{ Result - прототип имени функции FQSR2R на FORTRANe }
if ( X ) < 0
 then goto _1
 else if ( X ) > 0
       then goto _2
       else goto _1;
_1:
Result := 1.0;
goto _3;
_2:
Result := X/(Exp(X)-1.0);
_3:
exit;
end;

end.

Результаты:   RINT  =  0.77750463411 ,   IERR  =  0