고유 값 및 심각한 노이즈 문제 플로팅

Aug 18 2020

Mathematica에서 System Hamiltonian의 고유 값을 플로팅하려고합니다. 이것은 매우 시끄러운 플롯을 생성합니다. 이것은 내 코드입니다.

ϵ = 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, -π, π}]

이것은 정확하지 않습니다. 이것은 다른 고유 값 솔루션을 혼합하기 때문입니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

5 CATrevillian Aug 18 2020 at 13:58

그래서 내 첫 번째 단계는 다음과 같이 기능을 재정의하는 것이 었습니다.

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은 존재하는 소음을 제거하는 데 핵심입니다.