Sympy 集成给出 NaN 作为输出
Sympy integration giving NaN as output
我对 sympy 还很陌生,希望有人能指导我采取正确的方法。如下所述,当集成时给出 NaN 输出。这是数学错误、sympy 限制还是用户错误?
由于 NaN 不是该积分的正确答案,因此它是 SymPy 错误。但这是由次优设置引起的。 SymPy 发现很难处理带有浮点数的表达式,因为浮点运算不同于算术的数学规则(例如,加法不是关联的)。对于在指数中具有此类常量的表达式尤其如此。
因此,最好将浮点常量排除在计算之外,包括在最后。而不是
integrate((0.2944/z**0.22+1.0)*(1.939*log(z/10) +17.7), z)
写
a, b, c, d, e = symbols('a b c d e', positive=True)
values = {a: 0.2944, b: 0.22, c: 1.0, d: 1.939, e: 17.7}
expr = integrate((a/z**b + c) * (d*log(z/10) + e), z)
print(expr.subs(values).simplify())
打印
0.731848205128205*z**0.78*log(z) + 4.05720568750119*z**0.78 + 1.939*z**1.0*log(z) + 11.2962875046845*z**1.0
我对 sympy 还很陌生,希望有人能指导我采取正确的方法。如下所述,当集成时给出 NaN 输出。这是数学错误、sympy 限制还是用户错误?
由于 NaN 不是该积分的正确答案,因此它是 SymPy 错误。但这是由次优设置引起的。 SymPy 发现很难处理带有浮点数的表达式,因为浮点运算不同于算术的数学规则(例如,加法不是关联的)。对于在指数中具有此类常量的表达式尤其如此。
因此,最好将浮点常量排除在计算之外,包括在最后。而不是
integrate((0.2944/z**0.22+1.0)*(1.939*log(z/10) +17.7), z)
写
a, b, c, d, e = symbols('a b c d e', positive=True)
values = {a: 0.2944, b: 0.22, c: 1.0, d: 1.939, e: 17.7}
expr = integrate((a/z**b + c) * (d*log(z/10) + e), z)
print(expr.subs(values).simplify())
打印
0.731848205128205*z**0.78*log(z) + 4.05720568750119*z**0.78 + 1.939*z**1.0*log(z) + 11.2962875046845*z**1.0