我使用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
。我该怎么做呢?
答案 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