Re: Eigenvectors of a Complex Hermitian Matrix
- To: mathgroup at smc.vnet.net
- Subject: [mg13594] Re: Eigenvectors of a Complex Hermitian Matrix
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Mon, 3 Aug 1998 03:53:53 -0400
- Organization: University of Western Australia
- References: <002101bdbca6$e2a37c80$f6ed4c86@pbuech7.mpae.gwdg.de> <6pui5e$6s3@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Gerhard J. Theurich wrote: > I am currently writting on > a program that needs to diagonalize some matrices and I am using > Eispack to do it. Eispack returns the correct unitary transform but out > of curiosity I checked with Mathematica and got strange results. Now I > was wondering what I did wrong. > > I included my Hermitian matrix by: > > a = {{..,..},...} > > and then typed > > b = Eigenvectors[] > > and then expected Conjugate[b]*Transpose[b] to be unity and > Conjugate[b]*a*Transpose[b] to be diagonal. The problem is simply the format of the output of the Eigenvectors command. Note that u =Eigenvectors[m] gives a list of the eigenvectors of the square matrix m, which means that the eigenvectors are the ROWS of u. Hence you need to redefine u = Transpose[u] first before you apply the usual formulae. E.g, for the matrix In[1]:= a = {{-11.4133,-1.43923+2.97532 I,0.774195+3.48219 I,-0.208604+2.46393 I}, {-1.43923+-2.97532 I,-1.17674,-2.73313+-0.20665 I,1.32306+-1.72722I}, {0.774195+-3.48219 I,-2.73313+0.20665 I,3.93994,1.30476+-1.87478I}, {-0.208604+-2.46393 I,1.32306+1.72722 I,1.30476+1.87478 I,5.16037}}; we compute the eigensystem, In[2]:= {lambda, u} = Chop[Eigensystem[a]]; and then take the transpose of the matrix of eigenvectors, In[3]:= u = Transpose[u]; Defining the Hermitian adjoint, In[4]:= SuperDagger[a_?MatrixQ] := Conjugate[Transpose[a]] (note that this automatically formats nicely if you convert this cell into TraditionalForm!) then we have In[5]:= Out[5]= {{1., 0, 0, 0}, {0, 1., 0, 0}, {0, 0, 1., 0}, {0, 0, 0, 1.}} and In[6]:= u . SuperDagger[u] // Chop Out[6]= {{1., 0, 0, 0}, {0, 1., 0, 0}, {0, 0, 1., 0}, {0, 0, 0, 1.}} Finally, to diagonalize a, In[7]:= SuperDagger[u] . a. u // Chop Out[7]= {{-13.5232, 0, 0, 0}, {0, 7.62675, 0, 0}, {0, 0, 4.69012, 0}, {0, 0, 0, -2.28343}} which agrees with DiagonalMatrix[lambda] In[8]:= DiagonalMatrix[lambda] Out[8]= {{-13.5232, 0, 0, 0}, {0, 7.62675, 0, 0}, {0, 0, 4.69012, 0}, {0, 0, 0, -2.28343}} Cheers, Paul ____________________________________________________________________ Paul Abbott Phone: +61-8-9380-2734 Department of Physics Fax: +61-8-9380-1014 The University of Western Australia Nedlands WA 6907 mailto:paul at physics.uwa.edu.au AUSTRALIA http://www.physics.uwa.edu.au/~paul God IS a weakly left-handed dice player ____________________________________________________________________