Problem with the SVD of a large complex matrix I have a fat and complex matrix $H$ on which I would like to perform an SVD.
Because of its size, I'm forced to using a trick based on the computation of a covariance matrix. 
$H H^\dagger = U S V^\dagger V S U^\dagger = U S² U^\dagger$
and then I find each singular vector $\mathbf{v_k}$ in $V$ with
$\mathbf{v_k} = \frac{1}{s_k} U^\dagger \mathbf{h_k}$
The problem is, this approach seems only valid for a real matrix and I can't figure out why when looking at the math. Here is a simple matlab proof of concept.
H = randn(3,5);
% H = randn(3,5) + 1j*randn(3,5);

Hc = H*H';
[U,S] = eig(Hc);
U = fliplr(U);
S = sqrt(flipud(diag(S)));
V = bsxfun(@times,U'*H,1./S).';

[Ua,Sa,Va] = svd(H,'econ'); % for comparison


Your formula for computing $V$ is incorrect.  Note that (assuming $H$ has full rank, $S$ and $U$ are square, $S$ diagonal and $U$ unitary)
$$
H = U S V^\dagger \implies H^\dagger = V S U^\dagger\implies
H^\dagger (SU^\dagger)^{-1} = V \implies\\
V = H^\dagger U S^{-1}.
$$
So, you can find $V$ with V = bsxfun(@times,H'*U,1./S).
