Смекни!
smekni.com

Центральная Предельная Теорема и её приложения. Решение Определенного интеграла методом Монте-Карло (стр. 3 из 3)

Таким образом мы определяем искомую величину лишь теоретически. А вот чтобы найти ее численно, пользуются статистическими методами: берут выборку случайной величины ξ объемом

элементов. В результате получают
вариант случайной величины ξi, для которых вычисляют их среднее арифметическое (выборочное среднее)

которое и принимают в качестве приближенного значения (оценки) искомой величины

:

Для получения результата приемлемой точности по методу Монте-Карло требуется большое число статистических испытаний. Именно поэтому этот метод иногда так и называют: метод статистических испытаний.

Теория метода Монте-Карло изучает способы выбора случайных величин ξ для решения различных задач, а также способы уменьшения дисперсии используемых случайных величин. Уменьшение дисперсии играет большую роль, поскольку при равных объемах выборок, выборка с меньшей дисперсией имеет меньшую погрешность.

Итак, для вычисления однократного интеграла методом Монте-Карло может быть применена формула

(а)

где xi равномерно распределенное на интервале [a, b] случайное число. Справедлива следующая оценка точности вычисления интеграла по формуле (а) с вероятностью p=1-η выполняется неравенство

Например, если положить p=99%, тогда η = 0.01 и можно утверждать, что с вероятностью 99% справедливо неравенство

где

Все, что нужно для вычисления интегральной суммы по формуле (1) - это научиться получать случайные числа, равномерно распределенные на интервале [a, b]. Для этой цели можно использовать генератор случайных чисел, входящий в состав стандартных библиотек, поставляемых с компилятором. С помощью функции random легко получить случайное вещественное число, равномерно распределенное на интервале [0, 1] - например, результатом выполнения оператора x=random является случайное вещественное число из интервала [0, 1]. Имея случайное вещественное число из интервала [0, 1] легко получить случайное число из любого интервала. Например, если z - случайное число из интервала [0, 1] , тогда x=a+(b-a)*z - случайное число из интервала [a, b].

Как видно из приведенных выше оценок погрешности формулы (а) точность вычисления интеграла и в методе Монте-Карло определяется числом слагаемых N в интегральной сумме - чем больше слагаемых, тем точнее результат. Ниже приведен пример и программа, вычисляющая определенный интеграл методом Монте-Карло.

Метод Монте-Карло легко обобщается на интегралы произвольной кратности. Например, двукратный интеграл может быть вычислен по формуле

где xi, yi - случайные числа, равномерно распределенные на интервалах [a, b] и [c, d] соответственно. Оценка точности вычисления интеграла по формуле (b) совершенно аналогично приведенной выше для случая однократного интеграла и поэтому здесь не приводится.

Пример №1: Вычислить определенный интеграл I =

Решение.


=
.

Точное значение интеграла I=

, ниже приведены результаты программы.

Листинг программы приведен в приложении №1. Программа называется MonteKarlo.

Пример №2: Вычислить определенный интеграл I =

Решение.

Точное значение интеграла I=

, ниже приведены результаты программы.

Листинг программы приведен в приложении №2. Программа называется MonteKarlo1.

Приложение №1.

Программа вычисления одномерного определенного интеграла методом Монте-Карло.

program MonteKarlo;

uses crt;

Label l1, l2;

var

j1, j, a, b, c, n1, k, n:integer;

I, Y, x:real;

Begin

randomize;

clrscr;

writeln('Vvod znachenii');

write('a = ');

Read(a);

write('b = ');

Read(b);

write('n = ');

Read(n);

writeln('--------------------------------');

writeln('| k | integral | vsego ispitani|');

for j:=1 to 9 do

begin

I:=0;

for j1:=1 to n do

begin

x:=a+(b-a)*random;

I:=I+x*x+5*x;

end;

I:=I*(b-a)/n;

writeln('--------------------------------');

writeln('| ', j, ' | ', i:2:6, ' | ', n, ' |');

{writeln(' Integral = ', i:6:7, ' vsego ispitani = ', n, ' popalo pod function = ', n1);}

end;

writeln('--------------------------------');

readkey;

end.

Приложение №2.

Программа вычисления многомерного определенного интеграла методом Монте-Карло.

program MonteKarlo2;

uses crt;

Label l1, l2;

var

j1, j, d, a, b, c, n1, k, n:integer;

I, Y, x:real;

Begin

randomize;

clrscr;

writeln('Vvod znachenii');

write('a = ');Read(a);

write('b = ');Read(b);

write('c = ');Read(c);

write('d = ');Read(d);

write('n = ');Read(n);

writeln('--------------------------------');

writeln('| k | integral | vsego ispitani|');

for j:=1 to 9 do

begin

I:=0;

for j1:=1 to n do

begin

x:=a+(b-a)*random;

y:=c+(d-c)*random;

I:=I+sqr(x)+sqr(y)*y;

end;

I:=I*(b-a)*(d-c)/n;

writeln('--------------------------------');

writeln('| ', j, ' | ', i:2:6, ' | ', n, ' |');

{writeln(' Integral = ', i:6:7, ' vsego ispitani = ', n, ' popalo pod function = ', n1);}

end;

writeln('--------------------------------');

readkey;

end.