1

你好我对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'

我很不确定要做什么,我试过用def t1(t)lambda 函数替换,但又什么也没做。任何帮助都非常感谢,并在此先感谢您。

4

3 回答 3

1

由于您是初学者,所以我首先要说的是,每当您遇到不理解的错误时,请将行拆分为多个单独的步骤,以便您可以准确找出错误所指的内容,如下所示:

temp = integrate.quad(t1, s1, s2)
print "temp:", temp
Fk2 = (math.pi**-2) * temp

然后你可以看到错误是temp是一个元组,并且没有关于如何将一个元组乘以一个浮点数的定义。

Fk2 = (math.pi**-2) * np.array(temp[:2])

您可以在文档中看到每个术语所指的内容。

于 2014-10-03T00:27:58.407 回答
1

integration.quad 默认返回一个长度为 2 的元组,第一项是答案,第二项是对答案误差的估计。要在进一步计算中使用结果,请尝试

Fk2 = (math.pi**-2) * integrate.quad(t1, s1, s2)[0]
FI2 = (math.pi**-2) * integrate.quad(t2, s1, s2)[0]

这仅选择答案并将其乘以浮点数。

于 2014-10-03T00:44:49.803 回答
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)]
于 2014-10-03T00:27:44.743 回答