2016-03-20 158 views
0

我想绘制用matplotlib H原子的波函数的概率密度。我设法在笛卡儿坐标系中进行,但如果我在极坐标系中指定psi,对于以后的计算它会更好。现在我正在尝试使情节起作用,但它给出了错误的结果(尽管如此,绘图的轴线应该是笛卡尔坐标)。任何想法如何解决这个问题?pcolormesh极坐标

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

不正确的输出:

Incorrect output

如果我以直角坐标计算的话,我得到我想要的东西:

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

输出:

correct output

+0

你能解释“错误的结果”是什么意思吗?您可以使用'fig = plt.figure(); ax = fig.add_subplot(111,projection ='polar'); ax.pocolormesh(R,Theta,psi(R,Theta)** 2 )'。你可以在不同的行上写出用';'分隔的所有语句。这是你真正想要的吗? –

+0

@ChristophTerasa:也许你的评论是朝着正确的方向发展的,但我不确定,因为你的代码只给出了空的极坐标轴。我试图在我原来的帖子中说清楚,我的意思是“正确的结果”。 – student

+0

我找到了原因并在下面发布了解决方案。 –

回答

1

极坐标中的半径是错误的,因为它是负值,这又会使您在极坐标中的psi计算失败。简单地改变

r = np.linspace(-10, 10, n) 

r = np.linspace(0, 10, n) 

解决您的问题。