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

时间:2017-08-22 15:07:44

标签: matlab linear-algebra matrix-inverse

上下文:我有一些理论上的后验误差界限用于双网格有限元方案,我用它来解决屈曲特征值问题。然而,其中一个术语的计算成本过高,我想知道我是否以天真的方式进行计算。

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

L = chol(A,'lower');
然后我需要计算inv(L)的2范数。我目前正在使用' inv'和svds:

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

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

问题:当然这很慢(尤其是反向的计算,尽管svds也不便宜)。我在这里错过了一招吗?

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

1 个答案:

答案 0 :(得分:1)

怎么样?
LinvNorm = 1 / svds(L, 1, 0)

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

替代表达式

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

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

派生自A == L*L'