[英]disabling automatic simplification in sympy
我想在sympy中禁用自动简化,例如求解等式x*yx
我想获得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
从sympy手册中,我为此找到了UnevaluatedExpr,但是对于给定的示例,它返回空列表
from sympy import UnevaluatedExpr
expr1 = UnevaluatedExpr(x)*UnevaluatedExpr(y)-UnevaluatedExpr(x)
sympy.solve(expr1,y)
=> []
我的问题是
禁用自动评估的一种更简单的方法是使用上下文管理器评估 。 例如,
from sympy.core.evaluate import evaluate
from sympy.abc import x,y,z
with evaluate(False):
print(x/x)
打印1/x * x
而不是1
但是,正如上下文管理器的文档字符串所述,大多数SymPy代码都希望自动评估。 禁用自动评估后,除简单计算之外的所有操作都有可能崩溃。 即使是简单的方程式,也会发生在solve
。 您可以禁用评估(可以使用UnevaluatedExpr
evaluate(False)
或使用UnevaluatedExpr
),但是可能无法获得解决方案。
特定方程式的部分解决方法是使用Dummy("x")
而不是UnevaluateExpr(x)
。 即使虚拟符号具有不同的名称,它们也会被视为不同的,因此它们不会被抵消。
>>> expr = Dummy("x")*y - Dummy("x")
>>> solve(expr, y)
[_x/_x]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.