Текст подпрограммы и версий
qsk1r_p.zip 
Тексты тестовых примеров
tqsk1r_p.zip 

Подпрограмма:  QSK1R (модуль QSK1R_p)

Назначение

Вычисление определенного интеграла по обобщенной квадратурной формуле Ньютона - Котеса шестой степени точности.

Математическое описание

 Подпрограмма  QSK1R вычисляет интеграл 
            B
           ∫ f (x) dx 
          A 

с заданной абсолютной погрешностью E по обобщенной квадратурной формуле Ньютона - Котеса с шагом  h = (B - A)/K,  где K - число частичных отрезков разбиения.

Л.Г.Васильева. Набор стандартных программ численного интегрирования c фиксированным распределением узлов. Сб. "Численный анализ на Фортране", вып. 8, Изд-во МГУ, 1974 .

Использование

procedure QSK1R(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 - подпрограмма выдачи диагностических сообщений при работе подпрограммы QSK1R.

Замечания по использованию

 

Проводятся два последовательных просчета интеграла по всему отрезку интегрирования по K и 2K частичным отрезкам. Если абсолютная величина разности этих двух последовательных просчетов не превосходит E , то счет заканчивается и за значение интеграла принимается результат последнего просчета. B противном случае, значение K удваивается и процесс повторяется.

При E ≤ 0 происходит только один просчет при заданном значении K.

Максимальное значение K, котоpое можно задавать, не должно превосходить 524288. Если заданная точность не может быть достигнута, то K полагается равным 1048576.

При выходе из подпрограммы значение K полагается равным числу частичных отрезков разбиения, при котоpом проводился последний просчет интеграла.

Пример использования

Unit TQSK1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQSK1R_p, QSK1R_p;

function TQSK1R: String;

implementation

function TQSK1R: String;
var
K,IERR :Integer;
RINT,A,B,E :Real;
begin
Result := '';  { результат функции }
K := 1;
E := 0.00001;
B := 1.570796326795;
А := -B;
QSK1R(RINT,A,B,FQSK1R,E,K,IERR);
Result := Result + Format(' %20.16f %10d %10d ',
 [RINT,K,IERR]) + #$0D#$0A;
UtRes('TQSK1R',Result);  { вывод результатов в файл TQSK1R.res }
exit;
end;

end.

Unit FQSK1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;

function FQSK1R(X :Real): Real;

implementation

function FQSK1R(X :Real): Real;
begin
{ Result - прототип имени функции FQSK1R на FORTRANe }
Result := 1.0/(1.0+Cos(X));
exit;
end;

end.

Результаты:

      RINT  =  2.0000000000

      K  =  128
      IERR  =  0