Durch Monte-Carlo-Integrationsmethode Berechnen Sie $ I = \ int_0 ^ 1 \ frac {4} {1 + x ^ 2} dx = \ pi $.
(1) ** Berechnung nach einfacher Monte-Carlo-Methode **. Der Bereich wird danach bewertet, wie viele generierte Zufallszahlen in den Integrationsbereich gelangen (wie viele Bälle in die Matte geworfen werden).
(2) ** Monte-Carlo-Integralberechnung nach der Durchschnittswertmethode **. Ein Verfahren, bei dem der Definitionsbereich einer Funktion gleichmäßig abgetastet wird und der Durchschnittswert der y-Werte an den erzeugten x-Punkten verwendet wird. Im Allgemeinen, wenn der Durchschnittswert von y $ y_ {av} $ ist
Integration $ I = \ int_a ^ bf (x) dx \ sim \ frac {b-a} {N} y_ {av} $
Wird sein. Daher besteht der Trick dieser Methode darin, $ y_ {av} $ mit der Monte-Carlo-Methode ** [1] ** zu bestimmen.
(3) ** Mehrfachintegralberechnung nach der Durchschnittswertmethode. **Als Beispiel, $\int_1^2 \int_1^2 \frac{1}{x+y} dx =10 ln2-6ln3 \sim 0.33979807 $ Berechnen.
simple_Monte_Carlo.py
import numpy as np
from random import random
"""
Einfache Monte-Carlo-Integrationsmethode:Anzahl der Versuche N von 10 bis 10^Ändern Sie bis zu 7
"""
def f(x):
return 1.0/(1.0+x**2) #Funktionsdefinition
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]Speichern Sie einheitliche Zufallszahlen bis zu x in x
y = random() # [0,1]Speichern Sie einheitliche Zufallszahlen bis zu in y
if y < f (x): #Wenn Sie "Mato" eingeben, zählen Sie es
count +=1.0
area = 4*count/N #Integrationsergebnis. Auswertung von π
print(N, ", ", area, ", ", abs((np.pi-area)/np.pi)) #Ergebnisausgabe
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
Von links die Gesamtzahl der in der Monte-Carlo-Methode N verwendeten Zufallszahlen, integrierter Wert, relativer Fehler (Fehler von π)
The_mean_value_method_Monte_Carlo.py
import numpy as np
from numpy.random import rand
"""
Monte-Carlo-Integration nach der Durchschnittswertmethode
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_Wie av, Σ_i yi/Berechnen Sie N und integrieren Sie es(1-0=1)Hängt
print(N, ", ", area, ", ", abs((np.pi-area)/np.pi))#Ergebnisausgabe
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
Von links die Gesamtzahl der in der Monte-Carlo-Methode N verwendeten Zufallszahlen, integrierter Wert, relativer Fehler (Fehler von π)
double_integral.py
import numpy as np
from numpy.random import rand
"""
Monte-Carlo-Integration nach der Durchschnittswertmethode(Doppelte Integration)
"""
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 #Sektion[1,2]Einheitliche Zufallszahlenfolge von x_Im Array speichern
y_array=rand(N)+1.0 #Sektion[1,2]Einheitliche Zufallszahlenfolge von y_Im Array speichern
z_array=1.0/(x_array+y_array) # z=1/(x+y)Spalte von z_Im Array speichern
area = (2.0-1.0)*(2.0-1.0)*np.sum(z_array)/(N) #Integrale Berechnung
print(N, ", ", area) #Ergebnisausgabe
10 , 0.346923895691
100 , 0.343570822229
1000 , 0.339161537421
10000 , 0.340241114706
100000 , 0.339920052165
1000000 , 0.339757274305
10000000 , 0.33977097358
Von links die Gesamtzahl N der bei der Monte-Carlo-Methode verwendeten Zufallszahlen und der integrierte Wert. Die genaue Lösung ist $ 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