当需要符号表达式时,SymPy 输出数值结果

mar*_*ors 4 python sympy

我希望我的 SymPy 结果显示为精确结果而不是小数结果。我查看了 SymPy 文档,但找不到任何有用的信息。

为了说明问题,这里是一些示例代码:

from sympy import *
u = symbols("u")
integrate((1+u)**(1/2), (u, 0, 1))
Run Code Online (Sandbox Code Playgroud)

输出:

1.21895141649746
Run Code Online (Sandbox Code Playgroud)

预期结果:

(4/3)*sqrt(2)-(2/3)
Run Code Online (Sandbox Code Playgroud)

Joh*_*anC 6

问题在于 SymPy 将简化包含浮点数的表达式,因此删除了那些符号表达式。尽管表达式看起来不像浮点数,但除法1/2是使用标准 Python 完成的,内部表示为0.5.

解决方案是首先将分数的一部分转换为 SymPy 对象。最简单的方法是使用函数S,如下所示:

from sympy import *
u = symbols("u")
print(integrate((1+u)**(S(1)/2), (u, 0, 1)))
Run Code Online (Sandbox Code Playgroud)

输出所需的-2/3 + 4*sqrt(2)/3.

文档的陷阱部分试图解释这种行为。