Intégrer une fonction simple
Il s’agit d’un exercice simple pour introduire le concept d’intégration de Monte Carlo.
Ici, nous allons évaluer l’intégrale \( \int_0^1 x e^{x} dx\). Nous savons que la valeur exacte est \(1\), mais la simulation donnera une solution approchée ; nous pouvons donc nous attendre à une réponse proche de \(1\). Comme vu dans la vidéo, le procédé est simple. Pour une fonction d’une seule variable \(f(x)\) :
- Récupérez les bornes de l’axe des x \((x_{min}, x_{max})\) et de l’axe des y \((\max(f(x)), \min(\min(f(x)), 0))\).
- Générez un certain nombre de points répartis uniformément dans ce rectangle.
- Multipliez l’aire du rectangle (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)) par la fraction de points situés sous \(f(x)\).
À la fin, vous aurez un cadre pour traiter des intégrales définies avec l’intégration de Monte Carlo.
Cet exercice fait partie du cours
Simulation statistique en Python
Instructions
- Dans la fonction
sim_integrate(), générez des nombres aléatoires uniformes entrexminetxmaxet affectez-les àx. - Générez des nombres aléatoires uniformes entre \(\min(\min(f(x)), 0)\) et \(\max(f(x))\) et affectez-les à
y. - Retournez la fraction de points inférieurs à \(f(x)\) multipliée par l’aire (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)).
- Enfin, utilisez une fonction lambda pour définir
funccomme \(x e^{x}\).
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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))