小能豆

Python Scipy dblquad函数在短距离内给出错误答案

py

我想求以下二重积分:

1.png

我想使用 scipy.integrate 包中的 dblquad 方法,该方法允许您以内部积分的极限作为外部积分变量的函数进行双重积分:

import scipy.integrate as spi
import numpy as np

x_limit = 0
y_limit = lambda x: np.arccos(np.cos(x))

integrand = lambda x, y: np.exp(-(2+np.cos(x)-np.cos(y)))
low_limit_y = 0              # inner integral
up_limit_y = y_limit
low_limit_x = x_limit        # outer integral
up_limit_x = 2*np.pi-x_limit

integral = spi.dblquad(integrand, low_limit_x, up_limit_x, low_limit_y, up_limit_y)

print(integral)

输出:

(0.6934912861906996, 2.1067956428653226e-12)

代码运行了,但没有给出正确答案。使用 Wolfram Alpha 我得到了正确答案:3.58857


阅读 6

收藏
2025-01-14

共1个答案

小能豆

再看一下文档字符串dblquad;它说

Return the double (definite) integral of ``func(y, x)`` from ``x = a..b``
and ``y = gfun(x)..hfun(x)``.

注意参数的顺序func(y, x)y首先,然后x

如果你将你的定义integrand改为

integrand = lambda y, x: np.exp(-(2+np.cos(x)-np.cos(y)))

cos你得到了预期的答案。当你改变被积函数中的项的符号时,实际上你也做了同样的事情。

(您不是第一个因参数的预期顺序而感到困惑的人func。)

2025-01-14