# Eigenvalues function not producing expected results?

I'm running into a strange issue when trying to compute eigenvalues of a 2x2 matrix for graphene. If I "manually diagonalise" by multiplying the two off-diagonal terms together and taking the square root, I get the correct answer. However, constructing the matrix and using the Eigenvalues function gives me a whole bunch of imaginary terms that should not be there. Here is my code:

f[kx_, ky_,t_] := -t E^(-I kx a) (1 + 2 E^(I (3 kx a)/2 )*Cos[Sqrt/2 ky a]);

BlockA[kx_, ky_, t_] := {{0, f[kx, ky, t]}, {Conjugate[f[kx, ky, t]], 0}};

FullSimplify[Eigenvalues[BlockA[kx, ky, t]], kx ∈ Reals && ky ∈ Reals && t ∈ Reals]


This generates a horrendous output that looks even worse if you put it in trigonometric form, and includes imaginary terms which should go away.

The expected result is obtained thusly:

Simplify[Conjugate[f[kx, ky,t]], Assumptions -> kx ∈ Reals && ky ∈ Reals && t ∈ Reals]
Sqrt[%*f[kx, ky,t]] // FullSimplify // ExpToTrig


Which gives

Abs[t]Sqrt[1 + 4 Cos[2.99645 ky] (Cos[5.19 kx] + Cos[2.99645 ky])]


With the variable a set to 3.46.

What course of action is best to remedy a problem like this? Since I'm going to be making larger matrices with similar terms, I can't simply use the analytic solution, so I have to figure out how to make Eigenvalues work. Thanks in advance!

Look at what you get when you do e.g. f[1,1,1] and Conjugate[f[1,1,1]]. As the docs for Conjugate state, "Conjugate does not always propagate into arguments", and here it does not propagate into Cos and Sin. A solution seems to be to do

f[kx_, ky_,
t_] := -t E^(-I kx a) (1 + 2 E^(I (3 kx a)/2)*Cos[Sqrt/2 ky a]);

BlockA[kx_, ky_, t_] :=
ComplexExpand[{{0, -t f[kx, ky, t]}, {Conjugate[f[kx, ky, t]], 0}}];

FullSimplify[Eigenvalues[BlockA[1, 1, 1]]]


ComplexExpand assumes all variables are real, so I have assumed a is also real.

• This worked perfectly. Thank you so much! Jul 1, 2015 at 20:45