I have a huge covariance matrix, 𝑀, with the dimension, e.g., $10^8 \times 10^8$. Luckily enough, the number of nonzero eigenpairs, $n$, is very small, i.e., $n<5$. From the computational prospective, I would like to represent, $M$, in Schmidt decompsition as $$ 𝑀= \sum_{i=1}^n \lambda_i {\bf e}_i^T \otimes {\bf e}_i, $$ where $\lambda_i$ and ${\bf e}_i$ are the nonzero eigenvalues and eigenvectors of $M$. This equation can be further written as $$ 𝑀= \sum_{i=1}^n {\bf g}_i^T \otimes {\bf g}_i, $$ where the vectors ${\bf g}_i=\sqrt{\lambda_i}{\bf e}_i$. Using this relation, the matrix, $M$, can be stored in terms of nonzero ${\bf g}_i$ in computer.
My problem is that the matrix, 𝑀, is changing at every time snapshot. The update of the matrix, 𝑀, is given by the following formular, $$ 𝑀′= \sum_{i=1}^n {\bf g}_i^T \otimes ({\bf g}_i+ \delta {\bf g}_i)+({\bf g}_i+ \delta {\bf g}_i)^T \otimes {\bf g}_i $$ where $\delta {\bf g}_i$ is the update of the $i$th vector and is small comparing with ${\bf g}_i$. Due to some dynamical properties/constraints, the updated covariance matrix, $M'$, contains the same number of nonzero eigenpairs, $n$.
I wonder whether there is a fast algorithm for computing the new nonzero eigenpairs?
Many thanks in advance!