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

Подпрограмма:  QSMKR (модуль QSMKR_p)

Назначение

Вычисление определенного N - кратного (1 ≤ N ≤ 20) интеграла по прямоугольному параллелепипеду методом Монте - Карло с заданной точностью.

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

Подпрограмма QSMKR позволяет вычислить N - кратный интеграл по N - мерному прямоугольному параллелепипеду ∏:  Ai ≤ Xi ≤ Bi,  i = 1, 2, ..., N , с погрешностью

     Е ( 1 + |  ∫  f (x) dx | ) ,
                   

где величина E задается пользователем. Использован метод Монте - Карло [1]. Погрешность вычислений оценивается с вероятностью  0.997.

1. Н.С.Бахвалов. Численные методы, "Hаука", M., 1975.

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

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

Параметры

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

Версии: нет

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

GSU1R - генерация массива псевдослучайных чисел, pавномеpно распределенных в интервале (0, 1).

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

  Порядок оценки скорости сходимости метода Монте - Карло есть  о (1/k), где k - число точек, в которых вычисляется подинтегральная функция. Kонстанта, входящая в эту оценку, сильно pастет с увеличением кратности интеграла. Поэтому не рекомендуется задавать высокую точность вычислений, т.к. это требует больших затрат машинного времени.

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

Unit TQSMKR_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQSMKR_p, QSMKR_p;

function TQSMKR: String;

implementation

function TQSMKR: String;
var
K :Integer;
E,RINT :Real;
const
A :Array [0..2] of Real = ( -1.0,-1.0,-1.0 );
B :Array [0..2] of Real = ( 2.0,2.0,2.0 );
begin
Result := '';  { результат функции }
К := 3;
E := 0.54;
QSMKR(RINT,K,A,B,FQSMKR,E);
Result := Result + Format('%20.16f %20.16f ',[RINT,E]) + #$0D#$0A;
UtRes('TQSMKR',Result);  { вывод результатов в файл TQSMKR.res }
exit;
end;

end.

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

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

implementation

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

end.

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