[Math] SVD for a complex matrix and approximation to a real matrix

approximationmatrices

Suppose M is a 20 by 3 complex matrix, and I'd like to SVD. For example, in Matlab, I can do easily with:

[U, S, V] = svd(M);

where U, S, and V are complex matrices of20x20, 20×3, and 3×3, respectively.

However, I'd like to make U, a 20×20 matrix, to be either real matrix or near-real matrix (i.e., imaginary parts in the matrix are very small). S and V are okay with complex matrices. Having a real matrix is desirable for me in that it can minimize the overhead of computation in my program code.

I have no idea such approximation or decomposition exists. Is it possible?

Best Answer

You are asking for something impossible. Remember that though a Hermitian matrix has all its eigenvalues real, its eigenvectors are usually complex. Since the singular value decomposition of a matrix $\mathbf A$ is essentially equivalent to the eigendecomposition of the matrix $\mathbf A^T \mathbf A$ (or $\mathbf A\mathbf A^T$), which is Hermitian positive definite, $\mathbf U$ is very likely unitary (as opposed to orthogonal).

On the other hand, it seems that the way you are using MATLAB, you are having the svd() routine output the so-called "full SVD" instead of the "economy SVD" version. For the economy version (which should help you a great deal in minimizing computational overhead), $\mathbf U$ is 20×3, and $\mathbf S$ and $\mathbf V$ are 3×3. Fortunately, it is a simple matter to have MATLAB output the economy version: [U, S, V] = svd(M, 0); For what it's worth, the related QR decomposition also supports the output of an economy-sized version as well. Have a look into MATLAB documentation for more details.

Related Question