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