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[3]/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!


1 Answer 1


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[3]/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.

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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