Całkowanie prostej funkcji
To ćwiczenie wprowadza pojęcie całkowania metodą Monte Carlo.
Obliczamy prostą całkę \( \int_0^1 x e^{x} dx\). Dokładna wartość tej całki wynosi \(1\), ale symulacja da nam przybliżony wynik – spodziewaj się więc wartości bliskiej \(1\). Jak pokazano w filmie, proces jest prosty. Dla funkcji jednej zmiennej \(f(x)\):
- Wyznacz granice osi x \((x_{min}, x_{max})\) i osi y \((\max(f(x)), \min(\min(f(x)), 0))\).
- Wygeneruj zestaw punktów o rozkładzie jednostajnym wewnątrz tego prostokąta.
- Pomnóż pole prostokąta (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)) przez ułamek punktów leżących poniżej \(f(x)\).
Po wykonaniu ćwiczenia będziesz dysponować gotowym schematem obliczania całek oznaczonych metodą Monte Carlo.
To ćwiczenie jest częścią kursu
Symulacje statystyczne w Pythonie
Instrukcje do ćwiczenia
- W funkcji
sim_integrate()wygeneruj jednostajnie rozłożone liczby losowe z przedziału odxmindoxmaxi przypisz je dox. - Wygeneruj jednostajnie rozłożone liczby losowe z przedziału od \(\min(\min(f(x)), 0)\) do \(\max(f(x))\) i przypisz je do
y. - Zwróć ułamek punktów leżących poniżej \(f(x)\) pomnożony przez pole prostokąta (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)).
- Na koniec użyj funkcji lambda, aby zdefiniować
funcjako \(x e^{x}\).
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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))