Moderne Physik mit Maple
PDF-Buch Moderne Physik mit Maple
Update auf Maple 10
Kapitel 4.1.4
Worksheet montew_10.mws
c International Thomson Publishing Bonn 1995 filename: montew.ms
Autor: Komma Datum: 11.10.94
Thema: Annäherung an die wirkliche Bahn durch Auslosen von Pfaden.
Es wird kein bestimmter Funktionstyp vorausgesetzt, sondern ein zufälliger Pfad vorgegeben. Dieser Pfad wird zufällig verändert und die Änderung akzeptiert, wenn sich dadurch die Wirkung verringert.
Die Bewegung wird in n äquidistante Zeitschritte dt = t1/n unterteilt.
Von je drei Punkten mit den x-Werten a, x und b wird der mittlere variiert (x+dx), und die sich daraus ergebende Differenz der Wirkung dS berechnet.
Differenz der kinetischen Energie mal (!) dt:
Ti entspricht der mittleren kinetischen Energie (mal dt) der Bewegung von a nach b.
dT wurde in einer früheren Version dieses Worksheets berechnet und mit lprint hier eingefügt (als kleines Beispiel für <proc und <lprint).
Ti:=proc(a,x,b)
m/2*((x-a)^2+(b-x)^2)/dt;
end;
Ti := proc(a,x,b) 1/2*m*((x-a)^2+(b-x)^2)/dt end
dT:=Ti(a,x+dx,b)-Ti(a,x,b);
lprint(simplify(dT));
m*dx*(2*x+dx-a-b)/dt
> | restart:with(plots): |
> | dT:=proc(a,x,b,dx) |
> | -m*dx*(-2*x-dx+a+b)/dt; |
> | end; |
> |
Differenz der potentiellen Energie mal dt:
> | dV:=proc(x,dx) |
> | (V(x+dx)-V(x))*dt; |
> | end; |
Differenz der Wirkung (als Auswahlkriterium):
> | dS:=proc(a,x,b,dx) |
> | dT(a,x,b,dx)-dV(x,dx); |
> | end; |
> |
Wirkung zur Kontrollausgabe bereitstellen
> | Sa:=proc(ak) local i; |
> | sum(m/2*(xa[ak,i]-xa[ak,i+1])^2/dt-(V(xa[ak,i+1])+V(xa[ak,i]))/2*dt, i=1..n); |
> | end; |
> |
xa();
Anzahl der zu variierenden Punkte (wegen impliziter array-Definition fast überflüssig):
> | x1:='x1': n:='n': |
> | anz:=proc() global x,xa,x0; |
> | #n:=20: |
> | x:=array(1..n+1); |
> | x0:=array(1..n+1); |
> | x[1]:=0; x[n+1]:=x1; |
> | end; |
> |
anz();
zufällige Anfangsverteilung:
> | ini:=proc() local i; global x,x0,ran,dt; |
> | #x1:=3: |
> | dt:=t1/n: |
> | ran:=kr*(1-rand(1..1000)/500): |
> | for i from 2 to n do |
eine Systematik in der "Zufallsverteilung" (z.B. gleichf. Bewegung als nullte Näherung) verschlechtert das Verfahren:
es bleiben dann häufig die Pkte. neben den Randpunkten oder sonstige Spitzen stehen
> | #ran:=-rand(1..100)/100*x1+i*dt*x1/t1: |
> | x[i]:= ran(): |
> | x0[i]:=x[i]; |
> | od: |
> | x0[1]:=x[1]: x0[n+1]:=x1: |
> | end; |
> |
x();
x[5];
Potentialtyp
> | m:='m':g:='g':k:='k': |
> | V:=proc(x) |
1/2*k*x^2;
> | m*g*x; |
> | end; |
dV(s,d);dS(q,w,e,r);
dS(1,2,3,4);
zufällige Auswahl des Punktes erhöht Konvergenz nicht
rani:=rand(2..n);
rani();
#xa:=array(1..10,1..n+1);
#x();
> |
Prozedur zur Iteration
> | monte:=proc(pfade) local l,lk,ii,i,kk,mk; global x,xa,dx,ran,dt; |
> | for l to pfade do # 10 Pakete der Groesse |
> | for lk to kn do # kn (weniger Ausgabe, weniger Kurven) |
> |
> | for i from 2 to n do |
> |
> | for kk to 1 do # soll fuer kk>1 Spitzen abbauen |
> | dx:=ran()/l^ex: # 1/l^ex soll zufaellige Variation |
> | #dem Iterationsstadium anpassen |
> | if dS(x[i-1],x[i],x[i+1],dx) <=0 then x[i]:=x[i]+dx ; |
> | #print(x(),dS(x[i-1],x[i],x[i+1],dx)); |
> | fi; |
> | #x(); |
> | od: |
> | od: |
> | od: |
> | for mk to n+1 do xa[l,mk]:=x[mk]:od: |
> | print(l*kn,Sa(l)); #Kontrollausgabe |
> | od; |
> | end; |
> |
> |
> |
> | Sa(2); |
> |
Wirkung S der wirklichen Bahn
> | #diff(y(t),t$2)=-diff(V(z),z)/m; |
> | dgl:=subs(z=y(t),diff(y(t),t$2)=-diff(V(z),z)/m); |
> | soly:=proc() rhs(dsolve({dgl,y(0)=0,y(t1)=x1},y(t))); end; |
> |
> | S:=proc() int(m/2*diff(soly(),t)^2-V(soly()),t=0..t1); end; |
> | #S(); |
> |
Parameter und Anfangsverteilung
n: Anzahl der Punkte, kr: halbe Breite der zufälligen Anfangsverteilung (-kr < x0[i] < kr)
kn: Anzahl der Iterationen, nach der eine Ausgabe erfolgt, bzw. ein Pfad abgespeichert wird, (Gesamtzahl: 10kn)
ex: die Streuung der Zufallszahlen nimmt mit 1/j^ex ab, wo j das j-te Paket von kn Iterationen ist.
> | n:=10: kr:=2: kn:=10: ex:=1: |
Masse, Fallbeschleunigung und Federkonstante
> | m:=1: g:=100: k:=20: # m nicht float |
Endpunkt
> | x1:=3.: t1:=.9: # fuer dezimale Ausgabe mindestens eine Groesse als float eingeben |
Vorbereitung
> | #_seed:=100: # fuer neuen Anfangspfad deaktivieren |
> | anz(): ini(): |
> |
Iteration mit Kontrollausgabe
_seed:=100:
> | pfade:=100: monte(pfade); |
> | `exakt`=S(); |
x0();x();
xa();
Darstellung des Anfangspfades (ploti), der letzten Näherung (plotm) und der wirklichen Bahn (plote).
> | ploti:=plot([seq([i*dt-dt,x0[i]],i=1..n+1)],color=green): |
> | plotm:=plot([seq([i*dt-dt,x[i]],i=1..n+1)]): |
> | plote:=plot(soly(),t=0..t1,color=black): |
> | #plote; |
> | display({ploti,plotm,plote}); |
> |
> |
Jeder kn-te Pfad
> | aniplot:=seq(display([plote,ploti,plot([seq([i*dt-dt,xa[s,i]],i=1..n+1)])]),s=1..pfade): |
> | display([aniplot]); |
> |
Animation
> | display([aniplot],insequence=true); |
> |
Diskussion:
Beim Experimentieren mit den verschiedenen Parametern stellt man fest, daß sich die Konvergenz der gedachten Pfade gegen die wirkliche Bahn nicht immer erzwingen läßt. Insbesondere kann man bei periodischer Bewegung sogar Divergenz bekommen, wenn t1 größer als die halbe Periodendauer wird. Das liegt sicher nicht nur an dem simplen Rechenverfahren, sondern in der *Natur* der Sache: die Natur nimmt es nicht so genau mit *der* Wirklichkeit. Es gibt viele Pfade, die sich in ihrer Wirkung von der wirklichen Bahn nur wenig unterscheiden.
Für große n sollte man eine Verbesserung der Konvergenz erwarten. Statt dessen bleibt die Iteration manchmal bei lokalen Minima hängen und liefert z.T. zur wirklichen Bahn spiegelbildliche Bahnen.
Aber es ist ja auch nicht der Zweck dieses einfachen Modells, die wirkliche Bahn zu berechnen. Es soll vielmehr das zeigen, was Feynman meint, wenn er von Teilchen spricht, die "schnuppern", um ihre Bahn zu finden. Während bei den Feynmanschen Pfadintegralen die Auswahl (besser die Gewichtung) der Pfade durch Interferenz geschieht, wird sie hier schlicht durch Probieren erreicht. So viel Zeit kann sich die Natur natürlich nicht nehmen. Kein Elektron würde je ankommen, wenn es ständig schnuppernd unterwegs wäre. Und diese Interferenz muß schon ein genial schneller Rechner sein, wenn sie zu jeder Zeit und an jedem Ort in einem einzigen Moment das Ergebnis der Überlagerung aller möglichen Pfade berechnet und das auch noch für alle Teilchen der Welt.
> |
> |
> |
> |
> |
> |
> |
> |
> |
> |
komma@oe.uni-tuebingen.de