Integrare una funzione semplice
Questo è un semplice esercizio che introduce il concetto di Integrazione Monte Carlo.
Qui valuteremo un integrale semplice \( \int_0^1 x e^{x} dx\). Sappiamo che la risposta esatta è \(1\), ma la simulazione ci darà una soluzione approssimata, quindi possiamo aspettarci un valore vicino a \(1\). Come visto nel video, il processo è semplice. Per una funzione di una variabile \(f(x)\):
- Ottieni i limiti dell'asse x \((x_{min}, x_{max})\) e dell'asse y \((\max(f(x)), \min(\min(f(x)), 0))\).
- Genera un certo numero di punti distribuiti uniformemente in questo rettangolo.
- Moltiplica l'area del rettangolo (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)) per la frazione di punti che si trovano sotto \(f(x)\).
Al termine, avrai uno schema per gestire gli integrali definiti usando l'Integrazione Monte Carlo.
Questo esercizio fa parte del corso
Simulazione statistica in Python
Istruzioni dell'esercizio
- Nella funzione
sim_integrate(), genera numeri casuali uniformi traxminexmaxe assegnali ax. - Genera numeri casuali uniformi tra \(\min(\min(f(x)), 0)\) e \(\max(f(x))\) e assegnali a
y. - Restituisci la frazione di punti minori di \(f(x)\) moltiplicata per l'area (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)).
- Infine, usa una funzione lambda per definire
funccome \(x e^{x}\).
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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))