Монте-Карло интегрирование
В этом задании Вам предстоит разработать инструмент для многомерного численного интегрирования методом Монте-Карло. Метод заключается в следующем: пусть задана действительная функиця 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