Sympy集成提供NaN作为输出

时间:2018-07-12 00:48:47

标签: integration sympy

我对sympy并不陌生,希望有人能指导我采用正确的方法。如前所述,集成后将提供NaN输出。这是数学错误,sympy限制还是用户错误?

enter image description here

1 个答案:

答案 0 :(得分:1)

由于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