I'm working with a Matlab codebase wherein I'm attempting to solve
A*c = b by approximating the (square) matrix
A with its
q largest principal components (basically using the rank-
q PCA approximation of
A). I'm currently doing that by writing
c = pinv(A, tol)*b, where
tol is the
qth largest singular value of
A. This works; however, even if
q=1, the method is slow, because I think Matlab's
pinv is computing the full SVD of
A under the hood when something simpler like power method should suffice.
Is there a more appropriate/faster Matlab routine for approximating the inverse of
A based on its truncated/incremental SVD? For example, is there a way to get just the largest
q singular vectors/values of
A, without computing any other singular vectors/values? I have been computing the full
[U,S,V]=svd(A) and then taking the columns/values I want, but that is not efficient.
I'm aware I could implement the power method and deflation by myself -- and may end up doing that -- but my specific question is about the most computationally efficient way to complete this task using built-in Matlab routines (and as few as possible). If Matlab has no good built-in ways to do this I'm open to suggestions of third-party Matlab packages as well which would provide this functionality efficiently; e.g. I've seen IncPACK2 which seems at a glance to do the right thing (though it's no longer maintained...).