Par méthode d'intégration de Monte Carlo Calculez $ I = \ int_0 ^ 1 \ frac {4} {1 + x ^ 2} dx = \ pi $.
(1) ** Calcul par méthode simple de Monte Carlo **. La zone est évaluée par le nombre de nombres aléatoires générés qui entrent dans la zone d'intégration (combien de balles sont lancées dans le tapis).
(2) ** Calcul de l'intégrale de Monte Carlo par la méthode de la valeur moyenne **. Une méthode dans laquelle la zone de définition d'une fonction est échantillonnée uniformément et la valeur moyenne des valeurs y aux points x générés est utilisée. En général, si la valeur moyenne de y est $ y_ {av} $
Intégration $ I = \ int_a ^ b f (x) dx \ sim \ frac {b-a} {N} y_ {av} $
Sera. Par conséquent, l'astuce de cette méthode est de déterminer $ y_ {av} $ par la méthode de Monte Carlo ** [1] **.
(3) ** Calcul intégrale multiple par la méthode de la valeur moyenne. **Par exemple, $\int_1^2 \int_1^2 \frac{1}{x+y} dx =10 ln2-6ln3 \sim 0.33979807 $ Calculer.
simple_Monte_Carlo.py
import numpy as np
from random import random
"""
Méthode d'intégration simple de Monte Carlo:Nombre d'essais N de 10 à 10^Changer jusqu'à 7
"""
def f(x):
return 1.0/(1.0+x**2) #Définition des fonctions
N_calc_list = [10, 10**2, 10**3, 10**4, 10**5, 10**6, 10**7]
for N in N_calc_list:
count = 0.0
for i in range(N):
x = random() # [0,1]Stockez des nombres aléatoires uniformes jusqu'à x dans x
y = random() # [0,1]Stocker des nombres aléatoires uniformes jusqu'à y
if y < f (x): #Si vous entrez "Mato", comptez-le
count +=1.0
area = 4*count/N #Résultat d'intégration. Évaluation de π
print(N, ", ", area, ", ", abs((np.pi-area)/np.pi)) #Sortie de résultat
10 , 4.0 , 0.2732395447351627
100 , 3.08 , 0.01960555055392467
1000 , 3.184 , 0.01349867760918959
10000 , 3.12 , 0.006873155106573032
100000 , 3.14716 , 0.0017721414021786754
1000000 , 3.143488 , 0.0006033075001118286
10000000 , 3.1414272 , 5.266551333578959e-05
À partir de la gauche, le nombre total de nombres aléatoires utilisés dans la méthode de Monte Carlo N, valeur intégrée, erreur relative (erreur de π)
The_mean_value_method_Monte_Carlo.py
import numpy as np
from numpy.random import rand
"""
Intégration Monte Carlo par la méthode de la valeur moyenne
The mean value method
"""
N_calc_list = [10, 10**2, 10**3, 10**4, 10**5, 10**6, 10**7]
for N in N_calc_list:
x_array=rand(N)
y_array=4.0/(1.0+x_array**2)
area = (1.0-0.0)*np.sum(y_array)/(N) # y_Comme av, Σ_i yi/Calculer N et l'intégrer(1-0=1)Est suspendu
print(N, ", ", area, ", ", abs((np.pi-area)/np.pi))#Sortie de résultat
10 , 3.18542467193 , 0.0139521647705
100 , 3.03821388912 , 0.0329064827523
1000 , 3.14697964989 , 0.0017147341794
10000 , 3.14560900784 , 0.00127844526391
100000 , 3.14380423975 , 0.000703969738006
1000000 , 3.14195518509 , 0.000115397359081
10000000 , 3.14140220827 , 6.06206294417e-05
À partir de la gauche, le nombre total de nombres aléatoires utilisés dans la méthode de Monte Carlo N, valeur intégrée, erreur relative (erreur de π)
double_integral.py
import numpy as np
from numpy.random import rand
"""
Intégration Monte Carlo par la méthode de la valeur moyenne(Double intégration)
"""
N_calc_list = [10, 10**2, 10**3, 10**4, 10**5, 10**6, 10**7]
for N in N_calc_list:
x_array=rand(N)+1.0 #section[1,2]Séquence de nombres aléatoires uniforme de x_Stocker dans la baie
y_array=rand(N)+1.0 #section[1,2]Séquence de nombres aléatoires uniforme de y_Stocker dans la baie
z_array=1.0/(x_array+y_array) # z=1/(x+y)Colonne de z_Stocker dans la baie
area = (2.0-1.0)*(2.0-1.0)*np.sum(z_array)/(N) #Calcul intégral
print(N, ", ", area) #Sortie de résultat
10 , 0.346923895691
100 , 0.343570822229
1000 , 0.339161537421
10000 , 0.340241114706
100000 , 0.339920052165
1000000 , 0.339757274305
10000000 , 0.33977097358
À partir de la gauche, le nombre total N de nombres aléatoires utilisés dans la méthode de Monte Carlo et la valeur intégrée. La solution exacte est 10 $ ln2-6ln3 \ sim 0.33979807 $.
[1] Mark Newman, "Computational Physics",Chap10,CreatespaceIndependentPublishingPlatform(2012)
A comment to non-Japanese persons: The two codes above described are both simple for performing numerical integrations using the Monte Carlo methods. One can easily understand how the codes work. The detailed information is accessible via ref. [1].
Recommended Posts