scipy.integrate.fixed_quad可以计算功能边界的积分吗?

时间:2017-02-16 09:53:47

标签: python scipy numerical-integration

我想将函数数字地整合到三角形上,类似于

import scipy.integrate as integrate
inside = lambda x: integrate.quad(lambda x,y: 1, 0, x, args=(x))[0]
outside = integrate.quad(inside, 0, 1)[0]
print(outside)
0.5

但使用scipy.integrate.fixed_quad函数(其集成顺序为n作为参数)。但是,当我写

inside = lambda x: integrate.fixed_quad(lambda x,y: 1, 0, x, args=(x), n=5)
print(inside(5))
  

回溯(最近一次呼叫最后一次):文件"",第1行,in      文件"",第1行,在文件中   " /Users/username/anaconda/lib/python3.5/site-packages/scipy/integrate/   quadrature.py",第82行,在fixed_quad中       return(b-a)/2.0 * np.sum(w * func(y,* args),axis = 0),无

     

TypeError:*之后的参数必须是可迭代的,而不是int

当我跟踪scipy.integrate.fixed_quad上的文档时,我不知道自己做错了什么。

1 个答案:

答案 0 :(得分:1)

问题在于您对argsargs=(x)的定义。它应该作为元组传递,所以你需要添加一个额外的逗号来使它成为一个元组:

inside = lambda x: integrate.fixed_quad(lambda x,y: 1, 0, x, args=(x,), n=5)

然后

inside(5)

产量

(5.0, None)

该行

integrate.quad(lambda x,y: 1, 0, x, args=(x))[0]

quad一样,检查args是否为元组;如果没有转换(直接从源代码中获取):

if not isinstance(args, tuple):
        args = (args,)

fixed_quad中并非如此,这就是为什么你在一个但不是两个案例中都收到错误的原因。