有没有一种有效的方法来计算矩阵逆 (Matlab) 的 2 范数?



上下文:我有一些理论上的后验误差边界,用于解决屈曲特征值问题。但是,其中一个术语的计算成本过高,我想知道我是否以幼稚的方式这样做。

问题:让 A 表示我的(稀疏(刚度矩阵 我计算 Cholesky 分解:

L = chol(A,'lower');

然后,我需要计算 inv(L( 的 2 范数。我目前正在使用"inv"和 svds:

Linv = inv(L);
LinvNorm = svds(Linv,1);

请注意,我使用的是 inv,因为它实际上是 Mathworks 网站上推荐的语法:"对于稀疏输入,inv(X( 创建一个稀疏单位矩阵并使用反斜杠 X\speye(size(X((。

问题:当然,这非常慢(尤其是逆计算,尽管svds也不便宜(。我在这里错过了一个技巧吗?

编辑:我尝试使用svds(L,1,0((取倒数(,但这无法收敛。我在 2015a 所以无法增加 Krylov 维度,这是新版本中推荐的修复程序。

怎么样

LinvNorm = 1 / svds(L, 1, 0)

L的最小奇异值的倒数?(逆矩阵的奇异值是原始矩阵的奇异值的倒数(。

替代表达方式是

LinvNorm = 1 / sqrt(eigs(A, 1, 0))

LinvNorm = 1 / sqrt(svds(A, 1, 0))

源自A == L*L'.

最新更新