I would like to generate a rectangular matrix `A`, with entries in the closed interval `[0,1]`, which satisfies the following properties:

```
(1) size(A) = (200,2000)
(2) rank(A) = 50
(3) nnz(A) = 100000

```

It will be best if the non-zero elements in `A` will decay exponentially, or at least polynomially (I want significantly more small values than large). 
Obviously (I think...), normalizing to `[0,1]` in the end is not the major issue here.

Things I tried that didn't work:

1. First generating a random matrix with `A=abs(randn(200,2000))` and thresholding

```
th = prctile(A(:),(1-(100000/(200*2000)))*100);
A = A.*(A>th);

```

Now that property `(3)` is satisfied, I lowered the rank

```
[U,S,V] = svd(A);
for i=51:200 S(i,i)=0; end
A = U*S/V;

```

But this matrix has almost full cardinality (I lost propery `(3)`).
2. First generating a matrix with the specified rank with `A=rand(200,50)*rand(50,2000)`. Now that condition `(2)` is satisfied, I threshoded like before. Only now I lost property `(2)` as the matrix has almost full rank.

So... Is there a way to make sure both properties `(2)` and `(3)` are satisfied simultaneously?

P.S. I would like the non-zero entries in the matrix to be distributed in some random/non-structural manner (just making 50 non-zero columns or rows is not my aim...).