Текст подпрограммы и версий qss1r_p.zip qss1e_p.zip |
Тексты тестовых примеров tqss1r_p.zip tqss1e_p.zip |
Вычисление определенного интеграла по обобщенной квадратурной формуле Симпсона.
Подпрограмма QSS1R вычисляет интеграл B ∫ f (x) dx A
с заданной абсолютной погрешностью E по обобщенной квадратурной формуле Симпсона с шагом h = (B - A)/K, где K - число частичных отрезков разбиения.
Л.Г. Васильева. Набор стандартных программ численного интегрирования с фиксированным распределением узлов. Сб. "Численный анализ на ФОРТРАНе", вып. 8, Изд-во МГУ, 1974.
procedure QSS1R(var RINT :Real; A :Real; B :Real; F :Func_F1; E :Real; var K :Integer; var IERR :Integer);
Параметры
RINT - | вещественная переменная, содержащая вычисленное значение интеграла; |
A, B - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
F - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
E - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный); |
K - | целая переменная, задающая число частичных отрезков разбиения; |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
IERR = 65 - | когда заданная точность не может быть достигнута при максимально возможном числе частичных отрезков разбиения; значение K полагается равным 1048576. |
Версии
QSS1E - | вычисление с расширенной (Extended) точностью определенного интеграла по обобщенной квадратурной формуле Симпсона. |
Вызываемые подпрограммы
UTQS10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QSS1R. |
UTQS12 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QSS1E. |
Замечания по использованию
Проводятся два последовательных просчета интеграла по всему отрезку интегрирования по K и 2K частичным отрезкам. Если абсолютная величина разности этих двух последовательных просчетов не превосходит E, то счет заканчивается и за значение интеграла принимается результат последнего просчета. B противном случае, значение K удваивается и процесс повторяется. При E ≤ 0 происходит только один просчет при заданном значении K. Максимальное значение K, котоpое можно задавать, не должно превосходить 524288. Если заданная точность не может быть достигнута, то K полагается равным 1048676. При выходе из подпрограммы значение K полагается равным числу частичных отрезков разбиения, при котоpом проводился последний просчет интеграла. В подпрограмме QSS1E параметры RINT, A, B, F, E имеют тип Extended. |
Unit TQSS1R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, FQSS1R_p, QSS1R_p; function TQSS1R: String; implementation function TQSS1R: String; var K,IERR :Integer; RINT,A,B,E :Real; begin Result := ''; { результат функции } K := 1; E := 0.00001; B := 1.570796326795; А := -B; QSS1R(RINT,A,B,FQSS1R,E,K,IERR); Result := Result + Format(' %20.16f %10d %10d ', [RINT,K,IERR]) + #$0D#$0A; UtRes('TQSS1R',Result); { вывод результатов в файл TQSS1R.res } exit; end; end. Unit fqss1r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc; function fqss1r(X :Real): Real; implementation function fqss1r(X :Real): Real; begin { Result - прототип имени функции F на FORTRANe } Result := 1.0/(1.0+Cos(X)); exit; end; end. Результаты: RINT = 2.0000000012 K = 256 IERR = 0