|
Текст подпрограммы и версий qsr1r_p.zip qsr1e_p.zip |
Тексты тестовых примеров tqsr1r_p.zip tqsr1e_p.zip |
Вычисление определенного интеграла по квадратурной формуле Pомберга.
QSR1R вычисляет интеграл
b
∫ f (x) dx
a
по квадратурной формуле Pомберга с заданным числом узлов интегрирования.
Н.С.Бахвалов. "Численные методы", т.1, "Hаука", 1973.
procedure QSR1R(var RINT :Real; A :Real; B :Real; F :Func_F1;
var K :Integer; var IERR :Integer);
Параметры
| RINT - | вещественная переменная, содержащая вычисленное значение интеграла; |
| A, B - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
| F - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
| K - | целая переменная, определяющая число узлов интегрирования N ( N = 2K + 1, 0 < K≤ 20 ); |
| IERR - | целая переменная, указывающая причину окончания вычислений: если интеграл сосчитан, то IERR = 0, в противном случае IERR = 65. |
Версии
| QSR1E - | вычисление с расширенной (Extended) точностью определенного интеграла по квадратурной формуле Pомберга. |
Вызываемые подпрограммы
| UTQS11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QSR1R. |
| UTQS13 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QSR1E. |
Замечания по использованию
|
При K > 20 выдается диагностическое сообщение "заданное значение K выходит за пределы допустимых значений". В подпрограмме QSR1E параметры RINT, A, B, F имеют тип Extended. |
Unit TQSR1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQSR1R_p, QSR1R_p;
function TQSR1R: String;
implementation
function TQSR1R: String;
var
K,IERR :Integer;
A,B,RINT :Real;
begin
Result := ''; { результат функции }
A := 0.0;
B := 1.0;
K := 10;
QSR1R(RINT,A,B,FQSR1R,K,IERR);
Result := Result + Format(' %20.16f ',[RINT]) + #$0D#$0A;
Result := Result + Format(' %5d %5d ',[K,IERR]) + #$0D#$0A;
UtRes('TQSR1R',Result); { вывод результатов в файл TQSR1R.res }
exit;
end;
end.
Unit FQSR1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
function FQSR1R(X :Real): Real;
implementation
function FQSR1R(X :Real): Real;
begin
{ Result - прототип имени функции FQSR1R на FORTRANe }
Result := 1.0/(1.0+Exp(X));
exit;
end;
end.
Результаты:
RINT = 0.37988549298
K = 10
IERR = 0