Текст подпрограммы и версий
qs82r_p.zip  qs82e_p.zip 
Тексты тестовых примеров
tqs82r_p.zip  tqs82e_p.zip 

Подпрограмма:  QS82R (модуль QS82R_p)

Назначение

Вычисление определенного N - кратного (2 ≤ N ≤ 15) интеграла по прямоугольному параллелепипеду методом Гаусса.

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

QS82R вычисляет N - кратный интеграл по квадратурной формуле

        b1 b2    bN
       ∫   ∫  ...  ∫  f (x1, x2, ... , xN) dx1 dx2 ... dxNa1 a2    aN
       N                      k1      k2       kN
 ≈ ( ∏ ( bi - ai )/2 )  ∑      ∑  ...  ∑  cn1 cn2 ... cnN *
      i=1                    n1=1  n2=1   nN=1
 * f (  ( b1 - a1 )/2 xn1 + ( a1 + b1 )/2 ,  ( b2 - a2 )/2 xn2 + ( a2 + b2 )/2 ,
         ... , ( bN - aN )/2 xnN + ( aN + bN )/2  ) , 

где 2 ≤ ki ≤ 128, а xni и cni ( ni = 1, 2, ..., ki ) соответственно узлы и веса квадратурной формулы Гаусса для отрезка [-1, 1].

Я.М.Жилейкин, А.Г.Симакин. Набор стандартных программ приближенного вычисления многократных интегралов с помощью квадратурных формул Гаусса. Сб. "Численный анализ на ФОРТРАНе", вып. 19, Изд-во МГУ, 1977.

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

procedure QS82R(var RINT :Real; N :Integer; var A :Array of Real;
                var B :Array of Real; F :Func_F1A;
                var NP :Array of Integer; var X :Array of Real;
                var W :Array of Real);

Параметры

RINT - вещественная переменная, содержащая вычисленное значение интеграла;
N - заданная кратность интегрирования (тип: целый);
A, B - вещественные векторы длины N, задающие соответвенно нижние и верхние пределы интегрирования;
F - имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x);
NP - целый вектоp длины N, задающий число узлов интегрирования по каждой переменной:  NP (I) = kI,  I = 1, 2, ..., N;
X, W - вещественные двумерные массивы размера N на 64, используемые в подпрограмме как рабочие.

Версии

QS82E - вычисление с расширенной (Extended) точностью определенного N - кратного (2 ≤ N ≤ 15) интеграла по прямоугольному параллелепипеду методом Гаусса.

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

QS80R - подпрограмма вычисления узлов и весов Гаусса - Лежандра.
QS80E - подпрограмма вычисления с расширенной (Extended) точностью узлов и весов Гаусса - Лежандра.

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

 

Компоненты вектоpа NP в пределах от 2 до 128.

Первый оператор подпрограммы - функции F должен иметь вид
function F (X :Array of Real): Real;
где X - вещественный вектоp длины N, являющийся аргументом подинтегральной функции.

В подпрограмме QS82E параметры RINT, A, B, F, X, W имеют тип Extended.

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

Unit TQS82R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQS82R_p, QS82R_p;

function TQS82R: String;

implementation

function TQS82R: String;
var
N,I :Integer;
RINT :Real;
А :Array [0..4] of Real;
B :Array [0..4] of Real;
NP :Array [0..4] of Integer;
X :Array [0..319] of Real;
W :Array [0..319] of Real;
label
_1;
begin
Result := '';  { результат функции }
N := 5;
for I:=1 to N do
 begin
  NP[I-1] := 10;
  A[I-1] := -3.0;
_1:
  B[I-1] := 3.0;
 end;
QS82R(RINT,N,A,B,FQS82R,NP,X,W);
Result := Result + Format('%s',['  RINT=']);
Result := Result + Format('%16.7f ',[RINT]) + #$0D#$0A;
UtRes('TQS82R',Result);  { вывод результатов в файл TQS82R.res }
exit;
end;

end.

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

function FQS82R( X :Array of Real): Real;

implementation

function FQS82R( X :Array of Real): Real;
var
I :Integer;
S,R :Real;
label
_1;
begin
{ Result - прототип имени функции FQS82R на FORTRANe }
S := 0.0;
for I:=1 to 5 do
 begin
  R := X[I-1];
_1:
  S := S+R*R;
 end;
Result := Exp(-0.5*S);
exit;
end;

end.

Результат:   RINT  =  97.6288