НачатьНачать бесплатно

Интегрирование простой функции

Это вводное упражнение по методу Монте-Карло для численного интегрирования.

Здесь мы вычислим простой интеграл \( \int_0^1 x e^{x} dx\). Точное значение равно \(1\), однако симуляция даст нам приближённый результат, поэтому ожидайте ответ, близкий к \(1\). Как было показано в видео, процесс достаточно прост. Для функции одной переменной \(f(x)\):

  1. Определите границы по оси X \((x_{min}, x_{max})\) и по оси Y \((\max(f(x)), \min(\min(f(x)), 0))\).
  2. Сгенерируйте набор равномерно распределённых точек внутри этого прямоугольника.
  3. Умножьте площадь прямоугольника (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)) на долю точек, лежащих ниже \(f(x)\).

По завершении упражнения у вас будет готовый инструмент для вычисления определённых интегралов методом Монте-Карло.

Это упражнение является частью курса

Статистическое моделирование на Python

Посмотреть курс

Инструкции к упражнению

  • В функции sim_integrate() сгенерируйте равномерно распределённые случайные числа в диапазоне от xmin до xmax и присвойте их переменной x.
  • Сгенерируйте равномерно распределённые случайные числа в диапазоне от \(\min(\min(f(x)), 0)\) до \(\max(f(x))\) и присвойте их переменной y.
  • Верните долю точек, лежащих ниже \(f(x)\), умноженную на площадь прямоугольника (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)).
  • Наконец, с помощью лямбда-функции определите func как \(x e^{x}\).

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# Define the sim_integrate function
def sim_integrate(func, xmin, xmax, sims):
    x = np.random.uniform(____, ____, sims)
    y = np.random.uniform(____, ____, sims)
    area = (max(y) - min(y))*(xmax-xmin)
    result = area * sum(____(____) < abs(func(x)))/sims
    return result
    
# Call the sim_integrate function and print results
result = sim_integrate(func = lambda x: ____, xmin = 0, xmax = 1, sims = 50)
print("Simulated answer = {}, Actual Answer = 1".format(result))
Редактировать и запускать код