上下文:我有一些理论上的后验误差界限用于双网格有限元方案,我用它来解决屈曲特征值问题。然而,其中一个术语的计算成本过高,我想知道我是否以天真的方式进行计算。
问题:让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维度,这是新版本中的推荐修复。
答案 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'
。