我想在三角形上对函数进行数值积分,类似于

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))



我不知道自己做错了什么,因为我正在关注 scipy.integrate.fixed_quad 上的文档。

最佳答案

问题是您对 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 中,情况并非如此,这就是为什么您在一种但不是两种情况下都收到错误的原因。

关于python - scipy.integrate.fixed_quad 可以用函数边界计算积分吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42270420/

10-13 07:24