Merencanakan Nilai Eigen dan Masalah Kebisingan yang parah

Aug 18 2020

Saya mencoba untuk merencanakan nilai Eigen dari Sistem Hamiltonian saya di Mathematica. Ini menghasilkan plot yang sangat bising. Ini kode saya.

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

Ini bahkan tidak benar. Karena ini mencampurkan solusi nilai eigen yang berbeda. Bantuan apa pun akan sangat dihargai.

Jawaban

5 CATrevillian Aug 18 2020 at 13:58

Jadi langkah pertama saya adalah mendefinisikan kembali fungsi Anda seperti itu:

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}];

Kemudian saya bisa membuat plot menggunakan yang berikut ini:

Plot3D[Sort[Eigensystem[N[b[1,3][k1,k2]]][[1]]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]

Pemberian yang mana:

Demikian pula,

Plot3D[Sort[Eigenvalues[N[b[1,3][k1,k2]]]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]  

Dan

Plot3D[Sort[Eigenvalues[b[1,3][k1,k2]]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]

Keduanya memberikan hasil yang sama karena penggunaannya Sort.

Namun,

Plot3D[Eigensystem[N[b[1,3][k1,k2]]][[1]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]

Memberikan plot terputus & sangat berisik

Dan ini karena kurangnya penggunaan Sort. Kita juga bisa melihat keluaran yang sama dengan:

Plot3D[Eigenvalues[N[b[1,3][k1,k2]]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]

Dan

Plot3D[Eigenvalues[b[1,3][k1,k2]][[2]],{k1,-3,3},{k2,-Pi,Pi},PlotPoints->50]

Yang keduanya menghasilkan plot berisik & nilai eigen campuran yang sama seperti yang terlihat sebelumnya.

Jika ini bukan yang Anda cari, tolong beri tahu saya? Saya harap ini membantu!


Setelah menyadari kesalahan dalam menerjemahkan blok kode awal OP, hal berikut tidak lagi berlaku:

Anda juga dapat mempercepat perakitan matriks dengan mengamati bahwa pengaturan Anda ε = 0membuat diagonal menjadi 0, yang dapat mencegah perlunya melakukan komputasi asing saat merakit matriks Anda.


Tl; dr: Menggunakan Sortadalah kunci untuk membantu menghilangkan kebisingan yang ada.