【问题标题】:sage math: how to check if two expressions are equivalent?sage math:如何检查两个表达式是否等价?
【发布时间】:2015-01-16 01:57:03
【问题描述】:

如何在 sage 中确定两个表达式是否等价?例如:

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

【问题讨论】:

    标签: math sage


    【解决方案1】:

    执行此操作的通常方法是从它们中得出一个等式并检查它是True 还是False

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

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

    这是在回答一个不同的问题:

    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
    

    【讨论】:

    • 有没有更好的办法,比如指定变量为有理数?例如,为什么这不起作用(看起来很简单):bool((x^2)^(1/2) == x)
    • 我对python很熟悉,但最后还是尝试了“is”。我搜索了文档,但得到的结果太多了。您是否碰巧知道我应该在圣人文档中的哪个位置找到它?
    • 好吧,我不得不说它在那里,但没有尽可能好地组织。符号表达式文档可能是最好的布局。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    相关资源
    最近更新 更多