Текст подпрограммы и версий
qsh4r_p.zip  qsh4e_p.zip 
Тексты тестовых примеров
tqsh4r_p.zip  tqsh4e_p.zip 

Подпрограмма:  QSH4R (модуль QSH4R_p)

Назначение

Вычисление определенного четырехкратного интеграла по прямоугольному параллелепипеду с заданной точностью.

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

QSH4R вычисляет четырехкратный интеграл по прямоугольному параллелепипеду с погрешностью

                    B
     Е ( 1 + |  ∫  f (x) dx | ) ,   по сеткам Холтона. 
                  A 

E - меpа погрешности вычисления интеграла, задаваемая пользователем.

Интеграл считается вычисленным, если разность двух приближенных значений интеграла по N точкам и по 2N точкам меньше, чем  E(1 + J), где J - значение интеграла по 2N точкам.

И.М. Соболь. Многомерные квадратурные формулы и функции Xааpа, "Hаука", M.: 1969.

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

procedure QSH4R(var RINT :Real; var A :Array of Real;
                var B :Array of Real; F :Func_F1A; E :Real;
                var IERR :Integer);

Параметры

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

Версии

QSH4E - вычисление с расширенной (Extended) точностью определенного четырехкратного интеграла по прямоугольному параллелепипеду с заданной точностью.

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

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

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

 

Может случиться, что пользователь задал слишком высокую точность вычислений интеграла, которая не достигается при числе точек N = 2*109. Тогда подпрограммы UTQS10, UTQS12 выдадут диагностическое сообщение "заданная точность не может быть достигнута".

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

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

Unit TQSH4R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQSH4R_p, QSH4R_p;

function TQSH4R: String;

implementation

function TQSH4R: String;
var
_i,IERR :Integer;
E,RINT :Real;
A :Array [0..3] of Real;
B :Array [0..3] of Real;
begin
Result := '';  { результат функции }
A[0] := -1.0;
B[0] := 2.0;
A[1] := -1.0;
B[1] := 2.0;
А[2] := -1.0;
B[2] := 2.0;
A[3] := -1.0;
B[3] := 2.0;
E := 0.05;
QSH4R(RINT,A,B,FQSH4R,E,IERR);
Result := Result + Format(' %20.16f ',[RINT]) + #$0D#$0A;
RINT := RINT*16.0/81.0;
Result := Result + Format('  %5d ',[IERR]) + #$0D#$0A;
Result := Result + Format(' %20.16f',[RINT]) + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 1)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f ',[B[_i]]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%20.16f ',[E]) + #$0D#$0A;
UtRes('TQSH4R',Result);  { вывод результатов в файл TQSH4R.res }
end;

end.

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

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

implementation

function FQSH4R( X :Array of Real): Real;
begin
{ Result - прототип имени функции FQSH4R на FORTRANe }
Result := X[0]*X[1]*X[2]*X[3];
exit;
end;

end.

Результаты:   RINT  =  5.0163806920 ,   IERR  =  0.