gpt4 book ai didi

matlab - MATLAB 中最有效的矩阵求逆

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:22 26 4
gpt4 key购买 nike

在 MATLAB 中计算某个方阵 A 的逆时,使用

Ai = inv(A)
% should be the same as:
Ai = A^-1

MATLAB 通常会通知我这不是最有效的求逆方法。那么什么更有效率呢?如果我有一个方程系统,使用/,\运算符可能是。但有时我需要其他计算的逆。

什么是最有效的反转方式?

最佳答案

我建议使用 svd(除非您真的绝对确定您的矩阵没有病态)。然后,根据奇异值,您可以决定要采取的进一步行动。这听起来像是一种“矫枉过正”的方法,但从长远来看,它会得到返回。

现在如果你的矩阵A实际上是可逆的,那么A伪逆inv(A),但是如果您接近“奇点”,您将很容易做出适当的决定如何继续实际制作 pseudo inverse。当然,这些决定将取决于您的应用。

添加一个简单的例子:

> A= randn(3, 2); A= [A A(:, 1)+ A(:, 2)]
A =
-1.520342 -0.239380 -1.759722
0.022604 0.381374 0.403978
0.852420 1.521925 2.374346

> inv(A)
warning: inverse: matrix singular to machine precision, rcond = 0
ans =
Inf Inf Inf
Inf Inf Inf
Inf Inf Inf

> [U, S, V]= svd(A)
U =
-0.59828 -0.79038 0.13178
0.13271 -0.25993 -0.95646
0.79022 -0.55474 0.26040

S =
Diagonal Matrix
3.6555e+000 0 0
0 1.0452e+000 0
0 0 1.4645e-016

V =
0.433921 0.691650 0.577350
0.382026 -0.721611 0.577350
0.815947 -0.029962 -0.577350

> s= diag(S); k= sum(s> 1e-9) % simple thresholding based decision
k = 2

> Ainv= (U(:, 1: k)* diag(1./ s(1: k))* V(:, 1: k)')'
Ainv =
-0.594055 -0.156258 -0.273302
0.483170 0.193333 0.465592
-0.110885 0.037074 0.192290

> A* Ainv
ans =
0.982633 0.126045 -0.034317
0.126045 0.085177 0.249068
-0.034317 0.249068 0.932189

> A* pinv(A)
ans =
0.982633 0.126045 -0.034317
0.126045 0.085177 0.249068
-0.034317 0.249068 0.932189

关于matlab - MATLAB 中最有效的矩阵求逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5004148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com