[Wissenschaftlich-technische Berechnung mit Python] Monte-Carlo-Integration, numerische Berechnung, Numpy

Einführung

Durch Monte-Carlo-Integrationsmethode Berechnen Sie $ I = \ int_0 ^ 1 \ frac {4} {1 + x ^ 2} dx = \ pi $.

Inhalt

(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.


Code (1): ** Berechnung nach einfacher Monte-Carlo-Methode **

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

Ergebnis (1)

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 π)


Code (2): ** Monte-Carlo-Integralberechnung nach der Durchschnittswertmethode **

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

Ergebnis (2)

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 π)


Code (3): Doppelte Integration durch Mittelungsmethode

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

Ergebnis (3)

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 $.


Verweise

[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

[Wissenschaftlich-technische Berechnung mit Python] Monte-Carlo-Integration, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung mit Python] Summenberechnung, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Inverse Matrixberechnung, numpy
[Wissenschaftlich-technische Berechnung nach Python] Numerische Integration, Trapezgesetz / Simpson-Gesetz, numerische Berechnung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Lösen simultaner linearer Gleichungen, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung mit Python] Lagrange-Interpolation, numerische Berechnung
[Wissenschaftlich-technische Berechnung von Python] Grundlegende Operation des Arrays, numpy
[Wissenschaftlich-technische Berechnung mit Python] 2D-Random-Walk (Drunken-Walk-Problem), numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Histogramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Berechnung des Matrixprodukts mit @ operator, python3.5 oder höher, numpy
[Wissenschaftlich-technische Berechnung nach Python] Monte-Carlo-Simulation nach der Metropolenmethode der Thermodynamik des 2D-Anstiegsspinsystems
[Wissenschaftlich-technische Berechnung mit Python] Logistisches Diagramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Polarkoordinatendiagramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Lösen (verallgemeinerter) Eigenwertprobleme mit numpy / scipy mithilfe von Bibliotheken
[Wissenschaftlich-technische Berechnung mit Python] Lösen der gewöhnlichen Differentialgleichung zweiter Ordnung nach der Numerov-Methode, numerische Berechnung
[Wissenschaftlich-technische Berechnung von Python] Numerische Berechnung zur Ermittlung des Ableitungswerts (Differential)
[Wissenschaftlich-technische Berechnung mit Python] Spline-Interpolation dritter Ordnung, scipy
[Wissenschaftlich-technische Berechnung durch Python] Erzeugung ungleichmäßiger Zufallszahlen mit gegebener Wahrscheinlichkeitsdichtefunktion, Monte-Carlo-Simulation
[Wissenschaftlich-technische Berechnung mit Python] Numerische Lösung der gewöhnlichen Differentialgleichung zweiter Ordnung, Anfangswertproblem, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Liste der Matrizen, die in Hinpan in der numerischen linearen Algebra vorkommen
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Problems des eindimensionalen harmonischen Oszillators nach der Speed-Berle-Methode
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Eigenwertproblems der Matrix durch Potenzmultiplikation, numerische lineare Algebra
[Wissenschaftlich-technische Berechnung mit Python] Beispiel für die Visualisierung von Vektorfeld, elektrostatischem Magnetfeld, Matplotlib
[Wissenschaftlich-technische Berechnung von Python] 1-dimensionale 3D-diskrete Hochgeschwindigkeits-Fourier-Transformation, scipy
[Wissenschaftlich-technische Berechnung von Python] Anpassung durch nichtlineare Funktion, Zustandsgleichung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Lösen gewöhnlicher Differentialgleichungen, mathematischer Formeln, Sympy
[Wissenschaftlich-technische Berechnung von Python] Zeichnungsanimation der parabolischen Bewegung mit Locus, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Analytische Lösungssympathie zur Lösung von Gleichungen
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, visualisieren, matplotlib 2D-Daten mit Fehlerleiste
[Wissenschaftlich-technische Berechnung von Python] Zeichnung von 3D-gekrümmter Oberfläche, Oberfläche, Drahtrahmen, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung nach Python] Lösen der eindimensionalen Newton-Gleichung nach der Runge-Kutta-Methode 4. Ordnung
[Wissenschaftlich-technische Berechnung durch Python] Lösung des Randwertproblems gewöhnlicher Differentialgleichungen im Matrixformat, numerische Berechnung
Berechnung des Python-Numpy-Arrays
Numerische Berechnung mit Python
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, Visualisieren, Matplotlib von 2D-Konturlinien (Farbkonturen) usw.
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung von 1-dimensionalen und 2-dimensionalen Wellengleichungen nach der FTCS-Methode (explizite Methode), doppelt gekrümmte partielle Differentialgleichungen
[Numerische Berechnungsmethode, Python] Lösen gewöhnlicher Differentialgleichungen mit der Eular-Methode
[Python] Berechnungsmethode mit numpy
[Wissenschaftlich-technische Berechnung mit Python] Numerische Lösung gewöhnlicher Differentialgleichungen erster Ordnung, Anfangswertproblem, numerische Berechnung
[Wissenschaftlich-technische Berechnung durch Python] Liste der Verwendung von (speziellen) Funktionen, die in der Physik unter Verwendung von scipy verwendet werden
[Wissenschaftliche und technische Berechnung von Python] Zeichnung fraktaler Figuren [Shelpinsky-Dreieck, Bernsley-Farn, fraktaler Baum]
[Wissenschaftlich-technische Berechnung von Python] Wellen "Stöhnen" und Gruppengeschwindigkeit, Wellenüberlagerung, Visualisierung, Physik der High School
Wissenschaftlich-technische Berechnung mit Python] Zeichnen und Visualisieren von 3D-Isoplanes und deren Querschnittsansichten mit Mayavi
Einführung in die Python Numerical Calculation Library NumPy
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung der zweidimensionalen Laplace-Poisson-Gleichung für die elektrostatische Position nach der Jacobi-Methode, elliptische partielle Differentialgleichung, Randwertproblem
Schätzung von π nach der Monte-Carlo-Methode
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung der eindimensionalen instationären Wärmeleitungsgleichung nach der Crank-Nicholson-Methode (implizite Methode) und der FTCS-Methode (positive Lösungsmethode), parabolische partielle Differentialgleichung
[Wissenschaftlich-technische Berechnung nach Python] Ableitung analytischer Lösungen für quadratische und kubische Gleichungen, mathematische Formeln, Sympy
[Wissenschaftlich-technische Berechnung von Python] Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Schießmethode (1), Potential vom Well-Typ, Quantenmechanik
Erstellen Sie ein neues numerisches Python-Berechnungsprojekt
Fünfäugige KI bei der Suche nach Monte-Carlo-Bäumen
[Wissenschaftlich-technische Berechnung von Python] Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Aufnahmemethode (2), harmonisches Oszillatorpotential, Quantenmechanik