为什么在 Scilab 上这个等式 returns False?

Why this equality returns False on Scilab?

我出于教育目的学习 Scilab。

在处理高斯消元法时,我们有 Ax=b。 "A" 是具有线性方程系数的矩阵,"x" 是具有变量的向量,"b" 是具有来自线性系统的 "solutions" 的向量。

假设 A 是:

    10.  - 7.      0.  
  - 3.     2.09    6.  
    5.   - 1.      5.  

而 b 是:

7.    
3.91  
6.   

使用 Scilab 中的高斯消去法,我们得到 x 的值:

  - 3.109D-14  
  - 1.         
    1.

观察:- 3.109D-14 是一个接近于零的数字。

当我将矩阵乘法作为 A*x 时,我得到一个 3x1 向量,其分量与向量 "b":

最后,我的疑问是:如果 A*x 具有与 "b" 相同的值,为什么下面的等式 returns 在 Scilab 中是错误的?

这可能是由于舍入误差和浮点数学的固有局限性所致,正如 Normal Human 在他的评论中指出的那样。

另一件事要记住:Scilab 控制台输出四舍五入的值,因此在内部通常有更多未显示的小数位,除非明确要求,例如mprintf("x= %.30f", x(1));

为了避免这个问题,你可以尝试clean你的数组,即将非常小的实体舍入为0。尝试查看结果:

A*clean(x)==b