Метод Монте-Карло – это статистический метод, использующий случайные числа и повторные статистические выборки для ПРИБЛИЖЕННОГО решения математических и физических задач.
Основная идея метода
Если точное решение невозможно или сликом сложно, можно получить приближенное решение, многократно имитируя случайный процесс и усредняя результаты.
Примеры для объяснения метода
Определение площади сложной фигуры
Если трудно определить площадь сложной фигуры, можно:
- вписать ее в квадрат известных размеров
- многократно кидать в квадрат точки со случайными координатами
- отмечать, когда точка окажется внутри фигуры
- посчитать отношение попаданий точки внутрь фигуры к общему числу кинутых точек и умножить на площадь квадрата
Это и будет приблизительной площадью фигуры.
Определение значения числа PI
- взять четверть круга радиуса 1
- вписать ее в квадрат со стороной 1
- многократно кидать точки со случайными координатами
- отмечать, когда точка окажется внутри четверти круга
- посчитать по формуле площади круга значение PI
S/4 = (Pi * R**2) / 4 = Pi/4 (радиус равен 1)
Доля точек, попавших в круг приблизительно равна Pi/4
Следовательно: Pi = 4 * (Число точек в круге/Число всех точек)
import numpy as np
import matplotlib.pyplot as plt
# Количество случайных точек
n_points = 100000
# Генерируем случайные (x, y) точки в квадрате [0,1]x[0,1]
x = np.random.rand(n_points)
y = np.random.rand(n_points)
# Считаем, сколько точек попало в четверть круга. x**2 + y**2 = 1 - это уравнение окружности. Точки должны лежать внутри или на границе.
inside_circle = x**2 + y**2 <= 1 # это выражение возвращает массив булевых значенй True или False вида inside_circle = [True, False, True, True, ...]
n_inside = np.sum(inside_circle) # выражение считает количество True значений
# Приблизительное значение π
pi_estimate = 4 * n_inside / n_points
print(f"Оценка числа π: {pi_estimate}")
# Визуализация
plt.figure(figsize=(10,10))
plt.scatter(x[inside_circle], y[inside_circle], color='blue', s=1, label='В круге')
plt.scatter(x[~inside_circle], y[~inside_circle], color='red', s=1, label='Вне круга')
plt.legend()
plt.title(f'Оценка π ≈ {pi_estimate:.4f}')
plt.xlabel('x')
plt.ylabel('y')
plt.axis('square')
plt.show()

Применение метода Монте-Карло:
- Физика: моделирование частиц, радиоактивного распада
- Финансы: оценка рисков, опционов
- Статистика: байесовские методы (например, MCMC)
- Компьютерная графика: глобальное освещение и тени
Ключевые особенности:
| Плюсы | Минусы |
|---|---|
| Простота реализации | Медленная сходимость (нужно много точек) |
| Универсальность (для любых задач) | Требует хорошего генератора случайных чисел |
| Хорошо работает в высоких размерностях | Может давать шумные результаты |