Монте-Карло интегрирование (5)
Монте-Карло интегрирование
В этом задании Вам предстоит разработать инструмент для многомерного численного интегрирования методом Монте-Карло. Метод заключается в следующем: пусть задана действительная функиця n
действительных аргументов f(x1, x2, ..., xn)
, или кратко f(X)
. Интеграл функции f
по n
-мерной прямоугольной области Omega может быть приближен выражением
# псевдокод для интеграла Монте Карло
I = V * sum(f(X_i)) / N
Здесь V
обозначает объем области интегрирования
# псевдокод для вычисления объема прямоугольной области
V = (x1_max - x1_min) * ... * (xn_max - xn_min)
Суммирование выполняется по N
случайным значениям вектора X_i
, i=1, ..., N
. Значения аргументов должны быть распределены равномерно по области интегрирования.
Таким способом, например, можно найти площадь круга, задав функцию f в следующем виде:
def circle(x, y):
return (1 if x**2 + y**2 < 0.5 else 0)
Интеграл этой функции по прямоугольной области [-1, 1] x [-1, 1]
стремится к числу pi при увеличении N
.
Результатом работы Монте-Карло интегрирования является случайная величина. Важно иметь оценку точности близости полученной величины к истинному значению. Эта оценка может быть получена следующим образом:
# псевдокод для ошибки интеграла Монте Карло
dI ~ V * sigma_N / sqrt(N)
Здесь sigma_N
обозначает среднеквадратичное отклонение набора величин f(X_1), ..., f(X_N)
.
Для решения этой задачи необходимо написать функцию
def mcintegral(f, limits, N)
Первый аргумент f
- это функция, которую необходимо проинтегрировать, второй аргумент limits
является кортежем пар ((x1_max, x1_min), (x2_max, x2_min), ..., (xn_max, xn_min))
, который определяет прямоугольную области интегрирования. Параметр N
задает количество точек, по которым необходимо выполнить интегрирование. Функция mcintegral
должна возвращать кортеж (I, dI)
, содержаший оценку интеграла I
и оценку ошибки интегрирования dI
.
Указания
- Считайте, что функция
f
может принимать аргументы типаnp.ndarray
.
Как тестировать локально
Установить необходимые пакеты (один раз):
pip install -r requirements.txt
Запустить тесты:
pytest -vs