MATLAB显示非常小的值而不是0(零)

时间:2017-01-21 07:53:23

标签: matlab matrix octave linear-algebra precision

我使用MATLAB求解3个线性代数方程。我知道预期的解决方案,其中一个应该是for(i = 0 ; i < strlen(numbers) ; ++i) ,但它显示0

MATLAB代码:

2.2204e-16

预期的解决方案是a=[2 5 -3; 9 2 3; 7 -12 5] b=[-11; 0; 8] x=inv(a)*b ,但它显示:

-1, 0, 3

从技术上讲,我没有使用MATLAB软件,而是使用this在线Octave解释器。

我希望输出正好为0,而不是-1.0000e+00 2.2204e-16 3.0000e+00 。我该怎么做呢?

1 个答案:

答案 0 :(得分:6)

您所看到的结果是machine precision之前的正确结果(您获得的数字实际为eps(1)eps('double'))。

对于求解线性方程式(如示例中的方程式),应使用矩阵除法。这些功能是mldivide, \mrdivide, /(我们鼓励您阅读他们的文档)。

使用这些运算符时,MATLAB(或Octave)选择使用正确的求解器,具体取决于输入的属性。这些求解器没有明确地反转a(至少不是我读过的文档的求解器),这样做是为了使解更快,更准确,更稳定,或者它们的组合。有关如何避免反转的示例,请查看LU solver

的文档

例如:

a=[2 5 -3; 9 2 3; 7 -12 5];
b=[-11; 0; 8];
x=a\b

收率:

x =

    -1
     0
     3