Hak*_*kci 2 python sympy simplification
我想在 sympy 中禁用自动简化,例如求解x*y-x我想要的方程x/x而不是1
import sympy
from sympy.abc import x,y,z
expr = x*y-x
sympy.solve(expr,y)
=> 1 # i want unsimplified x/x instead of 1
Run Code Online (Sandbox Code Playgroud)
从 sympy 手册中,我找到了 UnevaluatedExpr 用于此目的,但它返回给定示例的空列表
from sympy import UnevaluatedExpr
expr1 = UnevaluatedExpr(x)*UnevaluatedExpr(y)-UnevaluatedExpr(x)
sympy.solve(expr1,y)
=> []
Run Code Online (Sandbox Code Playgroud)
我的问题是
小智 5
禁用自动评估的更简单方法是使用上下文管理器评估。例如,
from sympy.core.evaluate import evaluate
from sympy.abc import x,y,z
with evaluate(False):
print(x/x)
Run Code Online (Sandbox Code Playgroud)
这将打印1/x * x而不是 1
但是,正如上下文管理器的文档字符串所说,大多数 SymPy 代码都需要自动评估。当禁用自动评估时,任何超出直接计算的东西都可能会崩溃。solve即使对于简单的方程,也会发生这种情况。您可以禁用评估(使用evaluate(False)或使用UnevaluatedExpr),但您可能不会得到解决方案。
特定方程的部分解决方法是使用Dummy("x")代替UnevaluateExpr(x)。即使它们具有相同的名称,虚拟符号也被视为不同的,因此它们不会相互抵消。
>>> expr = Dummy("x")*y - Dummy("x")
>>> solve(expr, y)
[_x/_x]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1281 次 |
| 最近记录: |