Buchempfehlung
Visual Basic 6 Kochbuch
Visual Basic 6 Kochbuch
Viele praktische Tipps zum Programmieren mit Visual Basic 6, die sich oft auch auf FB übertragen lassen. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Mathematik

Wavepackets

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.MitgliedKGS 01.10.2011

Das kleine FreeBASIC Programm zeigt die unterschiedlichen zeitlichen Evolutionen von Externer Link!Elektronen und Externer Link!Photonen (Lichtquanten) bei gleicher Startverteilung. Entscheidend hierfür sind die unterschiedlichen Externer Link!Dispersionsrelationen, damit ist der Zusammenhang (funktional) zwischen Externer Link!Kreisfrequenz Omega (w im Programm) und Externer Link!Wellenzahl k gemeint. Für Elektronen ist dieser Zusammenhang quadratisch, für Photonen linear.
Alle physikalischen Größen sind in Externer Link!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 BefehlsreferenzeintragScreen 20 (=1024x768, sollte jeder mind. haben) programmiert.

Screenshot des Wellenpaketes
Vergrößern
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
  • Das Code-Beispiel wurde am 30.09.2011 von MitgliedKGS angelegt.
  • Die aktuellste Version wurde am 01.10.2011 von RedakteurMOD gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen