为什么在 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
我出于教育目的学习 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