|
Текст подпрограммы и версий qsh4r_p.zip qsh4e_p.zip |
Тексты тестовых примеров tqsh4r_p.zip tqsh4e_p.zip |
Вычисление определенного четырехкратного интеграла по прямоугольному параллелепипеду с заданной точностью.
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.