Программная реализация метода
Математическое описание метода.
Метод Монте-Карло состоит в том, что рассматривается некоторая случайная величина ξ, математическое ожидание которой равно искомой величине z, т.е.
Осуществляется серия n независимых испытаний, в результате которых получается (генерируется) последовательность n случайных величин : , , …, и по совокупности этих значений приближенно определяется искомая величина, т.е.
.
Интеграл же может быть вычислен как математическое ожидание некоторой случайной величины ξ, которая определяется независимыми реализациями ηi случайной величины ηс равномерным законом распределения. Двукратные интегралы вычисляются следующим образом:
, (1)
где , – независимые реализации равномерно распределенных на величин.
Для использования метода Монте-Карло при вычислении определенных интегралов, как и в других его приложениях, необходимо вырабатывать последовательности случайных чисел с заданным законом распределения. Существуют различные способы генерирования таких чисел. В настоящее время наиболее распространенный способ выработки случайных чисел на ЭВМ состоит в том, что в памяти хранится некоторый алгоритм выработки таких чисел по мере потребности в них. Поскольку эти числа генерируются по наперед заданному алгоритму, то они не совсем случайны (псевдослучайны), хотя и обладают свойственными случайным числам статистическими характеристиками. То есть случайные величины, равномерно распределенные на отрезке , в ЭВМ задаются с помощью специальных программ – генераторов псевдослучайных чисел.
Алгоритм метода в программе:
1. Ввод количества испытаний n.
2. Запустить генератор случайных чисел.
3. Определение общих пределов интегрирования.
4. Случайным образом (с учетом общих пределов интегрирования) генерировать значения x и y.
5. Если значения x и y лежат в текущих пределах интегрирования, то к значению интеграла прибавить значение функции при этих значениях.
6. Пункты 4 и 5 повторить n раз.
7. Окончательно полученную сумму (из формулы 1) перемножить на оставшиеся части формулы (1) для получения значения интеграла.
Описание основных значений в программе.
n | Количество испытаний |
DInt | Основная подпрограмма |
F | Функция для вычисления значений точек подынтегральной функции |
x, y | Аргументы функции |
S | Текущее значение суммы (интеграла) |
Ax, Ay, Bx, By | Пределы интегрирования |
i | Счетчик |
В программе MonteKarlo используются стандартные модули WinCrt, Strings. В программе MonteKarlo описан метод Монте-Карло, который осуществляется с помощью функций: function F(x,y: real): real; - расчет значения функции и function DInt(A: real; n: longint): real; - вычисление двойного интеграла.
Инструкция по работе с программой.
Для начала работы программы запустить файл MonteKarlo.pas. Код программы.
program MonteKarlo;
uses WinCrt,Strings;
{Расчет значения функции}
function F(x,y: real): real;
begin
F:= exp(x+y)+exp(x-y)*sin(x);
end;
{Подпрограма вычисления двойного интеграла}
function DInt(n: longint): real;
var
S, x, y, Ax, Ay, Bx, By: real;
i: longint;
begin
randomize;
Ax:= 0; Bx:= 4; Ay:= 1; By:=5;
S:=0;
for i:= 1 to n do begin
x:= Ax+random*(Bx-Ax);
y:= Ay+random*(By-Ay);
if ((x>=0) and (x<=4))and((y>=1) and (y<=5)) then S:= F(x,y)+S;
end;
DInt:= (Bx-Ax)*(By-Ay)*S/n;
end;
var
a: real;
n: longint;
BEGIN
StrCopy(WindowTitle, 'Программа вычисления двукратного интеграла методом Монте-Карло');
ClrScr;
WriteLn;
WriteLn(' 5 4');
WriteLn(' / / ');
WriteLn(' Интеграл | | (exp(x+y)+exp(x-y)*sin(x)dxdy');
WriteLn(' / / ');
WriteLn(' 1 0');
WriteLn;
WriteLn;
WriteLn;
Write(' Введите количество вычисляемых значений подынтегральной функции n = ');
ReadLn(n);
WriteLn;
WriteLn;
WriteLn(' Подожтите пожалуйста некоторое время, пока программа произведет расчеты...');
WriteLn;
WriteLn;
WriteLn(' Результаты расчета:');
WriteLn;
WriteLn(' Значение интеграла I = ',DInt(n):10:4);
ReadKey;
DoneWinCrt;
END.
Запустите программу меню Run Run или Ctrl+F9, перед вами появится окно:
Необходимо ввести количество испытаний n. После этого будет получен результат.
Результат программы.