Is there an iterative procedure that pushes the singular values of a matrix toward unity?

Consider a square matrix $A = U \Sigma V^T$. I want to find $B = UV^T$ — however, it seems wasteful to compute the whole SVD just to re-multiply the two orthogonal matrices.

Does there exist some stable procedure I can use to "push" the entries in the diagonal matrix $\Sigma$ toward ones?


Solution 1:

Set $A_0=A$ and $A_n = (1/2)(A_{n-1}+(A_{n-1}^T)^{-1})$. I claim $A_n \to UV$, and does so rapidly.

Define $f(x) = \frac{x+x^{-1}}{2}$. Suppose $A=UDV$ where the diagonal entries of $D$ are $\sigma_1$, $\sigma_2$, ..., $\sigma_k>0$. Then induction shows that $A_n = U D_n V$ where $D$ is diagonal with entries $f^{(n)}(\sigma_j)$. (Here $f^{(n)}$ means iterate $f$ for $n$ times.) For any $\sigma>0$, $f^{(n)}(\sigma) \to 1$, and does so quite rapidly: $|f^{(n)}(\sigma)-1|$ shrinks like $1/\exp(c \cdot 2^n)$.

Disclaimer: I have not tested this method.