Iterative Algorithm for increasing matrix rank

94 Views Asked by At

I have a random $N$ by $M$ matrix W where $N > M$. I am looking for an algorithm that would iteratively update the elements of a matrix so that eventually the matrix has full rank and preferably a good condition number. Additionally, it would be great if the algorithm was iterative, making infinitesimal steps of the form

$W_{ij}(t+1)= W_{ij}(t) + V_{ij} \Delta t$

where $\Delta t$ can be arbitrary small. What are my options

Edit 1: Here is a naive algorithm which outlines why I believe the problem might be solvable. Consider a matrix $U$ which has the same shape as $W$, except it is full rank. Then the iterative process

$$W(t+1) = U\Delta t + W(t) (1-\Delta t)$$

will converge to $W = U$, so it will generate a full-rank matrix. The reason I don't like this solution is because I don't want the matrix to converge to some pre-determined matrix, but instead to some matrix "nearby", whichever way it is defined

Edit 2: Ok, so apparently adding random numbers is good enough. I have considered a random iterative procedure

$$W_{ij}(t+1)= W_{ij}(t) + R_{ij}(t) \Delta t$$

where $R(t)$ is a matrix of random normal numbers of mean 0 and variance 1, updated at every time step. I have set $\Delta t = 0.01$, $(N,M) = (20, 10)$ and initialized $W$ with ones, so that its rank initially is 1. Then I simulated rank and condition number of $W$, as well as eigenvalues of $W^T W$. Here's what I got

Rank and Condition number

Eigenvalues

1

There are 1 best solutions below

5
On

Sadly, your search is hopeless. Consider $$ \pmatrix{1 & 0 \\ 0 & 0} $$ which has rank $1$. Perturb it a tiny bit to $$ \pmatrix{1+a & b \\ c & d} $$ and look at the resulting eigenvalues. The determinant (product of eigenvalues!) is $(1+a)d - bc$, which is very nearly $d \approx 0$; the trace (sum of eigenvalues!) is $1+a + d$, which is very nearly $1$. So one of the eigenvalues must be nearly $1$, and hence the other must be approximately $d$, so the condition number is approximately $1/|d|$, which is huge.