我正在尝试创建一个函数,它返回一个向量,然后逐个元素地集成它。这就是我到目前为止所拥有的
def int1(b):
j = 1
for q in range(0,len(alpha)):
j = j + alpha[q]*(b**q)
p = np.exp(-j);
inu = np.zeros(len(alpha))
for q in range(0,len(alpha)):
inu[q] = np.exp(-j)*(b**q)
return inu
如果输入类似
的内容,则此功能正常print int1(0.1)[2]
然而
print sp.integrate.quad(int1(b)[2], 1e-16, 1, epsrel=1e-20)[0]
不起作用,或者我能想到的任何合理的变体。我怎样才能让它发挥作用? 或者我得到TypeError:'function'对象没有属性' getitem '如果我省略b或ValueError:如果我有它,则给出无效的可调用。
答案 0 :(得分:0)
quad
的第一个参数必须是一个函数,可以调用它。你可以放(0.1)之后的东西,这将是有道理的。 int1(b)[2](0.1)
有意义吗?对我而言。
表单quad(int1, 1e-16, 1, epsrel=1e-20)[0]
在语法上是正确的,但quad
仅允许该函数的标量输出,因此它不适用于您的int1
。相反,您需要创建一个使用int1
的新函数,但之后只返回其中一个组件。不要在某处使用另一个def
,最好使用lambda
syntax在需要的地方创建这样的功能:
quad(lambda b: int1(b)[2], 1e-16, 1, epsrel=1e-20)[0]
这说:取b
,将其放在int1
中,保留返回数组的index-2条目。