我想求以下二重积分:
我想使用 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
再看一下文档字符串dblquad;它说
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。
func(y, x)
y
x
如果你将你的定义integrand改为
integrand
integrand = lambda y, x: np.exp(-(2+np.cos(x)-np.cos(y)))
cos你得到了预期的答案。当你改变被积函数中的项的符号时,实际上你也做了同样的事情。
cos
(您不是第一个因参数的预期顺序而感到困惑的人func。)
func