I am plotting the Landau levels of a system numerically. Every thing is going right except a lot of noise in the energy spectrum. Please, help me out to resolve this issue. Thanks!

enter image description here

c = 3*10^8;
m = (0.09*5.1*10^5)/(c^2);
ℏ = 6.6*10^-16;
v = 4.7*10^5;
Δ = 0.24*10^-3*B;
Subscript[ω, 0] = ℏ*B*m^-1;
Subscript[ω, D] = Sqrt[2*ℏ*B*v^2];
ll = Sqrt[(2*B)/ℏ];

Block[{L = 20, Γ = 1.3*10^-3, λ = 2.5*10^-28, i,
   j, one, a, adag, wa, qd, H, Es, list, nn},
 one = SparseArray[Band[{1, 1}] -> 1, {L, L}];
 a = SparseArray[{j_, i_} /; i - j == 1 -> Sqrt[j], {L, L}];
 adag = SparseArray[{j_, i_} /; j - i == 1 -> Sqrt[i], {L, L}];
 wa = ll^3*λ*(a . a . a + adag . adag . adag);
 qd = Subscript[ω, 0]*(adag . a);
 H[B_] = 
  ArrayFlatten[{{(Δ + 0.5*Subscript[ω, 0])*one + 
      qd + wa, 
     I*Subscript[ω, D]*a}, {-I*Subscript[ω, D]*
      adag, (-Δ + 0.5*Subscript[ω, 0])*one + qd -
 list[B_?NumericQ] := list[B] = Eigenvalues[H[N[B]]];
 list[B_?NumericQ, nn_] := list[B][[nn]];
 Plot[Evaluate@Transpose@Table[list[B, nn], {nn, 2*L}], {B, 0, 40}, 
  PlotRange -> {{0, 40}, {-0.06, 0.1}}, ImageSize -> 500]
  • $\begingroup$ In the way that this is phrased, it does not seem to be a Mathematica question. Perhaps you should consider posing it in a different way! $\endgroup$
    – bmf
    May 30 at 6:22
  • $\begingroup$ @bbmf I believe it is in as much as it involves sorting the eigenvalues? May be use exclusion zone? $\endgroup$
    – chris
    May 30 at 6:38
  • $\begingroup$ @chris all I meant was the simple: "help me translate the noise" or "help me clear our the noise" without a specific mathematics/physics task to be implemented into mathematica seems a question of understanding the background material better and not the software. This is why I said in the way it is phrased, not in its essence $\endgroup$
    – bmf
    May 30 at 7:13

1 Answer 1


As suggested by @chris, the vertical lines are caused by the order of spectra.

Add Sort to this line

list[B_?NumericQ] := list[B] = Sort@Eigenvalues[H[N[B]]];

enter image description here

  • $\begingroup$ Note that the green blue and yellow line switch near (20,0). $\endgroup$
    – chris
    May 30 at 9:46
  • 3
    $\begingroup$ @chris: If you look carefully, the lines switch color whenever they intersect. This is a side-effect of using Sort and it may or may not be acceptable for the OP. $\endgroup$ May 30 at 15:12
  • $\begingroup$ (Though I have no idea how one would go about creating a "clean" plot in which they didn't swap like this) $\endgroup$ May 30 at 15:20
  • $\begingroup$ Thanks for removing the noise. But the lines which are crossing are not straight. Could you please help me to resolve it. $\endgroup$
    – user199
    May 30 at 17:02
  • $\begingroup$ @MichaelSeifert I don't think it makes sense to talk about which eigenvalue belongs to which curve. Maybe we can try to keep the first derivative of the curve to be continuous, but there can also be cases the first derivatives of two curves are equal, or there can be singularities. $\endgroup$
    – Lacia
    May 30 at 17:47

Your Answer

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

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