Code-Beispiel
Wavepackets
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | KGS | 01.10.2011 |
Das kleine FreeBASIC Programm zeigt die unterschiedlichen zeitlichen Evolutionen von Elektronen und Photonen (Lichtquanten) bei gleicher Startverteilung. Entscheidend hierfür sind die unterschiedlichen Dispersionsrelationen, damit ist der Zusammenhang (funktional) zwischen Kreisfrequenz Omega (w im Programm) und Wellenzahl k gemeint. Für Elektronen ist dieser Zusammenhang quadratisch, für Photonen linear.
Alle physikalischen Größen sind in atomaren Einheiten dargestellt.
Das Programm eignet sich für einen Physikkurs in der Schule und kann noch deutlich verbessert werden. Die Elektronenwellenpakete im Programm sind rot können also auch anders eingefärbt werden. Die graphische Auflösung ist nur für Screen 20 (=1024x768, sollte jeder mind. haben) programmiert.
Screenshot des Wellenpaketes
(Abb. zum Vergrößern anklicken)
'Wavepackets
'Autor: Günther Schlegel
' Deklarationsteil
Const As Double pi = 3.1415927
Common Shared As Integer xmax , ymax,j,h
Common Shared As Double xa,xb,ym,ya,yb,ko,dk,_dx,ddx,c
Declare Function FNY (k As Double, t As Double,x As Double) As Double
Declare Function FNYp (k As Double, t As Double,x As Double) As Double
Declare Function FNa (k As Double) As Double
Declare Function we (k As Double) As Double
Declare Function wp (k As Double) As Double
Declare Sub WAVEPAC (t As Double)
Declare Sub WAVEPACp (t As Double)
Declare Sub impulsspek
Declare Sub DATEN
xmax = 1024 : ymax = 786 ' Standardbildschirmauflösung für screen 20
c = 137.0 ' Lichtgeschwindigkeit in atomaren Einheiten
'hquer = h/(2*pi)=1
'm=1
'we = 0.5*k*k Dispersionsrelation für Elektronen (rot)
'wp =c*k Dispersionsrelation für Photonen (blau)
j =1500
h =1500
xa=-5 'Linker Rand
xb=5 'Rechter Rand
ym=1
ya =-ym*j*j :yb =ym*j*j
ko = 80 ' mittlerer Impuls
dk = 20 ' Impulsunschärfe
_dx =(pi)/dk ' Ortsunschärfe
ddx=(xb-xa)/h
' Dispersionsfunktion für freie nicht relativistische Elektronen
Function we(k As Double)As Double
we = 0.5*k*k
End Function
'Dispersionsfunktion für Photonen
Function wp(k As Double)As Double
wp = c*k
End Function
'Wellenfunktion für freie nicht relativistische Elektronen
Function FNY(k As Double,t As Double,x As Double)As Double
FNY =Cos(k*x-we(k)*t)
End Function
'Wellenfunktion für Photonen
Function FNYp(k As Double,t As Double,x As Double)As Double
FNYp =Cos(k*x-wp(k)*t)
End Function
' Impulsverteilungsfunktion
Function FNa(k As Double)As Double
If k <= (ko-dk) Then
FNa = 0
ElseIf k >=(ko+dk) Then
FNa = 0
Else
FNa = 1
End If
End Function
' Subroutine für das Elektronenwellenpaket
Sub WAVEPAC (t As Double)
Static As Double xi,xp,y,yp,y1,y2,ti,ki,dxp,xop,yop
Line(xmax/2,ymax)-(xmax/2,0)
Line(xmax,ymax/4)-(0,ymax/4)
Line(0,ymax-1)-(xmax,ymax-1)
y1 = 0
'for ti = 0.000 to .00180 step 0.0090
ti = t
For xi = xa To xb Step ddx
For ki = ko-dk To ko+dk Step 2*dk/j
y = FNY(ki,ti,xi)
y1 = y1 + y
y2 = y1*y1
Next ki
yp=(1- (y2-ya)/(yb-ya))*ymax/2
xp=(xi-xa)/(xb-xa)*xmax
If xi = xa Then PSet (xp,yp)
Line-(xp,yp),4
y1 = 0
Next xi
'Next ti
dxp = (_dx-xa)/(xb-xa)*xmax
xop=(-_dx-xa)/(xb-xa)*xmax
yop =(1 -(-ya)/(yb-ya))*ymax/2
PSet (xop,yop)
Line - (xop,ymax/2),4
Line -(dxp,ymax/2),4
Line -(dxp,yop),4
End Sub
' Subroutine für das Photonenwellenpaket
Sub WAVEPACp (t As Double)
Static As Double xi,xp,y,yp,y1,y2,ti,ki,dxp,xop,yop
Line(xmax/2,ymax)-(xmax/2,0)
Line(xmax,ymax/4)-(0,ymax/4)
Line(0,ymax-1)-(xmax,ymax-1)
y1 = 0
'for ti = 0.000 to .00180 step 0.0090
ti = t
For xi = xa To xb Step ddx
For ki = ko-dk To ko+dk Step 2*dk/j
y = FNYp(ki,ti,xi)
y1 = y1 + y
y2 = y1*y1
Next ki
yp=(1- (y2-ya)/(yb-ya))*ymax/2
xp=(xi-xa)/(xb-xa)*xmax
If xi = xa Then PSet (xp,yp)
Line-(xp,yp),3
y1 = 0
Next xi
'Next ti
dxp = (_dx-xa)/(xb-xa)*xmax
xop=(-_dx-xa)/(xb-xa)*xmax
yop =(1 -(-ya)/(yb-ya))*ymax/2
PSet (xop,yop)
Line - (xop,ymax/2),3
Line -(dxp,ymax/2),3
Line -(dxp,yop),3
End Sub
' Subroutine zur Darstellung des Impulsspektrums (Impulsverteilung)
Sub impulsspek
Static As Double ki ,a1 ,ap,kp,aa,ab,ka,kb
aa = 0: ab = 2
ka = 0 :kb =2*ko
For ki = ka To kb Step kb/j
a1 = FNa(ki)
ap=( 1-(a1-aa)/(ab-aa))*ymax/2 +(ymax/2-20)
kp=(ki-ka)/(kb-ka)*xmax
If ki = ka Then PSet (kp,ap)
Line-(kp,ap),4
Next ki
End Sub
' Subroutine zur Darstellung der Achsenbezeichnungen und Ausgabe von Daten
Sub DATEN
Locate 1,64 :Print"I"
Locate 14,124:Print"x"
Locate 26,66 :Print"dx=";1/dk
Locate 18,15 : Print"vpe=";0.5*ko ' Phasengeschwindigkeit vp = w/k
Locate 18,25 : Print"vge=";ko ' Gruppengeschwindigkeit vg = w'(k)= dw/dk
Locate 20,15 : Print"vpp=c=";c
Locate 20,26 : Print"vgp=c=";c
Locate 22,26 : Print Using"Te= #.###";xb/ko 'Flugzeit für Elektronen zum rechten Rand
Locate 24,26 : Print Using"Tp= #.###";xb/c 'Flugzeit für Photonen zum rechten Rand
Locate 34,64 :Print"a"
Locate 35,66 :Print"dk=";dk
Locate 46,66 :Print "ko=";ko
Locate 46,124 :Print"k";
End Sub
' Hauptprogramm
Screen 20
Cls
WAVEPAC (0.0)
WAVEPAC (0.03)
WAVEPACp (0.0)
WAVEPACp (0.03)
impulsspek
DATEN
Sleep
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|