[英]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.