我正在使用MATLAB求解3个线性代数方程.我知道预期的解决方案,其中一个应该是,0
但它正在显示2.2204e-16
.
MATLAB代码:
a=[2 5 -3; 9 2 3; 7 -12 5] b=[-11; 0; 8] x=inv(a)*b
预期的解决方案是-1, 0, 3
,但它显示:
-1.0000e+00
2.2204e-16
3.0000e+00
从技术上讲,我没有使用MATLAB软件,而是使用这个在线Octave解释器.
我希望输出正好为0,而不是2.2204e-16
.我该怎么做呢?
您所看到的是一个正确的结果,直到机器精度(您实际得到的数字eps(1)
或者eps('double')
).
为了求解线性方程,例如你的例子中的线性方程,应该使用矩阵除法.这些功能是mldivide, \
和mrdivide, /
(鼓励您阅读他们的文档).
使用这些运算符时,MATLAB(或Octave)会根据输入的属性选择要使用的求解器.这些求解器没有a
明确地反转(至少不是我读过的文档的解算器),这样做是为了使解更快,更准确,更稳定,或者它们的组合.有关如何避免反转的示例,请查看LU解算器的文档.
例如:
a=[2 5 -3; 9 2 3; 7 -12 5]; b=[-11; 0; 8]; x=a\b
产量:
x =
-1
0
3