Eigenvalues, eigenvectors, and degeneracy

PH311, Fall 2005

Specify hamiltonian matrix

Suppose our hamiltonian matrix in the basis we picked is

mat={{a,b,b,b},{b,a,b,b},{b,b,a,b},{b,b,b,a}}

MatrixForm[mat]

(a) Solve for eigenvalues and eigenvectors

Mathematica finds eigenvectors which are not by default normalized, so we'll need to normalize them ourselves.  Here we define a function which takes the norm of a vector vec.  Mathematica will complain if we feed this function an argument which isn't a vector or matrix, but we won't.

norm[vec_] := Sqrt[Dot[Conjugate[vec],vec]]

(Note how knowing the format in which the Mathematica command Eigensystem will return eigenvalues and eigenvectors allows me to dump the output directly into the lists named eigenvals and eigenvecs.)

{vals,vecs}={{lam1,lam2,lam3,lam4},{vec1,vec2,vec3,vec4}}=Eigensystem[mat];

vals // ColumnForm

vecs

Check normalization and orthogonality:

Dot[vec4, vec1]

Table[Dot[Part[vecs, i], Part[vecs, j]], {i, 1, 4}, {j, 1, 4}] // 
      MatrixForm

So: the non-degenerate eigenvector is orthogonal to the three degenerate eigenvectors, but the degenerate ones are NOT mutually orthogonal, an d none of the eigenvectors is normalized.

(b) Gram-Schmidt orthonormalize the degenerate eigenvectors above

Keep first eigenvector as is, but normalize it:

first = vec1/Sqrt[Dot[vec1,vec1]];

Subtract from second eigenvector its component along the first eigenvector, then normalize the result:

secondraw = vec2 - Dot[first,vec2] first;

second = secondraw/Sqrt[Dot[secondraw,secondraw]];

thirdraw = vec3 - Dot[first,vec3] first -
Dot[second,vec3] second;

third = thirdraw/Sqrt[Dot[thirdraw,thirdraw]];

Because the fourth eigenvector is already orthogonal to the other two, the following steps are unnecessary, but harmless, since the correction terms are identically zero:

fourthraw = vec4 - Dot[first,vec4] first -
Dot[second,vec4] second - Dot[third,vec4] third;

fourth = fourthraw/Sqrt[Dot[fourthraw,fourthraw]];

Display and test the new set of eigenvectors

The matrix below has COLUMNS which are the now orthonormal eigenvectors.  (The Transpose is needed because Mathematica will normally display the set of lists by rows, and we want them by columns, usually, in quantum mechanics.)

niceset=TableForm[Transpose[{first,second,third,fourth}]]

Or: just use Mathematica

<< LinearAlgebra`Orthogonalization`

newset = GramSchmidt[vecs]