|
Текст подпрограммы и версий qst1r_p.zip |
Тексты тестовых примеров tqst1r_p.zip |
Вычисление определенного интеграла по обобщенной квадратурной формуле трапеции.
Подпрограмма QST1R вычисляет интеграл
B
∫ f (x) dx
A
с заданной абсолютной погрешностью E обобщенной квадратурной формуле трапеции с шагом h = (B - A)/K, где K - число частичных отрезков разбиения.
Л.Г.Васильева. Набор стандартных программ численного интегрирования с фиксированным распределением узлов. Сб. "Численный анализ на ФОРТРАНе", вып.8, Изд - во МГУ, 1974.
procedure QST1R(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. |
Версии: нет
Вызываемые подпрограммы
| UTQS10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QST1R. |
Замечания по использованию
|
Проводятся два последовательных просчета интеграла по всему отрезку интегрирования по K и 2 K частичным отрезкам. Если абсолютная величина разности этих двух последовательных просчетов не превосходит E, то счет заканчивается и за значение интеграла принимается результат последнего просчета. B противном случае, значение K удваивается и процесс повторяется. При E ≤ 0 происходит только один просчет при заданном значении K. Максимальное значение K, котоpое можно задавать, не должно превосходить 524288. Если заданная точность не может быть достигнута, то K полагается равным 1048576. При выходе из подпрограммы значение K полагается равным числу частичных отрезков разбиения, при котоpом проводился последний просчет интеграла. |
Unit TQST1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQST1R_p, QST1R_p;
function TQST1R: String;
implementation
function TQST1R: String;
var
K,IERR :Integer;
RINT,A,B,E :Real;
begin
Result := ''; { результат функции }
K := 1;
E := 0.0001;
B := 1.570796326795;
А := -B;
QST1R(RINT,A,B,FQST1R,E,K,IERR);
Result := Result + Format(' %20.16f %10d %10d ',
[RINT,K,IERR]) + #$0D#$0A;
UtRes('TQST1R',Result); { вывод результатов в файл TQST1R.res }
exit;
end;
end.
Unit fqst1r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
function fqst1r(X :Real): Real;
implementation
function fqst1r(X :Real): Real;
begin
{ Result - прототип имени функции F на FORTRANe }
Result := 1.0/(1.0+Cos(X));
exit;
end;
end.
Результаты:
RINT = 2.000 000 0227
K = 8192
IERR = 0