MATLAB ==和~=运算符注意事项

== 和 ~= 的含义:
  • 等于运算符(==):如果两变量值相同将会返回 1,如果不同将返回 0。
  • 不等运算符(~=):如果两变量值不同则返回 1,相同则返回 0。

MATLAB 中用这两个运算符比较两个字符串是安全的,不会出现错误。但对两个数字数据的比较,将可能产生意想不到的错误。两个理论上相等的数不能有一丝一毫的差别,而在计算机计算的过程中出现了近似的现象,从而可能在判断相等与不相等的过程中产生错误,这种错误称为 round off 错误。

例如,考虑下面的两个数,两者均应等于 0:

a=0
b=sin(pi)

因为这两个数在理论上相等,所以关系式a==b应当返回值 1。但在事实上,MATLAB 计算所产生的结果是:

>> a=0
>> b=sin(pi)
>> a==b
ans = 0

MATLAB 报告了 a 和 b 不同,因为它产生了一个 round off 错误,在计算中,sin(pi) 产生的结果是 1.2246×10-16,而不是 0。两个理论上相等的值因为 round off 错误而发生了细微的差别。

可以通过检测两数之间在一定的范围内是否近似相等,在这个精确范围内可能会产生 round off 错误。例如:

>> abs(a-b) < 1.0E-14
ans = 1

将产生正确的结果,不管 a 与 b 在计算中是否产生 round off 错误。

技巧

在检测两数值是否相等时一定要小心,因为 round off 错误可能会使两个本来应该相等的值不相等。这时可以比较确认在 round off 错误的范围内它是不是近似相等。