2016-03-20 85 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 = add_subplot(111、projection = 'polar'); ax.pocolormesh(R、Theta、psi(R、Theta)** 2 ) '。 ';'で区切られたすべてのステートメントは、異なる行に書くことができます。それはあなたが実際に欲しいものですか? –

+0

@ChristophTerasa:あなたのコメントは正しい方向にあるかもしれませんが、あなたのコードから空の極軸しか得られないのでわかりません。私は元の投稿で「正しい結果」を意味するものを明確にしようとしました。 – student

+0

私はその原因を見つけ、以下に解決策を掲載しました。 –

答えて

1

極座標の半径は負であるため、間違っています。これは極座標でのpsiの計算を失敗させます。単にあなたの問題を解決するために

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

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

を変更。

関連する問題