我想将函数数字地整合到三角形上,类似于
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上的文档时,我不知道自己做错了什么。
答案 0 :(得分:1)
问题在于您对args
,args=(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
中并非如此,这就是为什么你在一个但不是两个案例中都收到错误的原因。