Текст подпрограммы и версий 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