我正在尝试做两件事。我想要一组数据以3d,z,theta和r作为我的轴打印出来,我希望用我给它的方程式进行计算。我不明白为什么当我给它这个代码时这不起作用。
from math import *
from numpy import *
from pylab import *
from mpl_toolkits.mplot3d.axes3d import Axes3D
G=6.6738480e-11
c=2.99792458e8
Msun=1.9891e30
M=4*(Msun)
r=linspace((3*(M/Msun)*1000),(8*(M/Msun)*1000),1000)
a=.98
theta=arange(0,2*pi,pi/100)
rho=(sqrt((r**2)+((a**2)*(cos**2(theta)))))
delta=((r**2)+(a**2)-(2*M*r))
sigma=(sqrt((((r**2)+(a**2))**2)-((a**2)*delta*(sin**2(theta)))))
z=((1/(sigma(rho(sqrt(delta)))))-1)
fig = plt.figure(figsize=(14,6))
ax = fig.add_subplot(1, 1, 1, projection='3d')
p = ax.plot_surface(r, theta, z, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)
cb = fig.colorbar(p, shrink=0.5)
show()
我很确定我使用的是3D轴错误,除此之外我收到了这个错误:
---> 52 rho=(sqrt((r**2)+((a**2)*(cos**2(theta)))))
53 delta=((r**2)+(a**2)-(2*M*r))
54 sigma=(sqrt((((r**2)+(a**2))**2)-((a**2)*delta*(sin**2(theta)))))
TypeError: 'int' object is not callable
我输错了吗?我应该使用不同的语法吗? 任何帮助表示赞赏。我想要做的是计算z,因为这会给我我的红移,我想用增加的r和theta来绘制它。我似乎做错了什么。
答案 0 :(得分:2)
在第52行,cos**2(theta)
是错误的语法;应为cos(theta)**2
同样,在第54行中,sin**2(theta)
应为sin(theta)**2
。
答案 1 :(得分:0)
KO:错误就在这里
rho=(sqrt((r**2)+((a**2)*(cos**2(theta)))))
到sqrt cos的方法是
rho=(sqrt((r**2)+((a**2)*(cos2(theta)**2))))