Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have a real symmetric matrix H which is in symbolic form, I need a matrix P that can diagonalize H; also P is orthogonal and its columns are the eigenvectors of H.

How can I doing this in mathematica? Below is my sample matrix.

 H = {{λ - u, -t, -Δ, 0},
     {-t, -λ - u, 0, -Δ}, 
     {-Δ, 0, -λ + u,  t},
     {0, -Δ, t, λ + u}} // MatrixForm  
share|improve this question

closed as off-topic by m_goldberg, Michael E2, ubpdqn, bobthechemist, Pickett Mar 8 '14 at 21:33

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "This question arises due to a simple mistake such as a trivial syntax error, incorrect capitalization, spelling mistake, or other typographical error and is unlikely to help any future visitors, or else it is easily found in the documentation." – m_goldberg, Michael E2, ubpdqn, bobthechemist, Pickett
If this question can be reworded to fit the rules in the help center, please edit the question.

Try searching the documentation. –  b.gatessucks Mar 7 '14 at 12:39
This question is not trival I think. The Eigenvetors only give the eigenvetors of my matrix. However, they do not form a orthogonal matrix P. @SimonWoods –  buzhidao Mar 7 '14 at 13:18
@b.gatessucks How to do this neatly also ensure P is an orthogonal matrix? As the answer below, you can easily check that column 3 and column 4 are not orthogonal(their inner product is not zero). Though you can normalize each row to make any two rows are orthogonal, but how can you ensure any columns are orthogonal at the same time? –  buzhidao Mar 7 '14 at 13:41
@SimonWoods After doing P = Transpose[Eigenvectors[H]] as you suggested, a normalization procedure of each column in P should also be done. After that, P will be an orthogonal matrix with its columns are the eigenvectors of H. Am I right? –  buzhidao Mar 7 '14 at 14:29

1 Answer 1

up vote 3 down vote accepted
H = {{λ - u, -t, -Δ, 0},
     {-t, -λ - u, 0, -Δ}, 
     {-Δ, 0, -λ + u,  t},
     {0, -Δ, t, λ + u}};
P=Transpose[Eigenvectors[H]] // Simplify;

Now you have to orthogonalize the matrix:

POrt = P.Inverse[Sqrt[Simplify[Transpose[P].P]]];
share|improve this answer
Please look my question details. @bcp >Require "P is orthogonal" –  buzhidao Mar 7 '14 at 13:12
I corrected the answer... –  bcp Mar 7 '14 at 13:50
Thanks, this should work in principle. –  buzhidao Mar 7 '14 at 14:15

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