SymPy符号积分返回异常结果 为何与Mathematica等工具结果不一致
结果差异原因
SymPy与其他积分计算工具的结果差异,核心来自符号参数的默认假设规则不同:
- Mathematica、在线积分计算器这类工具计算实域反常积分时,默认会把积分中的未知参数
z判定为正实数,直接返回该场景下的最简结果2/z²。 - SymPy默认不对符号变量添加任何额外限制,会将
z视为任意复数,返回覆盖所有定义域的通用积分结果,因此和你预期的实域正参数场景结果不符。
解决方法
在声明符号时显式添加z为正实数的假设,即可得到预期结果,修改后的代码如下:
from sympy import symbols, integrate, oo # 显式指定z为正实数 x, z = symbols('x z', real=True, positive=True) expr = 1/((x**2 + z**2)**(3/2)) print(integrate(expr, (x, -oo, oo)))
运行代码后输出为2/z**2,和预期结果一致。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

