Имитационное моделирование
1. Метод Монте-Карло или метод статистических испытаний , — это численный метод, основанный на моделировании случайных величин и построении статистических оценок для искомых величин
2 . Вычисление числа методом Монте-Карло
= 3,1415922653 ...
Постановка задачи
Для вычисления числа с помощью метода Монте-Карло рассмотрим круг радиуса 1 с центром в точке (1, 1).
Y
2
1
Круг вписан в квадрат, площадь которого
S квадрата = 2 2 = 4
1
2
X
0
Выбираем внутри квадрата N случайных точек с координатами — х и у
Пусть N круга - число точек, попавших внутрь круга
Y
Дано: S квадрата, N круга
Найти: площадь круга
2
( X, Y )
Математическая модель
Точка принадлежит квадрату,
если 0 х 2 и 0 y 2
Если ( x – 1) 2 +( y – 1) 2 1,
то точка попадает в круг,
иначе она находится вне круга.
1
1
X
2
0
Геометрически очевидно, что
Отсюда
То есть для круга единичного радиуса :
Но для круга единичного радиуса S круга = ,
следовательно, получаем
(1)
Формула (1) дает оценку числа . Чем больше N , тем точнее эта оценка.
нач
Ввод N
N круга =0
I=1, N ,1
X=2*RND Y=2*RND
нет
(X-1) 2 +(Y-1) 2 1
да
N круга = N круга +1
=4*N круга / N
Вывод
кон
program monte_karlo;
uses crt;
var i,n,n1:longint; x,y,pi:real;
begin
randomize;
write(' Введите количество точек n=');
readln(n);
for i:=1 to n do
begin
x:=2*random;
y:=2*random;
if sqr(x-1)+sqr(y-1)
end;
pi:=4*n1/n;
writeln('pi = ', pi:15:11);
end.
Вычислительный эксперимент и анализ результатов
Выполнить практическую работу на ЭВМ, запустив программу m __ karlo . pas , оформить результаты в таблице и сделать соответствующие выводы
N
Результат
50
3.3600000
N
50
50
3.1200000
Результат
2500
N
2500
600
600
Результат
2500
10000
10000
5000
600
10000
5000
1000000
5000
1000000000
PRINT "Vvedite n": INPUT n
Screen 9
VIEW (0, 0)-(639, 349), 3: WINDOW (-1, 1)-(1, -1): COLOR 5, 3
Randomize Timer
'Osi & krug
Cls
PAINT (0, 0), 3
LINE (-1, 0)-(1, 0), 1
LINE (0, -1)-(0, 1), 1
CIRCLE (0, 0), .5, 1, , , .85
'Nasechki osei
For i = -0.75 To 0.75 Step 0.25
Line (i, -0.03)-(i, 0.03), 4: Line (-0.03, i * 1.55)-(0.03, i * 1.55), 4
Next i
'Podpisi osei
LOCATE 12, 42: Print 0: LOCATE 12, 61: Print 1: LOCATE 2, 42: Print 1
LOCATE 1, 39: Print "Y": LOCATE 12, 79: Print "X": LOCATE 1, 1
Print "Vnutri": LOCATE 2, 1
Print "Snarugi": LOCATE 3, 1
Print "Chislo PI="
LOCATE 1, 9 : Print 0 : LOCATE 3, 4: Print "?"
inside = 0 : outside = 0
For i = 1 To n
x = (Rnd - 0.5) * 2 : y = (Rnd - 0.5) * 2
If x ^ 2 + y ^ 2
inside = inside + 1
LOCATE 1, 9 : Print inside
c = 4
Else
outside = outside + 1
LOCATE 2, 9 : Print outside
c = 8
End If
s = 4 * inside / n
LOCATE 3, 4: Print " "
LOCATE 3, 4: Print s
x = x * 0.5 : y = y * 0.5 * 1.55
PSet (x, y), c
For j = 1 To 100
Next j
Next i