CommencezCommencez gratuitement

Intégrer une fonction simple

Voici un exercice simple pour introduire l'intégration de Monte Carlo.

Nous allons évaluer l'intégrale suivante : \( \int_0^1 x e^{x} dx\). Nous savons que la réponse exacte est \(1\), mais la simulation nous donnera une solution approximative, donc nous pouvons nous attendre à une valeur près de \(1\). Comme nous l'avons vu dans la vidéo, le processus est simple. Pour une fonction d'une seule variable \(f(x)\) :

  1. Obtenez 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))\).
  2. Générez un certain nombre de points répartis uniformément dans ce rectangle.
  3. 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)\).

Une fois terminé, vous aurez une méthode pour calculer des intégrales définies à l'aide de l'intégration de Monte Carlo.

Cette activité fait partie du cours

Simulation statistique en Python

Voir le cours

Instructions de l’exercice

  • Dans la fonction sim_integrate(), générez des nombres aléatoires uniformes entre xmin et xmax et assignez-les à x.
  • Générez des nombres aléatoires uniformes entre \(\min(\min(f(x)), 0)\) et \(\max(f(x))\) et assignez-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 func comme \(x e^{x}\).

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# 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))
Modifier et exécuter le code