Інтегрування простої функції
Це проста вправа, що знайомить із концепцією інтегрування Монте-Карло.
Тут ми обчислимо простий інтеграл \( \int_0^1 x e^{x} dx\). Ми знаємо, що точна відповідь — \(1\), але симуляція дасть наближене розв'язання, тож очікуємо значення, близьке до \(1\). Як ми бачили у відео, процес простий. Для функції однієї змінної \(f(x)\):
- Визначте межі по осі x \((x_{min}, x_{max})\) та по осі y \((\max(f(x)), \min(\min(f(x)), 0))\).
- Згенеруйте певну кількість рівномірно розподілених точок у цьому прямокутнику.
- Помножте площу прямокутника (\((\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))