Python Scipy的dblquad函数短区间双重积分计算结果错误问题
问题原因与修正方案
核心错误原因:scipy.integrate.dblquad要求被积函数的参数顺序为「内层积分变量在前,外层积分变量在后」,也就是先写y再写x,你当前代码中将参数顺序写为x, y,相当于交换了两个变量的输入位置,最终计算的是变量互换后的积分值,这就是你观察到交换cos项正负号后结果匹配的原因。
修正后的代码如下:
import scipy.integrate as spi import numpy as np x_limit = 0 y_limit = lambda x: np.arccos(np.cos(x)) # 修正参数顺序:内层积分变量y在前,外层x在后 integrand = lambda y, x: np.exp(-(2+np.cos(x)-np.cos(y))) low_limit_y = 0 # 内层积分y的下限 up_limit_y = y_limit low_limit_x = x_limit # 外层积分x的下限 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)
运行上述代码即可得到和预期一致的3.58857左右的计算结果,误差在数值积分的可接受范围内。
内容的提问来源于stack exchange,提问作者Frieksel
相关产品推荐
相关产品推荐

