Re: Re: Diagonalizing a non-Hermitian Matrix

```Pratik Desai wrote:

>Ituran wrote:
>
>
>
>>Hi,
>>
>>I have the following problem. There is a given non-Hermitian matrix M.
>>Let's take an example in 2x2 dimension M={{1,2+4*I},{2-5*I,1}}.
>>To diagonalize it we need 2x2 unitary matrices U and V such that
>>
>>U.M.Vdag = Md =Diag(3.8304,6.0273).
>>
>>Here Vdag = Transpose[Conjugate[V]]. To find U and V,
>>we can work with the absolute square of the above eq, i.e,
>>
>>V.(Mdag.M).Vdag = U.(M.Mdag).Udag = M_D^2 = Diag(14.672,36.328).
>>
>>Again Mdag = Transpose[Conjugate[M]] and similarly for Udag.
>>
>>To find V, I can write the equation
>>for the ith row of V;
>>
>>V_ij(Mdag.M)_jk = (M_D^2)_ii V_ik (no sum over i), k=1,2 in this case.
>>
>>(Mdag.M)_11 V_i1 + (Mdag.M)_21 V_i2 = (M_D^2)_ii V_i1,   k=1
>>(Mdag.M)_12 V_i1 + (Mdag.M)_22 V_i2 = (M_D^2)_ii V_i2,   k=2
>>
>>Thus, to find the elements of V in the ith row(for both i=1 and 2)
>>
>>{valV,vecV} = Eigensystem[Transpose[Mdag.M]]
>>
>>where V = vecV (No transpose!).
>>
>>similarly for U
>>
>>{valU,vecU}=Eigensystem[Transpose[M.Mdag]]
>>
>>Of course, both vecV[[]] and vecU[[]] need to be normalized. I found
>>
>>V = {{-0.21954 + 0.49397*I,0.84130},{0.34169 - 0.76879I, 0.54056}}
>>U ={{-0.34169 + 0.76879I*I,0.54056},{0.21954 - 0.49397*I,0.84130}}
>>
>>and they perfectly satisfy
>>
>>V.(Mdag.M).Vdag = U.(M.Mdag).Udag = Diag(14.672,36.328).
>>
>>However, when I check U.M.Vdag, I am getting
>>
>>U.M.Vdag = Diag(-3.8250 + 0.2031*I,6.0240 - 0.2031*I)
>>
>>where the absolute value of the entries are equal to
>>front of 3.8250 is not a problem since U and and V
>>are not unique(they contains some arbitrary phases
>>which be used to get Md with nonnegative entries).
>>
>>So, the problem here is the existence of imaginary parts and
>>I have no idea why I am getting such an answer. For example, for a
>>Hermitian M (take 2-4*I instead of 2-5*I in (2,1) element of M),
>>there is no such problem. What am I missing? Any idea?
>>
>>I am using Mathematica 4.0 in Windows 2K.
>>
>>
>>I.Turan
>>
>>
>>
>>
>>
>If you are only seeking SingularValueDecomposition of the matrix why not
>use the built in function SingularValueDecomposition
>
>Clear[matU, matD, matV, M]
>M = {{1, 2 + 4*I}, {2 - 5*I, 1}}
>{matU, matD, matV} = SingularValueDecomposition[N[M]]
>matD
>matU.matD.Conjugate[Transpose[matV]] // Chop // MatrixForm
>M // MatrixForm
>matU.Conjugate[Transpose[matU]] // Chop
>matV.Conjugate[Transpose[matV]] // Chop
>
>
>Hope this helps
>
>Pratik Desai
>
>
>
>
I am sorry, I did not read the part where you mentioned you are using
version 4.0. The SVD functionality is for version 5.0 and up
I think JordanDecomposition is more what you are looking for

M = {{1, 2 + 4*I}, {2 - 5*I, 1}}
{matu, matd} = JordanDecomposition[N[M]]
matu.matd.Inverse[matu] // Chop // MatrixForm
Inverse[matu].N[M].matu // Chop // MatrixForm

I notice in your diagonal matrix the eigenvalues are real, I think that
is wrong your eigenvalues must be complex
As to the actual implimentation of your code in mathematica, that would
be really interesting if it is possible.

Best Regards
Pratik

--
Pratik Desai