类型错误:无法用非整数的元组类型乘以序列

1 投票
1 回答
3750 浏览
提问于 2025-04-18 06:18

我有以下三个模块,我的第一个模块是:

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

现在,当我尝试从第三个模块运行程序时,出现了以下错误:

在 func 函数中,出现了这个问题:

a_x = -(220**2)*x/N - (G * MBH * x)/NT

错误信息是:TypeError: 不能用非整数类型的元组去乘以序列。

所以我觉得程序把 a_x 当成了一个元组。这里我想做的是用 odeint 计算 a_x、a_y 和 a_z,初始值是 init_val。

这段代码之前运行得很好,没有 (G * MBH * x) / NT 这一部分在 a_x 中。

所以我觉得我们需要搞清楚为什么程序会认为 a_x 是一个序列。

1 个回答

1

从代码来看,你好像在给 G 和 E 赋值,比如 '6,67e-14'。如果是这样的话,记得在表示整数的时候不要用逗号。

撰写回答