I have a matrix which is formed from the outer product of two complex vectors. There is some noise as well. How can I get the best estimate of the complex vector?

Here is a case without noise for a vector of length 6.

a = RandomComplex[{-1 - I, 1 + I}, 6];
b = Outer[Times, a, Conjugate[a]];

So the objective is to find the vector a from the matrix b.

I can get the magnitudes of the vector a from

diag = Sqrt[Re[Diagonal[b]]];

Although this is probably not the best estimate if there is noise. Here it works well

Abs[a] == diag


Now I need the best arguments of the vector. The outer product will give the differences of the arguments. This means that I probably can't get the exact arguments but I would be happy with the arguments relative to one unknown value. Any ideas on how to proceed with this?


1 Answer 1


Well, you can reconstruct a only up to a complex number of absolute value 1. You can use Eigensystem for that:

{\[Lambda], u} = Eigensystem[b, 1][[All, 1]];
v = u  Sqrt[\[Lambda]];
Norm[Outer[Times, v, Conjugate[v]] - b]


  • $\begingroup$ I think, in some sense, that this is the best solution in the presence of noise. $\endgroup$
    – mikado
    Commented Dec 11, 2019 at 21:18
  • $\begingroup$ @mikado Do you mean in the least squares sense? How do you arrive at this thinking? $\endgroup$
    – Hugh
    Commented Dec 12, 2019 at 14:26
  • $\begingroup$ en.wikipedia.org/wiki/… $\endgroup$ Commented Dec 12, 2019 at 14:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.