Mathematica 中 == 和 === 之间的区别

Posted

技术标签:

【中文标题】Mathematica 中 == 和 === 之间的区别【英文标题】:Difference between == and === in Mathematica 【发布时间】:2011-07-14 06:59:21 【问题描述】:

我的印象是= 是一个赋值,== 是一个数字比较,=== 是一个符号比较(以及在其他一些语言中,==equal to 和 @987654327 @是identical to。但是,看下面的内容似乎不一定是这种情况......

In: x == x
Out: True

In: x === x
Out: True

In: 5 == 5
Out: True

In: 5 === 5
Out: True

In: x = 5
Out: 5

In: 5 == x
Out: True

In: 5 === x
Out: True

In: 5 5 == 5x
Out: True

In: 5 5 === 5x
Out: True

In: x == y
Out: x == y

In: x === y
Out: False

In: y = x
Out: 5

In: x == y
Out: True

In: x === y
Out: True

那么 Mathematica 中 == 和 === 之间究竟有什么区别?我一直在看文档,但我还是不太明白。

【问题讨论】:

有关EqualSameQ 的数值行为的更多信息,请参阅this 答案。 【参考方案1】:

一个重要的区别是=== 总是返回TrueFalse== 可以返回未计算的结果(这就是为什么它对表示方程很有用。)

In[7]:= y == x^2 + 1

Out[7]= y == 1 + x^2

In[8]:= y === x^2 + 1

Out[8]= False

在一些有趣的情况下,== 返回未评估的值,在编程时值得注意。例如:

In[10]:=  == 1

Out[10]=  == 1 

这可能会影响If[foo==, <true>, <false>]等内容。

【讨论】:

【参考方案2】:

Equal 是指语义相等,而SameQ 是语法相等。例如,Sin[x]^2+Cos[x]^21 是相同的数字,因此它们在语义上是相等的。由于没有更多转换就无法确定这一点,Equal 返回未评估。但是,实际的表达方式不同,所以SameQ 给出了False

Sin[x]^2 + Cos[x]^2 == 1
Sin[x]^2 + Cos[x]^2 === 1
Simplify[Sin[x]^2 + Cos[x]^2 == 1]

请注意,对 Real 数字有特殊处理,如果 ab 在最后一个二进制数字上不同,SameQ[a,b] 可以返回 True。要进行更严格的身份测试,请使用Order[a,b]==0

a = 1. + 2^-52;
b = 1.;
a === b
Order[a, b]==0

SameQ 可以为语法不同的表达式返回 True,因为表达式头可以自动对参数进行排序。您可以通过使用持有属性来防止自动排序。比如

c + d === d + c
SetAttributes[SameQ, HoldAll]
c + d === d + c

【讨论】:

能否请您提供一个示例,如果 a 和 b 在最后一个二进制数字上不同,SameQ[a,b] 可以返回 True。?谢谢! 添加示例,使用 double 的尾数为 53 位这一事实【参考方案3】:

我将您引导至section 2.5: Equality checks Leonid Shifrin 的一本好书。

【讨论】:

【参考方案4】:

===== 非常相似,如果 lhs 和 rhs 相等,则返回 True。它们不同的一个例子是当您比较不同表示格式的数字时。

In: 5.==5
Out: True

In: 5.===5
Out: False

虽然它们在数字上相同(这就是== 返回True 的原因),但它们并不完全相同。

仅供参考,它们在内部是不同的功能。 ==Equal,而 ===SameQ

【讨论】:

【参考方案5】:

lhs===rhs 如果 表达式 lhs 与 rhs 相同, 否则产生 False。

lhs==rhs 如果 lhs 和 rhs 则返回 True 是相同的。

来自here 和here 的引用。

【讨论】:

以上是关于Mathematica 中 == 和 === 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

mathematica是不是能利用到机器学习中

MX 文件的快速加载跨平台替代品 (Mathematica)

Mathematica里面用Plot画图怎么只有坐标没有图像?

mathematica中RandomReal和Table函数随机生成点问题求助

想请教一下关于如何利用mathematica判断式子正负?

mathematica中如何曲线拟合