Načrtovanje energijskega pasu

Energy Band Plotting



Rešitev:

Konstruirajte anInterpolacijska funkcija, ki prevaja iz$ x $-vrednost za$ {k_x, k_y } $koordinate:

xkData = {{0, {Pi, 0}}, {1, {0,0}}, {2, {Pi, -Pi}}, {3, {Pi, 0}}, {4, {2Pi, 0}}}; if = Interpolacija [xkData, InterpolationOrder-> 1];

Nato uporabite zgornjo interpolacijsko funkcijo za izdelavo ploskve in uporabitexkData znova za ustvarjanje klopov:



Nariši [energy @@ if [x], {x, 0, 4}, Frame-> True, FrameTicks-> {{Automatic, None}, {xkData, None}}, GridLines-> {Range [0,4] , Nič}]

tukaj vnesite opis slike




V primerjavi z mojo staro rešitvijo je Carl veliko boljši. Vendar pa je v njem in na prvotni sliki, ki jo je objavil OP, subtilna napaka: razdalje med intervali niso enake. Pravilna parametrizacija je uporaba dolžine loka. V bistvu moramoZberite dolžino loka med točkami v k-prostoru na naslednji način:



pts = {{π, 0}, {0, 0}, {π, -π}, {π, 0}, {2 π, 0}}; arcs = Zemljevid [ArcLength [Line [#]] &] @ FoldList [Join [#1, {#2}] &, {[email protected]#}, [email protected]#] & @ pts (* {0, π, π + Sqrt [2] π, 2 π + Sqrt [2] π, 3 π + Sqrt [2] π} *)

Nato lahko z nekaj spremembami prilagodimo odgovor:

xkData = Prenos [{loki, točke}]; if = Interpolacija [xkData, InterpolationOrder -> 1]; Nariši [energy @@ if [x], {x, loki [[1]], loki [[ -1]]}, Frame -> True, FrameTicks -> {{Samodejno, Brez}, {xkData, Brez}} , GridLines -> {loki, Brez}]

tukaj vnesite opis slike


Bilo je nekaj odličnih odgovorov, vendar sem se odločil dodati alternativo, ki uporabljaPo kosih inNamesto tega spremenite velikost.



kList = {{ [Pi], 0}, {0, 0}, { [Pi], - [Pi]}, { [Pi], 0}, {2  [Pi], 0}} ; xList = Razpon [0, 4, 1]; mapXToK [x_]: = [zaščiteno po e -pošti] MapThread [{Rescale [x, { #1, #2}, { #3, #4}], x {xList, None}, FrameTicks -> {Automatic, {Transpose [ {xList, kList}], Brez}}, Frame -> True]

tukaj vnesite opis slike

Ob upoštevanju komentarja dolžine loka dolžine loka:

xList = Prepend [[email protected] MapThread [ArcLength [Line [{##}]] &, {Most [kList], Rest [kList]}], 0]; Nariši [energy @@ mapXToK [x], {x, 0, Last [xList]}, GridLines -> {xList, None}, FrameTicks -> {Automatic, {Transpose [{xList, kList}], None}}, Okvir -> True]

tukaj vnesite opis slike