【问题标题】:Simplify removes relational term in Sympy?简化删除 Sympy 中的关系术语?
【发布时间】:2015-04-16 12:04:59
【问题描述】:

我正在尝试使用 sympy 简化表达式,但关系术语似乎消失了。一个玩具示例如下:

import sympy
from sympy import *
x = Symbol('x')
y = Symbol('y')
z = Symbol('z')

如果我跑:

z * Eq(x, y)

那么输出是:

z*(x == y)

但如果我尝试使用以下方法简化此操作:

simplify(z * Eq(x, y))

那么输出是:

z

我没想到 - 我应该期待这种行为吗?如果是,有什么方法可以防止简化删除关系术语?

谢谢。

【问题讨论】:

  • 你用这个等式是什么意思?
  • 也许您正在尝试逻辑操作,例如:And(z,Eq(x,y)),在这种情况下simplify 可以完美运行。
  • 我希望 sympy 将 Eq(x,y) 解释为 1 或 0,具体取决于它是真还是假
  • 那么你应该使用:f = Piecewise((1,Eq(x,y)),(0,True)) 然后:simplify(z*f)
  • 当你确认这是你想要的,我会把它作为答案发布

标签: python sympy


【解决方案1】:

不能将逻辑和算术运算结合起来进行此类运算。

假设:

from sympy import *
x, y, z = symbols('x y z')
f = symbols('f', cls=Function)

算术运算:

xeqy = Piecewise((1,Eq(x,y)),(0,True)) # {1 for x = y, 0 otherwise}
f = z * xeqy                           # {z for x = y, 0 otherwise}
simplify(f)

逻辑运算:

f = And(z,Eq(x,y))                     # z ∧ (x = y)
simplify(f) 

【讨论】:

  • 非常感谢!这很笨拙,但它有效且有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多