Eine einfache Funktion integrieren
Das ist eine einfache Übung, um das Konzept der Monte-Carlo-Integration kennenzulernen.
Hier berechnen wir ein einfaches Integral \( \int_0^1 x e^{x} dx\). Wir wissen, dass die exakte Antwort \(1\) ist, aber die Simulation liefert eine Näherung, daher erwarten wir einen Wert in der Nähe von \(1\). Wie im Video gesehen, ist der Ablauf simpel. Für eine Funktion einer Variablen \(f(x)\) gilt:
- Bestimme die Grenzen der x-Achse \((x_{min}, x_{max})\) und der y-Achse \((\max(f(x)), \min(\min(f(x)), 0))\).
- Erzeuge eine Anzahl gleichverteilender Punkte in diesem Rechteck.
- Multipliziere die Fläche des Rechtecks (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)) mit dem Anteil der Punkte, die unterhalb von \(f(x)\) liegen.
Am Ende hast du ein Vorgehen, um bestimmte Integrale mithilfe der Monte-Carlo-Integration zu lösen.
Diese Übung ist Teil des Kurses
Statistische Simulation in Python
Anleitung zur Übung
- Erzeuge in der Funktion
sim_integrate()gleichverteilte Zufallszahlen zwischenxminundxmaxund weise siexzu. - Erzeuge gleichverteilte Zufallszahlen zwischen \(\min(\min(f(x)), 0)\) und \(\max(f(x))\) und weise sie
yzu. - Gib den Anteil der Punkte unterhalb von \(f(x)\) multipliziert mit der Fläche zurück (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)).
- Definiere schließlich
funcals \(x e^{x}\) mit einer Lambda-Funktion.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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))