【问题标题】:pcolormesh in polar coordinates极坐标中的 pcolormesh
【发布时间】:2016-03-21 16:15:22
【问题描述】:

我正在尝试使用 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()

输出不正确:

如果我用笛卡尔坐标计算它,我会得到我想要的:

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

输出:

【问题讨论】:

  • 您能解释一下“错误结果”是什么意思吗?您可以使用fig=plt.figure();ax=fig.add_subplot(111, projection='polar');ax.pocolormesh(R, Theta, psi(R,Theta)**2) 添加新的极轴。您可以将所有以; 分隔的语句写在不同的行上。那是你真正想要的吗?
  • @ChristophTerasa:也许您的评论方向正确,但我不确定,因为添加您的代码只给了我空的极轴。我试图在我的原始帖子中阐明“正确结果”的含义。
  • 我找到了原因并在下面发布了解决方案。

标签: python matplotlib


【解决方案1】:

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

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

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

解决您的问题。

【讨论】:

    猜你喜欢
    • 2021-02-16
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多