Een eenvoudige functie integreren
Dit is een korte oefening als introductie op het concept Monte Carlo-integratie.
We evalueren hier een eenvoudige integraal \( \int_0^1 x e^{x} dx\). We weten dat het exacte antwoord \(1\) is, maar een simulatie geeft ons een benaderde oplossing, dus we verwachten een uitkomst dicht bij \(1\). Zoals we in de video zagen, is het proces eenvoudig. Voor een eendimensionale functie \(f(x)\):
- Bepaal de grenzen van de x-as \((x_{min}, x_{max})\) en de y-as \((\max(f(x)), \min(\min(f(x)), 0))\).
- Genereer een aantal uniform verdeelde punten in deze rechthoek.
- Vermenigvuldig de oppervlakte van de rechthoek (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)) met het aandeel punten dat onder \(f(x)\) ligt.
Na afloop heb je een raamwerk om bepaalde integralen op te lossen met Monte Carlo-integratie.
Deze oefening maakt deel uit van de cursus
Statisticale simulatie in Python
Oefeninstructies
- Genereer in de functie
sim_integrate()uniforme willekeurige getallen tussenxminenxmaxen ken die toe aanx. - Genereer uniforme willekeurige getallen tussen \(\min(\min(f(x)), 0)\) en \(\max(f(x))\) en ken die toe aan
y. - Retourneer het deel van de punten dat kleiner is dan \(f(x)\), vermenigvuldigd met de oppervlakte (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)).
- Gebruik tot slot een lambda-functie om
functe definiëren als \(x e^{x}\).
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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))