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) **
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>
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).
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
E1=2.46740110027234 (Ry) E2 = 9.869604401089358 (Ry) E3 = 22.20660990245106 (Ry) ... [1].
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()
Abbildung. Für gleichmäßige Funktionen. Der Nullpunkt ist der Eigenwert.
Abbildung. Für ungerade Funktionen.
Zahl.Grundzustandswellenfunktion
Genaue Lösung Im Vergleich zu $ E_1 = 2.4674011 $ entspricht dies einem Fehler von ca. 4%.
Abbildung Erster angeregter Zustand
Im Vergleich zur exakten Lösung liegt sie innerhalb von 6%.
Eindimensionale Schrödinger-Gleichung
Ist ** in einem gebundenen Zustand **
** 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" **.
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.
Abbildung 1: Zwei Wellenfunktionen durch Lösen von Differentialgleichungen von links und rechts. Die Lösungen sind nicht reibungslos miteinander verbunden (entsprechend 3-1).
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.
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.
[1] Qiita-Artikel [Wissenschaftliche / technische Berechnung von Python] Lösen gewöhnlicher Differentialgleichungen zweiter Ordnung nach der Numerov-Methode, numerische Berechnung
Recommended Posts