如何在鼠尾草中确定两个表达式是否相等?例如:

sage: var('x')
x
sage: e1 = 1 + x
sage: e2 = x + 1
sage: e3 = x + 2
sage: is_equivalent(e1, e2)
True
sage: is_equivalent(e1, e3)
False
sage: var('y')
y
sage: e4 = x * (1 + y)
sage: e5 = x + (x * y)
sage: is_equivalent(e4, e5)
True
sage: is_equivalent(e4, e1)
False
sage: assume(x, 'real')
sage: e6 = sqrt(x**2) + 1
sage: is_equivalent(e6, e1)
True

已经建议/尝试过的内容:(在Ubuntu Linux上为Sage 6.4.1)
sage: e1 == e2
x + 1 == x + 1
sage: e1 is e2
False
sage: e1.match(e2) is not None
True
sage: e4.match(e5) is not None
False

最佳答案

这样做的通常方法是从中得出一个方程,然后检查它是True还是False

sage: e4 == e5
x*(y + 1) == x*y + x
sage: bool(_)
True

但是,请记住,如果Sage无法证明它是False,则它将返回True,这与假错误不同。检查两个任意表达式的等效性可能需要很长的时间,并且可能需要计算机无法预测的疯狂的扩展/“简化”序列。

这是在回答另一个问题:
sage: e1 is e2
False

这是Python,并且非常强烈的条件是两个事物是相同的“对象”,在这种情况下它们不是。
sage: a = 1
sage: b = 1
sage: a is b
False
sage: a = 1
sage: b = a
sage: a is b
True

关于math - 鼠尾草数学: how to check if two expressions are equivalent?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27976178/

10-12 13:20