|
Текст подпрограммы и версий qsr2r_p.zip |
Тексты тестовых примеров tqsr2r_p.zip |
Вычисление определенного интеграла по квадратурной формуле 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