我希望我的 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)
问题在于 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.
文档的陷阱部分试图解释这种行为。
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |