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

Подпрограмма:  QS12R (модуль QS12R_p)

Назначение

Вычисление определенного интеграла по квадратурной формуле Гаусса.

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

QS12R вычисляет интеграл с заданной абсолютной погрешностью на отрезке интегрирования по формуле

               B
               ∫ f (x) dx ≈
              A
                                          N
                          ≈ (B-A)   ∑ Ci f ( (B-A) yi / 2 + (A+B) / 2 ) / 2 ,
                                         i=1 

где yi и Ci соответственно узлы и веса Гаусса для отрезка [ - 1, 1].

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

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

procedure QS12R(var RINT :Real; A :Real; B :Real; F :Func_F1; E :Real;
                var N :Integer; var IERR :Integer);

Параметры

RINT - вещественная переменная, содержащая вычисленное значение интеграла;
A, B - заданные нижний и верхний пределы интегрирования (тип: вещественный);
F - имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x);
E - заданная абсолютная погрешность вычисления интеграла (тип: вещественный);
N - целая переменная, задающая число узлов интегрирования;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR = 65 - когда заданная точность не может быть достигнута при максимально возможном числе узлов интегрирования; значение N полагается равным - 1;
IERR = 66 - когда заданное число узлов интегрирования не принадлежит списку возможных узлов.

Версии: нет

Вызываемые подпрограммы

UTQS10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы QS12R.

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

 

B процессе вычисления число узлов интегрирования N может принимать только следующие значения:

(1)       2, 4, 6, 8, 10, 12, 16, 24, 32, 48, 64, 96.

Проводится несколько последовательных просчетов, причем для каждого последующего просчета берется очередное число узлов из списка (1).

Если абсолютная величина разности двух последовательных просчетов интеграла не превосходит E, то счет заканчивается, и за значение интеграла принимается результат последнего просчета. Если список (1) исчерпан и заданная точность не достигнута, то N полагается равным - 1.

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

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

Unit TQS12R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQS12R_p, QS12R_p;

function TQS12R: String;

implementation

function TQS12R: String;
var
N,IERR :Integer;
RINT,A,B,E :Real;
begin
Result := '';  { результат функции }
A := 1.0;
B := IntPower(2.718281828459,3);
E := 0.00001;
N := 2;
QS12R(RINT,A,B,FQS12R,E,N,IERR);
Result := Result + Format(' %20.16f %10d ',[RINT,N]) + #$0D#$0A;
UtRes('TQS12R',Result);  { вывод результатов в файл TQS12R.res }
exit;
end;

end.

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

function FQS12R(X :Real): Real;

implementation

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

end.

Результаты:

      RINT  =  1.9999999999 ;
      N  =  32