Текст подпрограммы и версий 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.