Python 使用matplotlib绘制能量势图
我想画出引力势能图来突出它的极值(两个天体周围的拉格朗日点) 以下是返回每组坐标x和y的电势的函数:Python 使用matplotlib绘制能量势图,python,matplotlib,mplot3d,Python,Matplotlib,Mplot3d,我想画出引力势能图来突出它的极值(两个天体周围的拉格朗日点) 以下是返回每组坐标x和y的电势的函数: def gravitational_potential(M,m,R,x,y): G = 6.674*10**(-11) omega2 = G*(M+m)/(R**3) r = np.sqrt(x**2+y**2) r2 = R*m/(M+m) r1 = R-r2 phi = -G*(M/abs(r-r1)+m/abs(r-r2))-1/2*ome
def gravitational_potential(M,m,R,x,y):
G = 6.674*10**(-11)
omega2 = G*(M+m)/(R**3)
r = np.sqrt(x**2+y**2)
r2 = R*m/(M+m)
r1 = R-r2
phi = -G*(M/abs(r-r1)+m/abs(r-r2))-1/2*omega2*(x**2+y**2)
return phi
我想使用meshgrid
和plot\u surface
来绘制曲面和电势的轮廓,但它不起作用
我做错了什么
附言:我设法用沃尔夫拉玛法画出了潜力,所以我知道数学是可行的
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
def gravitational_potential(M,m,R,x,y):
G = 6.674*10**(-11)
omega2 = G*(M+m)/(R**3)
r = np.sqrt(x**2+y**2)
r2 = R*m/(M+m)
r1 = R-r2
phi = -G*(M/abs(r-r1)+m/abs(r-r2))-1/2*omega2*(x**2+y**2)
return phi
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y = np.meshgrid(np.arange(-20, 20, 0.5), np.arange(-20, 20, 0.5))
M = 10
m = 1
R = 10
Z = gravitational_potential(M,m,R,X,Y)
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.9)
cset = ax.contour(X, Y, Z, zdir='z', offset=-40, cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='x', offset=-20, cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='y', offset=20, cmap=cm.coolwarm)
ax.set_xlabel('X')
ax.set_xlim(-20, 20)
ax.set_ylabel('Y')
ax.set_ylim(-20, 20)
ax.set_zlabel('Z')
ax.set_zlim(-40, 40)
plt.show()
当我执行它时,我得到以下信息:
runfile('C:/Users/python/Google Drive/lagrangepoint_maths/potential/gravitational_potential.py', wdir='C:/Users/python/Google Drive/lagrangepoint_maths/potential')
C:/Users/python/Google Drive/lagrangepoint_maths/potential/gravitational_potential.py:13: RuntimeWarning: divide by zero encountered in divide
phi = -G*(M/abs(r-r1)+m/abs(r-r2))-1/2*omega2*(x**2+y**2)
这不是我真正想要的。Z有点问题。我想要这样的东西:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.9)
cset = ax.contour(X, Y, Z, zdir='z', offset=-100, cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='x', offset=-40, cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='y', offset=40, cmap=cm.coolwarm)
ax.set_xlabel('X')
ax.set_xlim(-40, 40)
ax.set_ylabel('Y')
ax.set_ylim(-40, 40)
ax.set_zlabel('Z')
ax.set_zlim(-100, 100)
plt.show()
所有这些都是我们可以逐一调试的:
0
。您可以从“未来”导入除法,或将代码更正为用浮点数除法
rstride=8,cstride=8
为什么这个问题被否决得如此之多?“但它不起作用”不是一个有用的问题描述。您应该提供问题的详细信息和完整的错误回溯。由于代码中包含许多琐碎的错误(例如使用
^
而不是**
,或者使用math
而不是numpy
),因此不清楚您在哪一点上有问题。请纠正这些错误,并明确说明您不喜欢该绘图的地方。恐怕x^2
没有做您认为正在做的事情。^
是一个xor运算符。我会回家纠正我的错误。对不起。我会编辑并告诉你我得到了什么。@ImportanceOfBeingErnest我编辑了我的文章。Z的绘图有问题。