Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Метод Монте Карло

.pdf
Скачиваний:
31
Добавлен:
03.06.2015
Размер:
329.56 Кб
Скачать

Лабораторная работа №5 Метод Монте-Карло

Найдем методом Монте-Карло площадь одного сектора круга:

Впишем сектор круга в квадрат :

Сформируем

набор случайных точек

внутри квадрата, то есть

и

. Для этого нам необходимо получить определенное

количество, обозначить через NN, случайных чисел. В maple это можно сделать с помощью команды rand(K..M). Эта команда формирует целые случайные числа от K до M. Нам же нужны дробные числа от нуля до единицы. Мы получим целые числа от 0 до 1000, а затем делением на 1000

получим необходимые (

) нам числа. Те

точки,

для которых

справедливо:

, очевидно, лежат внутри

сектора.

Подсчитаем

количество таких точек и с помощью формулы

 

 

найдем площадь

 

 

сектора.

 

 

 

 

 

> restart;

 

 

 

 

 

> NN:=1000;

 

 

 

 

 

 

NN := 1000

 

 

 

 

Формируем массивы X и Y случайных чисел 0≤X[i]

 

и

.

>r:=rand(0.. NN);

>X:=[seq(evalf(r()/NN),i=1..NN)]:

>Y:=[seq(evalf(r()/NN),i=1..NN)]:

Включим графические пакеты:

>with(plots);

>with(plottools);

N1 и N2 переменные для подсчета точек попавших внутрь и вне сектора. Напомним, что по условиям формирования случайных точек все точки попадают внутрь квадрата.

1

Введем переменные для подсчета точек внутри сектора и вне его. Очевидно, что N1+N2=NN. Первоначально N1 и N2 равны нулю.

> N1:=0;

N1 := 0

> N2:=0;

N2 := 0

Зададим графические объекты дугу (S) и линии (l1 и l2), ограничивающие квадрат :

>S:=arc([0,0],1,0..Pi/2,thickness=3,color=green):

>l1:=line([0,1],[1,1],thickness=2,color=red):

>l2:=line([1,0],[1,1],thickness=2,color=red):

Зададим цикл, формирующий графические объекты SS[i]- диски радиусом 0.005 и центром в точках X[i], Y[i] и имеющие черный цвет, если их центр находится внутри сектора и черный вне его. С помощью команд N1:=N1+1; и N2:=N2+1;будем считать точки внутри и вне сектора.

>for i from 1 to NN do if X[i]^2+Y[i]^2<1 then

SS[i]:=disk([X[i],Y[i]],0.005,color=black); N1:=N1+1;

>else SS[i]:=disk([X[i],Y[i]],0.005,color=red); N2:=N2+1;

>fi;

>od:

Изобразим точки-диски:

> display(S,l1,l2,seq(SS[i],i=1..NN));

2

Возьмем полученные результаты:

> N1:=N1;

N1 := 792

> N2:=N2;

N2 := 208

Возьмем найденную нашим методом площадь:

> Sq:=evalf(N1/1000);

Sq := 0.7920000000

Сравним с известным результатом:

> evalf(Pi/4);

0.7853981635

Применение метода Монте-Карло для решения задачи Дирихле

Задачей Дирихле называется задача:

, (1)

с краевыми условиями:

. (2)

То есть необходимо найти значения функции u(x,y),удовлетворяющей уравнению (1) внутри некоторой области D, значения которой на границе этой области задаются (2).

Пример: Проверим как методом Монте-Карло решается задача Дирихле, если

и известны значения функции на круге радиуса 1, с центром в начале координат.

3

>restart;

>f:=(x,y)->x^2-y^2;

f:= ( x, y ) x2 y2

>diff(diff(f(x,y),x),x)+diff(diff(f(x,y),y),y);

0

> plot3d(f(x,y),x=-10..10,y=-10..10,axes=normal);

> r:=rand(1..4); r := pro c()

lo calt;

glo bal_seed;

_seed := irem( a _seed, p );

t := _seed;

to concats do _seed := irem( a _seed, p ); t := s t _seed end do; irem( t, divisor) offset

end proc

> h:=0.01;

h := 0.01

> N:=500;

4

N := 500

> S:=array(1..N);

S := array( 1 .. 500, [ ] )

>for i from 1 to N do

>X[1]:=0; Y[1]:=0.5; k:=1;

>while X[k]^2+Y[k]^2<1 do

>if r()=1 then X[k+1]:=X[k]+h; Y[k+1]:=Y[k]; k:=k+1;

>else

>if r()=2 then X[k+1]:=X[k]; Y[k+1]:=Y[k]+h; k:=k+1;

>else

>if r()=3 then X[k+1]:=X[k]-h; Y[k+1]:=Y[k]; k:=k+1;

>else X[k+1]:=X[k]; Y[k+1]:=Y[k]-h; k:=k+1;

>fi; fi; fi;

>od;

>S[i]:=f(X[k],Y[k]);

>od:

>SS:=add(S[n],n=1..N)/N;

SS:= -0.2668754000

>f(X[1],Y[1]);

-0.25

>

> SS := -.2588660000;

 

 

SS := -0.2588660000

 

 

 

 

 

 

 

Задания

 

 

 

 

 

1.

Методом Монте-Карло найти площадь эллипса:

 

 

 

.

 

 

2.

Методом Монте-Карло найти площадь фигуры ограниченной

 

параболами

и y 2 x2 .

 

 

 

 

 

3.

Получить у преподавателя функцию

и область и границу ее, на

 

которой известны значения функции, и найти значение (проверить) в

 

точке внутри области методом Монте-Карло.

 

 

 

 

5