我试图计算矩阵P
的逆矩阵,但如果我乘以inv(P)*P
,则MATLAB不会返回单位矩阵。它几乎是同一性(10^(-12)
的非对角线值)。但是,在我的应用程序中,我需要更高的精度。
在这种情况下我该怎么办?
答案 0 :(得分:13)
只有当您显式需要使用inv
矩阵的逆矩阵时,否则您只需使用反斜杠运算符\
。
inv
上的文档明确指出:
x = A\b
的计算方式与x = inv(A)*b
不同,建议用于求解线性方程组。
这是因为反斜杠运算符或mldivide
使用最适合您特定矩阵的方法:
x = A\B
解决了线性方程组A*x = B
。矩阵A
和B
必须具有相同的行数。如果A
严重缩放或几乎是单数,MATLAB®会显示警告消息,但无论如何都会执行计算。
您知道MATLAB根据输入矩阵选择的算法,这里是他们文档中提供的完整算法流程图
mldivide
在求解线性系统中的多功能性源于它能够通过调度到适当的求解器来利用问题中的对称性。该方法旨在最小化计算时间。函数的第一个区别是在完整(也称为“密集”)和稀疏输入数组之间。
答案 1 :(得分:0)
你有什么被称为病态矩阵。尝试采用这种矩阵的逆矩阵是有风险的。一般来说,除了最小的矩阵(例如你在线性代数教科书的介绍中看到的那些)之外的任何反转都是有风险的。如果必须,你可以尝试使用Moore-Penrose pseudoinverse(参见维基百科),但即使这样也不是万无一失。