为什么SymPy对幂分式做定积分时会返回错误或不一致的结果?
问题原因
你遇到的结果差异是旧版本SymPy处理带浮点系数的符号积分时存在计算bug导致的。
经手动展开积分式验证,∫₀⁴ (y-2.4)²√y *0.1875 dy的精确结果为384/350 ≈1.09714,和你在Wolfram得到的预期结果一致。
修复方案
- 方案1:将浮点系数替换为有理数进行符号积分,避免浮点计算误差
import sympy as sp y = sp.Symbol('y') # 2.4转有理数为12/5,0.1875转有理数为3/16 fy = (y - sp.Rational(12,5)) ** 2 * sp.sqrt(y) * sp.Rational(3,16) res = sp.integrate(fy, (y, 0, 4)) print(float(res)) # 输出:1.0971428571428572
- 方案2:直接使用数值积分计算,绕过符号积分的适配问题
from scipy.integrate import quad import numpy as np fy = lambda y: (y - 2.4) ** 2 * np.sqrt(y) * 0.1875 res, err = quad(fy, 0, 4) print(res) # 输出:1.0971428571428572
内容的提问来源于stack exchange,提问作者Xuan Shi
相关产品推荐
相关产品推荐

