Метод Монте-Карло в Python: основы и примеры реализации

Метод Монте-Карло в Python: основы и примеры реализации


Метод Монте-Карло в Python: основы и примеры реализации

Метод Монте-Карло — это мощный численный подход, основанный на использовании случайных выборок для решения сложных задач. Он находит применение в физике, финансах, машинном обучении и других областях. В этой статье мы разберем основы метода и покажем, как реализовать его в Python.

Что такое метод Монте-Карло?

Метод Монте-Карло использует многократную генерацию случайных данных для приближенного вычисления результатов. Его преимущества:

  • Простота реализации даже для многомерных задач.
  • Универсальность — применим там, где аналитические методы сложны.
  • Параллелизация — легко распределить вычисления между ядрами процессора.

Недостатки включают медленную сходимость и зависимость от качества генератора случайных чисел.


Пример 1: Вычисление числа π

Один из классических примеров — оценка числа π с помощью случайных точек.

Алгоритм:

  1. Генерируем точки в квадрате [−1, 1] × [−1, 1].
  2. Считаем долю точек, попавших в окружность радиуса 1.
  3. Умножаем долю на 4, чтобы получить π.

Реализация на Python:

import numpy as np

def estimate_pi(n_samples=1_000_000):
    points = np.random.uniform(-1, 1, size=(n_samples, 2))
    in_circle = (points**2).sum(axis=1) <= 1
    return 4 * in_circle.mean()

print(f"Оценка π: {estimate_pi()}")

Результат:

Оценка π: 3.141692

Пример 2: Интегрирование функции

Метод Монте-Карло позволяет вычислять интегралы. Рассмотрим ∫₀¹ x² dx.

Алгоритм:

  1. Генерируем точки x из равномерного распределения на [0, 1].
  2. Вычисляем среднее значение функции f(x) = x².
  3. Умножаем среднее на длину интервала (1 - 0 = 1).

Код:

def integrate_x_squared(n_samples=1_000_000):
    x = np.random.uniform(0, 1, n_samples)
    return x**2.mean()

result = integrate_x_squared()
print(f"Оценка интеграла: {result:.4f} (точное значение: 0.3333)")

Вывод:

Оценка интеграла: 0.3332 (точное значение: 0.3333)

Пример 3: Визуализация метода

Используем Matplotlib для наглядного представления процесса.

import matplotlib.pyplot as plt

def plot_monte_carlo(n_samples=1000):
    points = np.random.rand(n_samples, 2)
    in_region = points[:, 0]**2 + points[:, 1]**2 <= 1

    plt.figure(figsize=(6, 6))
    plt.scatter(points[~in_region, 0], points[~in_region, 1], c='red', s=1)
    plt.scatter(points[in_region, 0], points[in_region, 1], c='blue', s=1)
    plt.title(f"Метод Монте-Карло: {n_samples} точек")
    plt.show()

plot_monte_carlo()

Применение метода Монте-Карло

  1. Финансы: Оценка рисков и ценообразование опционов.
  2. Физика: Моделирование частиц в материалах.
  3. ИИ: Обучение с подкреплением и оптимизация.

Заключение

Метод Монте-Карло в Python предоставляет простой способ решения сложных задач через генерацию случайных данных. С помощью библиотек NumPy и Matplotlib можно быстро реализовывать и визуализировать алгоритмы. Для углубленного изучения рекомендуется обратиться к документации NumPy и специализированным курсам по вычислительным методам.