scipy.integrate.fixed_quad 可以计算函数边界的积分吗?
Can scipy.integrate.fixed_quad compute integral with functional boundaries?
我想在三角形上对函数进行数值积分,类似于
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))
Traceback (most recent call last): File "", line 1, in
File "", line 1, in File
"/Users/username/anaconda/lib/python3.5/site-packages/scipy/integrate/
quadrature.py", line 82, in fixed_quad
return (b-a)/2.0 * np.sum(w*func(y, *args), axis=0), None
TypeError: () argument after * must be an iterable, not int
我不知道自己做错了什么,因为我正在关注 scipy.integrate.fixed_quad 上的文档。
问题是你对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
中情况并非如此,这就是为什么您在一种情况下而不是两种情况下收到错误的原因。
我想在三角形上对函数进行数值积分,类似于
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))
Traceback (most recent call last): File "", line 1, in File "", line 1, in File "/Users/username/anaconda/lib/python3.5/site-packages/scipy/integrate/ quadrature.py", line 82, in fixed_quad return (b-a)/2.0 * np.sum(w*func(y, *args), axis=0), None
TypeError: () argument after * must be an iterable, not int
我不知道自己做错了什么,因为我正在关注 scipy.integrate.fixed_quad 上的文档。
问题是你对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
中情况并非如此,这就是为什么您在一种情况下而不是两种情况下收到错误的原因。