簡體   English   中英

禁用sympy中的自動簡化

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM