我正在尝试使用 matplotlib 绘制 H 原子波函数的概率密度。我设法在笛卡尔坐标中做到这一点,但对于以后的计算,如果我在极坐标中指定 psi 会更好。现在我试图使绘图工作,但它给出了错误的结果(尽管绘图的轴线应该是笛卡尔坐标)。知道如何解决这个问题吗?
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.cm as cm
from scipy import integrate
Z = 1
a_0 = 1
pi = np.pi
n = 300
r = np.linspace(-10, 10, n)
theta = np.linspace(0, 2*pi, n)
R, Theta = np.meshgrid(r, theta)
def psi(r,theta):
return 1/(4*sqrt(2*pi))*(Z/a_0)**(3/2) * Z*r/a_0*np.exp(-Z*r/(2*a_0))*np.cos(theta)
X1 = R*np.cos(Theta)
X2 = R*np.sin(Theta)
plt.pcolormesh(X1,X2,psi(R,Theta)**2)
plt.axis('equal')
plt.show()
Run Code Online (Sandbox Code Playgroud)
不正确的输出:
如果我用笛卡尔坐标计算它,我会得到我想要的:
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.cm as cm
from scipy import integrate
Z = 1
a_0 = 1
pi = np.pi
n = 300
x1 = np.linspace(-10, 10, n)
x2 = np.linspace(-10,10, n)
X1, X2 = np.meshgrid(x1,x2)
def r(x,y):
return sqrt(x**2 + y**2)
def psi(x,y):
return 1/(4*sqrt(2*pi))*(Z/a_0)**(3/2) * Z*r(x,y)/a_0*np.exp(-Z*r(x,y)/(2*a_0))*x/r(x,y)
plt.pcolormesh(X1,X2,psi(X1,X2)**2)
plt.axis('equal')
plt.show()
Run Code Online (Sandbox Code Playgroud)
输出:
极坐标中的半径是错误的,因为它是负数,这反过来又会使极坐标中的 psi 计算失败。只需改变
r = np.linspace(-10, 10, n)
Run Code Online (Sandbox Code Playgroud)
到
r = np.linspace(0, 10, n)
Run Code Online (Sandbox Code Playgroud)
来解决你的问题。

| 归档时间: |
|
| 查看次数: |
6733 次 |
| 最近记录: |