Текст подпрограммы и версий qsmkr_p.zip |
Тексты тестовых примеров tqsmkr_p.zip |
Вычисление определенного 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