python - scipy.integrate.fixed_quad 可以计算具有函数边界的积分吗?

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

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 上的文档.

最佳答案

问题在于您对 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/

相关文章:

python - 树莓派 2-无法安装 scikit-image

python - 在优化函数 scipy 中动态创建变量

python - 从 Python 调用 C 函数

python - 如何使用 theano 重现 scipy.convolve

Python3 - 附加到不包含某些单词的数组行

python - 在 Python 中集成多元正态分布

r - R 中的集成

python - 如何使用pytorch进行类似于numpy的trapz函数的数值积分?

python - Pytorch 句子数据加载器

python - 如何根据具有两个键值对的字典列表中的另一个 k-v 对的值从一个键值对创建值列表