Построение собственных значений и серьезные проблемы шума
Я пытаюсь построить собственные значения гамильтониана моей системы в системе Mathematica. Это создает очень шумный сюжет. Это мой код.
ϵ = 0;
A[α_, c_, b_, q_] := ϵ +
2*Cos[k2*b + 2*π*α]*Exp[-π 1/(2*q)]*
LaguerreL[c, 0, (π*1/q)]
B[a_, q_] := Exp[I*k1*q*a]
B1[a_, q_] := Exp[-I*k1*q*a]
b[α_, q_] :=
SparseArray[{Band[{1, 1}] -> A[α, 0, 1, q],
Band[{1, 2}] -> B[1, q], Band[{2, 1}] -> B1[1, q],
Band[{1, q}] -> B1[1, q], Band[{q, 1}] -> B[1, q]}, {q, q}];
Plot3D[Eigenvalues[b[1, 3]][[2]], {k1, -3, 3}, {k2, -π, π}]

Это даже не правильно. Поскольку это смешивание решений с разными собственными значениями. Любая помощь будет высоко оценена.
Ответы
Итак, моим первым шагом было переопределение ваших функций как таковых:
ClearAll[A,ε,B,B1,b];
A[α_, c_, b_, q_, ε_][k2_]:=ε + Cos[k2*b + 2*Pi*α]*Exp[-Pi 1/(2*q)]*LaguerreL[c, 0, (Pi*1/q)];
B[a_, q_][k1_]:=Exp[I*k1*q*a];
B1[a_, q_][k1_]:=Exp[-I*k1*q*a];
b[α_, q_][k1_,k2_] :=
SparseArray[{Band[{1, 1}] -> A[α, 0, 1, q, 0][k2],
Band[{1, 2}] -> B[1, q][k1], Band[{2, 1}] -> B1[1, q][k1],
Band[{1, q}] -> B1[1, q][k1], Band[{q, 1}] -> B[1, q][k1]}, {q, q}];
Тогда я мог бы построить, используя следующее:
Plot3D[Sort[Eigensystem[N[b[1,3][k1,k2]]][[1]]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]
Который дает:

Так же,
Plot3D[Sort[Eigenvalues[N[b[1,3][k1,k2]]]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]
И
Plot3D[Sort[Eigenvalues[b[1,3][k1,k2]]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]
Оба дают одинаковый результат из-за использования Sort
.
Тем не мение,
Plot3D[Eigensystem[N[b[1,3][k1,k2]]][[1]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]
Дает отключенный и сильно зашумленный сюжет

И это из-за отсутствия использования Sort
. Мы также можем увидеть тот же результат с:
Plot3D[Eigenvalues[N[b[1,3][k1,k2]]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]
И
Plot3D[Eigenvalues[b[1,3][k1,k2]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]
Которые оба дают один и тот же зашумленный и смешанный график собственных значений, замеченный ранее.
Если это не то, что вы ищете, дайте мне знать? Надеюсь, это поможет!
После обнаружения ошибки при переводе исходного кодового блока OP следующее больше не применяется:
Вы также можете ускорить сборку матрицы, заметив, что ваша установка ε = 0
делает диагональ равной 0, что может предотвратить необходимость выполнять такие посторонние вычисления при сборке прогонов ваших матриц.
Tl; dr: Использование Sort
- это ключ к устранению присутствующего шума.