我的第一个模块是以下三个模块:
import numpy as np
import matplotlib as plt
import math
import beginvalues as bv
def func(lijst,t):
x = lijst[0]
y = lijst[1]
z = lijst[2]
G = 6,67e-14
MBH = 9,94e38
N = 1 + x**2 + y**2/bv.a**2 + z**2/bv.b**2
NT = (1e-3 + x**2 + y**2 + z**2)**(3/2)
a_x = -(220**2)*x/N - (G * MBH * x)/NT
a_y = -(220**2)*y/(N*bv.a**2) - (G * MBH * y )/NT
a_z = -(220**2)*z/(N*bv.b**2) - (G * MBH * z )/NT
return [lijst[3],lijst[4],lijst[5],a_x,a_y,a_z]
我的第二个:
import numpy as np
# Ingeven van de parameterwaarden a en b. Indien deze niet relevant zijn, wordt een melding gegeven.
tekst = "Geef waarden in voor a en b, waarbij 1>a>b:"
print tekst
a= float(input("Geef een waarde in voor a: "))
b= float(input("Geef een waarde in voor b: "))
if b<(a/(1+a**2)**(0.5)) or b>a:
print " Dit zijn geen goede waarden voor a en b. \n Het model is niet fysisch relevant. \n Gelieve andere waarden te kiezen."
# Ingeven van de beginvoorwaarden.
# We maken een array aan waarin de beginwaarden geplaatst worden.
begin_x = 1
begin_y = 1
begin_z = 1
v0_x=1
v0_y=1
v0_z=1
init_val = [begin_x,begin_y,begin_z,v0_x,v0_y,v0_z]
和我的第三个:
import bvgzwartgat as bvg
from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
import beginvalues as bv
# We voeren een tijdsintegratie door van 0 tot 13*10^9 in 10000 stappen.
# De beginvoorwaarden worden geinitialiseerd in de module "beginvalues".
# TIJDSEENHEID?????????????????? kpc/km/s = 978 10^6 jaar
t=np.linspace(0,15,10000)
I=odeint(bvg.func,bv.init_val,t)
# 2d plotjes
X=[]
Y=[]
Z=[]
for i in range(len(I)):
kolom = I[i]
X.append(kolom[0])
Y.append(kolom[1])
Z.append(kolom[2])
plt.figure("x-y projectie")
plt.plot(X,Y)
plt.figure("x-z projectie")
plt.plot(X,Z)
plt.figure("y-z projectie")
plt.plot(Y,Z)
plt.show( )
现在,当我尝试从主模块运行第三个程序时出现以下错误: 在功能 a_x = - (220 ** 2)* x / N - (G * MBH * x)/ NT TypeError:不能将序列乘以'tuple'
类型的非int所以我认为程序认为a_x是一个元组,我在这里要做的就是计算 a_x,a_y和a_z,起始值为init_val,带有odeint。
此代码在a_x中没有(G * MBH * x)/ NT部分之前完美运行 所以我认为我们必须弄清楚为什么程序认为a_x是一个序列。
答案 0 :(得分:1)
从代码中可以看出,您正在分配G和E数值,例如&#39; 6,67e-14&#39;。如果是这种情况,请不要在整数表示中使用逗号