对inv 文档的探索将引导您走上以下道路,它很好地回答了您的问题(强调我的问题):
八度:1>帮助inv
'inv' 是来自文件 libinterp/corefcn/inv.cc 的内置函数
-- X = inv (A)
-- [X, RCOND] = inv (A)
-- [...] = 逆 (...)
计算方阵 A 的逆矩阵。
如果需要,返回对倒数条件数的估计,
否则,如果倒数,则警告病态矩阵
条件数很小。
通常最好避免计算矩阵的逆
例如,它更快更准确
用 'Y = A \ b' 求解方程组 (A*x = b),而不是
'Y = inv (A) * b'。
在您的特定情况下,您会看到:
A = [1,2,0;0,5,6;7,0,9];
[X, RCOND] = inv(A);
RCOND
% RCOND = 0.070492
那么,这个值是什么意思?你可以在相关函数rcond中找到答案,直接计算这个值:
八度:2> 帮助 rcond
'rcond' 是来自文件 libinterp/corefcn/rcond.cc 的内置函数
-- C = rcond (A)
计算倒数条件数的 1-范数估计为
由 LAPACK 返回。
如果矩阵是良条件的,那么 C 将接近 1,如果
矩阵条件很差,它将接近于 0。
[...]
另见:cond, condest。
您的值是 0.07,非常接近 0,因此您的 A 矩阵的条件很差。
要详细了解“条件不佳”的确切含义,我们可以查看cond 函数:
octave:26> 帮助条件
'cond' 是文件 /opt/octave-6.2.0/share/octave/6.2.0/m/linear-algebra/cond.m 中的一个函数
-- 条件 (A)
-- 条件 (A, P)
计算矩阵的 P 范数条件数
倒置。
'cond (A)' 定义为'norm (A, P) * norm (inv (A), P)'。
[...]
矩阵的条件数量化了矩阵的敏感度
对矩阵进行小的更改时的矩阵求逆运算
元素。理想情况下,条件数将接近 1。当
数字很大,这表明变化很小(例如下溢
或舍入误差)将在结果中产生较大的变化
输出。在这种情况下,解决方案来自数值
计算可能不准确。
在你的情况下:
cond(A,2)
% ans = 7.080943875445246
所以你有它。您的矩阵条件相对较差,这意味着它的求逆更容易受到精度误差的影响。如果您改用mldivide(即\ 运算符),可能会获得更好的结果。