[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

Einführung

Mit Python ** [Zeitunabhängige eindimensionale Schrödinger-Gleichung] für ein gegebenes Potential $ V (x) $ (https://ja.wikipedia.org/wiki/%E3%82%B7%E3 % 83% A5% E3% 83% AC% E3% 83% BC% E3% 83% 87% E3% 82% A3% E3% 83% B3% E3% 82% AC% E3% 83% BC% E6% 96 % B9% E7% A8% 8B% E5% BC% 8F # .E6.99.82.E9.96.93.E3.81.AB.E4.BE.9D.E5.AD.98.E3.81.97.E3.81. AA.E3.81.84.E3.82.B7.E3.83.A5.E3.83.AC.E3.83.BC.E3.83.87.E3.82.A3.E3.83.B3.E3.82. AC.E3.83.BC.E6.96.B9.E7.A8.8B.E5.BC.8F) **

\frac{d^2}{d x^2}\psi(x) +k^2(x) \psi =0 {\tag 1}

k^2(x) = \frac{2m}{\hbar^2}(E- V(x)\) {\tag 2}

Durch Lösen ** durch eine numerische Berechnungsmethode, die als Schießmethode [Nachtrag] bezeichnet wird, werden die Wellenfunktion und der Energieeigenwert erhalten. ** ** **

In diesem Artikel ** Well-Type-Potenzial, das ein typisches Problem in diesem Bereich darstellt (https://ja.wikipedia.org/wiki/%E4%BA%95%E6%88%B8%E5%9E%8B% E3% 83% 9D% E3% 83% 86% E3% 83% B3% E3% 82% B7% E3% 83% A3% E3% 83% AB) ** Die ** Numerov-Methode [1] ** wird verwendet, um die Differentialgleichungen zu lösen.

Die Aufnahmemethode ist eine herkömmliche Methode, die das Randwertproblem gewöhnlicher Differentialgleichungen als Anfangswertproblem löst und seit langem verwendet wird.

** Python-Code mit der Aufnahmemethode ist im Internet schwer zu finden (Stand: 4. September 2017). Wir hoffen, dass dieser Artikel zum Verständnis der Quantenmechanik durch den Leser beiträgt. ** </ font>


Code-Inhalt: Tiefes Potenzial

Der gesamte Code ist [Rydberg Atomic Unit](https://ja.wikipedia.org/wiki/%E5%8E%9F%E5%AD%90%E5%8D%98%E4%BD%8D%E7%B3% BB) wird verwendet. das ist,

Elektronenmasse $ m = 1/2 $ Dirac-Konstante $ \ hbar = 1 $ Länge in Bohr $ a_ {B} = (0,529177 Å) $ Einheit, Energie $ 1 Ry = 13.6058 eV = $

Ist zu sein.

Finden Sie die Wellenfunktion und den Energieeigenwert des gebundenen Zustands. Die zu durchsuchende Energie ist E = 0-20 (Ry).

t1.png Abbildung 1. Gut geformtes Potential. Die Breite des Brunnens beträgt 2 Bohr und die Höhe des Brunnens beträgt 1000 Ry.


Für unendlich tiefe Brunnen ist die genaue Lösung des Energieeigenwerts

E_n = n^2 \pi^2/4 {\tag 2} Und

E1=2.46740110027234 (Ry) E2 = 9.869604401089358 (Ry) E3 = 22.20660990245106 (Ry) ... [1].


Code: Tiefbrunnenpotential

Aufgrund der Testberechnung sind die Berechnungsbedingungen relativ locker. Wenn Sie die Genauigkeit verbessern möchten Es ist gut, die Gitterbreite delta_x zu reduzieren.


"""
Aufnahmemethode+Zeitunabhängige eindimensionale Schrödinger-Gleichungslösung nach der Numerov-Methode
Tiefes, wohlgeformtes Potenzial
1 Sept. 2017
"""
import numpy as np
import matplotlib.pyplot as plt

delta_x=0.05

xa =1 #Brunnengrenze. x=Es gibt ein Brunnenende bei ± xa.
eps_E=0.005 #Konvergenzbedingung

nn=5 #Xa die Koordinaten beider Enden bei der Integration von beiden Enden(Wann-xa0)Parameter, der angibt, wie oft
xL0, xR0  = -nn*xa, nn*xa

Nx =  int((xR0-xL0)/delta_x)

delta_x = (xR0-xL0)/(Nx)
i_match = int((xa-xL0)/delta_x)  #Ein Index der Position, um die Übereinstimmung zwischen uL und uR zu überprüfen. Ich habe es als Grenze des Brunnens gewählt.


nL = i_match
nR = Nx-nL

print(xL0,xR0, i_match, delta_x)
print(nL,nR)

uL = np.zeros([nL],float)
uR = np.zeros([nR],float)

E=np.pi**2/4

print("E= ",E)
print("xL0,xR0, i_match, delta_x=",xL0,xR0, i_match, delta_x)
print("Nx, nL,nR=",Nx, nL,nR)


def V(x): #Potenzialeinstellung gut eingeben
    if np.abs(x) >  xa :
        v = 1000.0
    else :
        v = 0
        
    return v

#Randbedingung / Anfangsbedingung eingestellt
def set_condition():
    uL[0]  = 0
    uL[1] =1e-6

    uR[0] = 0
    uR[1] =1e-6
#
set_condition()


def setk2 (E): # for E<0
    for i in range(Nx+1):
        xxL = xL0 + i*delta_x
        xxR = xR0 -  i*delta_x
        k2L[i] = E-V(xxL) 
        k2R[i] = E-V(xxR) 
        
        
def Numerov (N,delta_x,k2,u):  #Entwicklung nach der Numerov-Methode
    b = (delta_x**2)/12.0

    for i in range(1,N-1):
        u[i+1] = (2*u[i]*(1-5*b*k2[i])-(1+b*k2[i-1])*u[i-1])/(1+b*k2[i+1]) 
        
        
xL=np.zeros([Nx])
xR=np.zeros([Nx])

for i in range (Nx):
    xL[i] = xL0 + i*delta_x
    xR[i] = xR0 - i*delta_x
    
k2L=np.zeros([Nx+1])
k2R=np.zeros([Nx+1])

setk2(E)



def E_eval():
    uLdash = (uL[-1]-uL[-2])/delta_x
    uRdash = (uR[-2]-uR[-1])/delta_x
    logderi_L=  uLdash/uL[-1]
    logderi_R=  uRdash/uR[-1]    
    return (logderi_L- logderi_R)/(logderi_L+logderi_R)





#Mögliches Funktionsdiagramm
XXX= np.linspace(xL0,xR0, Nx)
POT=np.zeros([Nx])
for i in range(Nx):
    POT[i] = V(xL0 + i*delta_x)
plt.xlabel('X (Bohr)') #x-Achsenbeschriftung
plt.ylabel('V (X) (Ry)') #y-Achsenbeschriftung
plt.hlines([E], xL0,xR0, linestyles="dashed")  #Energy
plt.plot(XXX,POT,'-',color='blue')
plt.show()
#
#k^2(x)Handlung
XXX= np.linspace(xL0,xR0, Nx+1)
plt.plot(XXX, k2L,'-')
plt.show()
#

def normarize_func(u):
    factor = ((xR0-xL0)/Nx)*(np.sum(u[1:-2]**2))
    return factor
def plot_eigenfunc(color_name):  
    uuu=np.concatenate([uL[0:nL-2],uR[::-1]],axis=0)
    XX=np.linspace(xL0,xR0, len(uuu))

    factor=np.sqrt(normarize_func(uuu))

    plt.plot(XX,uuu/factor,'-',color=color_name,label='Psi')
    plt.plot(XX,(uuu/factor)**2,'-',color='red',label='| Psi |^2')
 
    plt.xlabel('X (Bohr)') #x-Achsenbeschriftung
    plt.ylabel('') #y-Achsenbeschriftung
    plt.legend(loc='upper right')
    plt.show()


#Eine Lösung finden

#Randbedingung 1(Gleiche Funktion)
EEmin=0.1
EEmax = 20
delta_EE=0.01

NE = int((EEmax-EEmin)/delta_EE)
Elis=[]
Solved_Eigenvalu=[]
check_Elis= []
for i in range(NE+1):
    EE=EEmin+i*(EEmax-EEmin)/NE


    set_condition_even()
    setk2(EE)

    Numerov (nL,delta_x,k2L,uL)
    Numerov (nR,delta_x,k2R,uR)
 
    a1= E_eval()
  
    if a1 :  
        Elis.append(EE)
        check_Elis.append(a1)
        if np.abs(a1) <= eps_E :  #Zeichnen Sie, wenn Sie eine Lösung finden
            print("Eigen_value = ", EE)
            Solved_Eigenvalu.append(EE)
            plot_eigenfunc("blue")
            
plt.plot(Elis, check_Elis, 'o',markersize=3, color='blue',linewidth=1)
plt.grid(True) #Erstellen Sie einen Diagrammrahmen
plt.xlim(EEmin, EEmax) #Der Bereich von x zum Zeichnen[xmin,xmax]Zu
plt.ylim(-10, 10) #Der Bereich von y zum Zeichnen[ymin,ymax]Zu
plt.hlines([0], EEmin,EEmax, linestyles="dashed")  # y=Zeichnen Sie eine gestrichelte Linie auf y1 und y2
plt.xlabel('Energy (Ry)') #x-Achsenbeschriftung
plt.ylabel('Delta_E_function') #y-Achsenbeschriftung
plt.show()

#Randbedingung 2(Komische Funktion)
EEmin=0.1
EEmax = 20
delta_EE=0.01

NE = int((EEmax-EEmin)/delta_EE)
Elis=[]
Solved_Eigenvalu=[]
check_Elis= []
for i in range(NE+1):
    EE=EEmin+i*(EEmax-EEmin)/NE
   
    nL = i_match
    nR = Nx-nL
    
    uL = np.zeros([nL],float)
    uR = np.zeros([nR],float)

    set_condition_odd()
    setk2(EE)

    Numerov (nL,delta_x,k2L,uL)
    Numerov (nR,delta_x,k2R,uR)
 
    a1= E_eval()
    #print ("a1=",a1)
    if a1 :  #Wenn a1 wahr ist
        Elis.append(EE)
        check_Elis.append(a1)
        if np.abs(a1) <= eps_E :           
            print("Eigen_value = ", EE)
            Solved_Eigenvalu.append(EE)
            plot_eigenfunc("blue")
    

plt.plot(Elis, check_Elis, 'o',markersize=3, color='red',linewidth=1)
plt.grid(True) #Erstellen Sie einen Diagrammrahmen
plt.xlim(EEmin, EEmax) #Der Bereich von x zum Zeichnen[xmin,xmax]Zu
plt.ylim(-10, 10) #Der Bereich von y zum Zeichnen[ymin,ymax]Zu
plt.hlines([0], EEmin,EEmax, linestyles="dashed")  # y=Zeichnen Sie eine gestrichelte Linie auf y1 und y2
plt.xlabel('Energy (Ry)') #x-Achsenbeschriftung
plt.ylabel('Delta_E_function') #y-Achsenbeschriftung
plt.show()


Ergebnis (1)

(1-A) Berechnung der Bewertungsfunktion

s1.png Abbildung. Für gleichmäßige Funktionen. Der Nullpunkt ist der Eigenwert.

s2.png Abbildung. Für ungerade Funktionen.


(1-B) Erhaltene Wellenfunktion und intrinsische Energie

スクリーンショット 2017-09-04 0.25.47.png Zahl.Grundzustandswellenfunktion\psi(x)Und Wahrscheinlichkeitsdichte|\psi(x)|^2

Genaue Lösung Im Vergleich zu $ E_1 = 2.4674011 $ entspricht dies einem Fehler von ca. 4%.

スクリーンショット 2017-09-04 0.25.56.png Abbildung Erster angeregter Zustand

Im Vergleich zur exakten Lösung liegt sie innerhalb von 6%. E_2 = 9.8696044 (Ry)


Nachtrag: Aufnahmemethode (Aufnahmemethode)

(1. Zuallererst

Eindimensionale Schrödinger-Gleichung \frac{d^2}{d x^2}\psi(x) +k^2(x) \psi =0 {\tag 1}

k^2(x) = \frac{2m}{\hbar^2}(E- V(x)\) {\tag 2}

Ist ** in einem gebundenen Zustand **

\lim_{x \to \infty} \psi(x) = 0 {\tag 3} Treffen.

** Dies ist die Randbedingung. ** Löse die obige Gleichung (1,2) unter der Randbedingung (3). ** Zu diesem Zeitpunkt gibt es nicht immer eine Lösung für $ E $. Die Lösung existiert nur, wenn ein bestimmtes $ E = E_n $ ist. Es wird ein eindeutiger Wert genannt. Und die Funktion zu dieser Zeit wird als Eigenfunktion bezeichnet. ** ** ** Das heißt, Gleichung (1) führt zu einem mathematischen Problem, das als ** Eigengleichung ** bezeichnet wird. Wir nennen es ** "Unique Value Problem" **.


(2) Aufnahmemethode

Die Aufnahmemethode ist eine der Lösungen für das Eigenwertproblem von Differentialgleichungen. Stellen Sie sich eine Funktion vor, die die Randbedingung erfüllt, integrieren Sie die integrale normale Differentialgleichung von beiden Enden als Anfangswertproblem und untersuchen Sie, ob beide Lösungen an einem bestimmten Punkt übereinstimmen. ** Wenn die richtigen Energieeigenwerte angegeben sind, stimmen beide Lösungen überein. ** ** **

Die Aufnahmemethode nutzt diese Eigenschaft [2]. Führen Sie die folgenden Schritte aus, um das Eigenwertproblem zu lösen.

1.Lösen Sie die Differentialgleichung von beiden Enden, indem Sie eine Schätzung des Energieeigenwerts angeben
2.Überprüfen Sie, ob beide Lösungsfunktionen an einem geeigneten Punkt übereinstimmen

3-1.Wenn sie nicht übereinstimmen(Abbildung 1)Ändert den geschätzten Energieeigenwert und kehrt zu 1 zurück
3-2.Wenn sie übereinstimmen(Figur 2)Hat Energieeigenwerte und Eigenfunktionen erhalten.

スクリーンショット 2017-09-04 1.28.38.png Abbildung 1: Zwei Wellenfunktionen durch Lösen von Differentialgleichungen von links und rechts. Die Lösungen sind nicht reibungslos miteinander verbunden (entsprechend 3-1).

スクリーンショット 2017-09-04 1.28.56.png Abbildung 2: Wenn die Lösungen reibungslos verbunden sind. Die zu diesem Zeitpunkt gegebene Energie und die erhaltene Wellenfunktion sind die korrekten Eigenwerte und Eigenfunktionen.

Nachtrag: Wie bewertet man die Lösung?

Darüber wurde es verwechselt,

Wissenschaftliche / technische Berechnung durch Python Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Aufnahmemethode (2), Oberschwingungsoszillatorpotential, Quantenmechanik Bewertungsmethode)

Bitte beziehen Sie sich auf.


Verweise

[1] Qiita-Artikel [Wissenschaftliche / technische Berechnung von Python] Lösen gewöhnlicher Differentialgleichungen zweiter Ordnung nach der Numerov-Methode, numerische Berechnung

Recommended Posts

[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
[Wissenschaftlich-technische Berechnung von Python] Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Aufnahmemethode (2), harmonisches Oszillatorpotential, Quantenmechanik
[Wissenschaftlich-technische Berechnung nach Python] Lösen der eindimensionalen Newton-Gleichung nach der Runge-Kutta-Methode 4. Ordnung
[Wissenschaftlich-technische Berechnung von Python] Anpassung durch nichtlineare Funktion, Zustandsgleichung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Lösen der gewöhnlichen Differentialgleichung zweiter Ordnung nach der Numerov-Methode, numerische Berechnung
Lösen einer eindimensionalen Wellengleichung mit der Differenzmethode (Python)
Peeping in Python, keine gruselige Quantenmechanik 2: endliches Potential vom Typ Well
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Problems des eindimensionalen harmonischen Oszillators nach der Speed-Berle-Methode
[Wissenschaftlich-technische Berechnung mit Python] Lösen simultaner linearer Gleichungen, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung mit Python] Summenberechnung, numerische Berechnung
[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
[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 durch Python] Lösung des Randwertproblems gewöhnlicher Differentialgleichungen im Matrixformat, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Lösen (verallgemeinerter) Eigenwertprobleme mit numpy / scipy mithilfe von Bibliotheken
[Wissenschaftlich-technische Berechnung mit Python] Analytische Lösungssympathie zur Lösung von Gleichungen
[Wissenschaftlich-technische Berechnung mit Python] Inverse Matrixberechnung, numpy
[Wissenschaftlich-technische Berechnung mit Python] Histogramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Lagrange-Interpolation, numerische Berechnung
[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
[Wissenschaftlich-technische Berechnung mit Python] Logistisches Diagramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Polarkoordinatendiagramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Liste der Matrizen, die in Hinpan in der numerischen linearen Algebra vorkommen
[Wissenschaftlich-technische Berechnung durch Python] Liste der Verwendung von (speziellen) Funktionen, die in der Physik unter Verwendung von scipy verwendet werden
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Eigenwertproblems der Matrix durch Potenzmultiplikation, numerische lineare Algebra
[Wissenschaftlich-technische Berechnung mit Python] Spline-Interpolation dritter Ordnung, scipy
Peeping in Python, keine beängstigende Quantenmechanik 1: Unendliches Potenzial vom Typ Well
[Numerische Berechnungsmethode, Python] Lösen gewöhnlicher Differentialgleichungen mit der Eular-Methode
[Wissenschaftlich-technische Berechnung von Python] Grundlegende Operation des Arrays, numpy
[Wissenschaftlich-technische Berechnung nach Python] Monte-Carlo-Simulation nach der Metropolenmethode der Thermodynamik des 2D-Anstiegsspinsystems
[Wissenschaftlich-technische Berechnung nach Python] Numerische Integration, Trapezgesetz / Simpson-Gesetz, numerische Berechnung, scipy
[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 mit Python] 2D-Random-Walk (Drunken-Walk-Problem), numerische Berechnung