A simple way to incrementally compute SVD of two vectors

27 Views Asked by At

Suppose that we have two vectors $x$ and $y$ as follows:

$x = \{1,2,3,4,5,6,7,8,9,10\}$

$y = \{10,20,30,40,50,60,70,80,90,100\}$

In the first iteration, assume that $x'$ and $y'$ store the first five elements of $x$ and $y$ respectively:

$x' = \{1,2,3,4,5\}$

$y' = \{10,20,30,40,50\}$

Consider matrix $mat$ as follows:

$mat=\begin{pmatrix}x'\:\\ y'\end{pmatrix}=\begin{pmatrix}1\:&\:2\:&\:3\:&\:4\:&\:5 \:\\ 10\:&\:20\:&\:30\:&\:40\:&\:50\end{pmatrix}$

In each iteration, a new element will be added to $x'$ and $y'$, e.g., in the second iteration, $x'$ and $y'$ store the second five elements of $x$, $y$:

$x' = \{2,3,4,5,6\}$

$y' = \{20,30,40,50,60\}$

Assume that $SVD(mat) = UDV^T$. For each iteration, I want to incrementally compute the $U$,$D$, and $V$, instead of recomputing $SVD$ from scratch. I know there are some approaches to incrementally compute the $SVD$, however, they follow a complex method for the incremental computation as they deal with a lot of vectors. Is there any simple way to incrementally compute $SVD$ of only two vectors?