Context: I have some theoretical a posteriori error bounds for a two-grid finite-element scheme that I am using for the solution of the buckling eigenvalue problem. However, one of the terms is prohibitively costly to compute and I wonder if I am doing it in a naive way.
Problem: Letting A denote the my (sparse) stiffness matrix I compute the Cholesky factorisation:
L = chol(A,'lower');
I then need to compute the 2-norm of inv(L). I am currently using 'inv' and svds:
Linv = inv(L);
LinvNorm = svds(Linv,1);
Note that I am using inv as it is in fact the recommended syntax on the Mathworks website: "For sparse inputs, inv(X) creates a sparse identity matrix and uses backslash, X\speye(size(X))."
Question: This is very slow, of course (especially the computation of the inverse, although svds isn't cheap either). Am I missing a trick here?
Edit: I have tried using svds(L,1,0) (to take the reciprocal), but this fails to converge. I am on 2015a so cannot increase the Krylov dimension, which is the recommended fix in newer releases.