你好,我是python的新手,我正在尝试处理一组方程。我正试图将四元集成的结果乘以一个浮点,我的代码是:
from __future__ import division
import scipy.special as sp
from scipy import integrate
import math
Tb = 7.2
Tc = 9.3
t = Tb / Tc
n = 2*10**-6
L = 50*10**-6
W = 80*10**-9
a = 3*10**-2
s1 = W/ (2*n)
y1 = (L+(W/2)) / (2*n)
x0 = 0.015
r0 = 4*x0
s2 = (r0 / n)/1000000
print s2
y0 = (x0 / n)/1000000
def t1(t):
return t**-1*sp.kv(0, s2)
def t2(t):
return t**-1*sp.iv(0, s2)
print t2
Fk2 = (math.pi**-2) * integrate.quad(t1, s1, s2)
FI2 = (math.pi**-2) * integrate.quad(t2, s1, s2)
print Fk2 , FI2
我一直收到错误
25 print t2
---> 26 Fk2 = (math.pi**-2) * integrate.quad(t1, s1, s2)
27 FI2 = (math.pi**-2) * integrate.quad(t2, s1, s2)
28 print Fk2 , FI2
TypeError: can't multiply sequence by non-int of type 'float'
我不确定该怎么做,我试过用lambda函数替换def t1(t)
,但同样没有效果。我们非常感谢您的帮助,并提前向您表示感谢。
由于您是初学者,我首先要说的是,每当您出现不理解的错误时,请将行拆分为多个单独的步骤,这样您就可以准确地了解错误指的是什么,如下所示:
temp = integrate.quad(t1, s1, s2)
print "temp:", temp
Fk2 = (math.pi**-2) * temp
然后您可以看到错误是temp是一个元组,并且没有定义如何将元组乘以浮点值。
Fk2 = (math.pi**-2) * np.array(temp[:2])
您可以在文档中看到每个术语所指的内容。
integrate.quad默认返回长度为2的元组,第一个条目是答案,第二个条目是对答案错误的估计。要在进一步计算中使用结果,请尝试
Fk2 = (math.pi**-2) * integrate.quad(t1, s1, s2)[0]
FI2 = (math.pi**-2) * integrate.quad(t2, s1, s2)[0]
这只会选择答案,并将其乘以浮点值。
试试这个:
Fk2 = [(math.pi**-2) * e for e in integrate.quad(t1, s1, s2)]
FI2 = [(math.pi**-2) * e for e in integrate.quad(t2, s1, s2)]