Update Eigendecomposition over iterations

36 Views Asked by At

I have a dense matrix $\boldsymbol{X}$ and another matrix $\boldsymbol{M}$ that is diagonal but is not $c\boldsymbol{I}$ where $c$ is a constant and $\boldsymbol{I}$ is the identity. With these I get the decomposition $\boldsymbol{XM}=\boldsymbol{Q}\boldsymbol{\lambda}\boldsymbol{Q}'$.

I then use this in $(\boldsymbol{XM}+\boldsymbol{I})^{-1}=\boldsymbol{Q}(\boldsymbol{\lambda}+\boldsymbol{I})^{-1}\boldsymbol{Q}'$, which all works well. The challenge I'm working through is that $\boldsymbol{M}$ changes over iterations. I could just recompute the eigendecomposition of $\boldsymbol{XM}$ each time. However, that's expense because $\boldsymbol{X}$ is big.

I'm looking to find a technique that might allow me to precompute the decomposition of just $\boldsymbol{X} = \boldsymbol{Q}_x\boldsymbol{\lambda}_x\boldsymbol{Q}'_x$ and update this with the changing values of $\boldsymbol{M}$ so that it can then be used as $\boldsymbol{Q}(\boldsymbol{\lambda}+\boldsymbol{I})^{-1}\boldsymbol{Q}'$.

It is true that $\boldsymbol{Q}\boldsymbol{\lambda}\boldsymbol{Q}' +\boldsymbol{I}=\boldsymbol{Q}_x\boldsymbol{\lambda}_x\boldsymbol{Q}'_x\boldsymbol{M}+\boldsymbol{I}$, but $\boldsymbol{Q}(\boldsymbol{\lambda}+\boldsymbol{I})\boldsymbol{Q}' \neq\boldsymbol{Q}_x(\boldsymbol{\lambda}_x+\boldsymbol{I})\boldsymbol{Q}'_x\boldsymbol{M}$.

Thanks in advance for pointers.