View
11
Download
0
Category
Preview:
Citation preview
3.1 Beispiel: mathematisches Pendel
Wir untersuchen die Bewegungsleichung des mathematischen (gedampften)
Fadenpendels in einer Dimension
ϕ+ α ϕ+Ω20 sinϕ = 0, Ω2
0 = g/ℓ (1)
Das aquivalente System 1. Ordnung:
ϕ = ω
ω = −αω −Ω20 sinϕ (2)
+ Anfangsbedingungen
ϕ(0) = ϕ0, ω(0) = ω0 .
Zwei Fixpunkte (Ruhelagen) ϕ = ω = 0:
ϕ(0)0 = 0, ϕ
(0)1 = π
ϕ(0)0 : stabiler Fokus, ϕ
(0)1 : instabiler Sattelpunkt.
Energiesatz
Multiplikation von (1) mit ϕ und Integration uber t:
1
2ϕ2 −Ω2
0 cosϕ = E0 − EW (t) (3)
E0: Integrationskonstante. Warmeenergie (Reibung)
EW (t) = α∫
dt ϕ2
Im reibungsfreien Fall (α = 0) gilt Energieerhatlung
E = E0
und das Pendel kommt nie zur Ruhe.
Euler-Vorwarts-Verfahren
PROGRAM PENDELCHARACTER*1 cINTEGER PGCURSREAL, DIMENSION(2) :: fipg,ompgpi=3.14159265omega=1.; alpha ! Eigenfrequenz, Daempfungtper=2.*pi/omega ! Priodenlaenge
CWRITE(6,*)’dt?’READ(5,*) dtCALL PGBEGIN(0,’/xwin’,1,1): CALL PGPAP(6.,1.)CALL PGENV(-pi,pi,-pi,pi,0,1)
1 fi=0.; om=0.K=PGCURS(fi,om,c) ! Startpunkt mit Cursor waehlenIF(C.EQ.’L’) THEN ! Bildschirm loeschen durch LCALL PGERASCALL PGBOX(’ABCNT’,0.,0,’ABCNT’,0.,0)GOTO 1
ENDIF
IF(C.EQ.’ ’) GOTO 999 ! Programm beenden durch <blank>
t=0.; n=010 CONTINUE ! Zeitschleife
t=t+dtfip=om ! Euler Vorwaertsomp=-alpha*om-omega**2*SIN(fi)
Cfi=fi+fip*dtom=om+omp*dt
Cfipg(1)=fipg(2); ompg(1)=ompg(2)fipg(2)=fi; ompg(2)=omIF(fi.GT.pi) THENfi=fi-2.*pifipg=fi
ELSEIF(n.NE.0) CALL PGLINE(2,fipg,ompg)
ENDIFIF(fi.LT.-pi) THENfi=fi+2.*pifipg=fi
ELSEIF(n.NE.0) CALL PGLINE(2,fipg,ompg)
ENDIF
n=n+1IF(n.EQ.50) THENE=.5*fip**2-omega**2*cos(FI) ! Gesamtenergien=1WRITE(6,*) t,fi,e
ENDIFIF(t.LT.50.*tper) GOTO 10GOTO 1
999 CALL PGENDEND
Programm
Phasenraum und Gesamtenergie Pendel, Euler-Vorwarts-Verfahren
α = 0, ∆t = 0.05
Phasenraum und Gesamtenergie Pendel, Euler-Vorwarts-Verfahren
α = 0.1, ∆t = 0.05
Phasenraum und Gesamtenergie Pendel, Euler-Vorwarts-Verfahren
α = 0.1, ∆t = 0.15
Vorlaufiges Fazit (Euler-Vorwarts):
– Die Ergebnisse fur α = 0 sind alle falsch (negative numerische Dampfung)
– Fur α > 0 erhalt man qualitativ richtige Resultate fur kleine ∆t
– Auch im gedampften Fall wachst die Energie an und die Trajektorien
entfernen sich vom stabilen (!) Fixpunkt, wenn ∆t zu groß wird.
Phasenraum und Gesamtenergie Pendel, Euler-Ruckwarts-Verfahren
Harmonischer Oszillator, implizites Verfahren 1. Ordnung, α = 0
∆t = 0.05 (schwarz), ∆t = 0.1 (rot)
3.3 Verfahren hoherer Ordnung
Euler-Verfahren konvergiert schlecht, liefert ungenaue, (unphysikalische)
Ergebnisse.
Bei konservativen Systemen qualitativ falsches Verhalten.
Ausweg: Verfahren hoherer Ordnung in ∆t.
3.3.1 Verfahren von Heun
Zunachst eindimensionales System
dx
dt= f(t, x) , (4)
Integriere (4) uber t
∫ t+∆t
tdt′
dx
dt′= x(t+∆t)− x(t) =
∫ t+∆t
tdt′ f(t′, x(t′)) (5)
Ergibt exakte Iterationsvorschrift
x(t+∆t) = x(t) +∫ t+∆t
tdt′ f(t′, x(t′)) . (6)
Euler-Methode, wenn Integral durch Rechteckregel genahert:
∫ t+∆t
tdt′ f(t′, x) ≈ f(t, x(t))∆t .
durch genauere Trapezregel
∫ t+∆t
tdt′ f(t′, x) ≈
(
f(t, x(t)) + f(t+∆t, x(t+∆t))
)
∆t
2,
ergibt sich in (6)
x(t+∆t) = x(t) +
(
f(t, x(t)) + f(t+∆t, x(t+∆t))
)
∆t
2. (7)
Rechte Seite enthalt x(t+∆t), deshalb implizite Vorschrift.
Berechnet man x(t+∆t) rechts aus einem Euler-Verfahren
x(t+∆t) = x(t) + f(t, x(t))∆t
ergibt sich
x(t+∆t) = x(t) +
(
f(t, x(t)) + f(t+∆t, x(t) + f(t, x(t))∆t)
)
∆t
2, (8)
das Verfahren von Heun.
Genauigkeit
Von welcher Ordnung ist der Fehler beim Verfahren von Heun?
x(t+∆t)− x(t) =
(
f(x(t)) + f(x(t) + f(x(t))∆t)
)
∆t
2
Entwickeln der linken Seite nach ∆t
L.S. =dx
dt∆t+
1
2
d2x
dt2∆t2 +
1
6
d3x
dt3∆t3 + ... = f∆t+
1
2
df
dxf∆t2
+1
6
(
f2d2f
dx2+ f
(
df
dx
)2)
∆t3 + .... ,
der rechten nach f∆t:
R.S. =∆t
2
(
2f +df
dxf∆t+
1
2
d2f
dx2f2∆t2
)
+ ... ,
wobei ... Terme der Ordnung ∆t4 bedeuten.
Beide Seiten stimmen bis zur Ordnung ∆t2 uberein.
Fehler hat die Ordnung ∆t3
Numerische Stabilitat
Wie beim Euler-Verfahren lasst Linearisierung um stabilen Fixpunkt
~u(t+∆t) = Q · ~u(t)
Q = 1+∆t L+1
2∆t2L2
mit L als Jacobi-Matrix
Lij =∂fi∂xj
∣
∣
∣
∣
∣
~x(0). (9)
Numerische Stabilitat folgt aus ρ(Q) < 1, also
ρ = maxi
|1+∆tλi +1
2∆t2λ2i | < 1
mit Eigenwerten λi von L.
Beispiel harmonischer Oszillator:
λ12 = −α
2±
1
2i√
4Ω20 − α2
ergibt Bedingung fur die Stabilitatsgrenze (maximaler Zeitschritt):
−α+1
2α2∆t−
1
2αΩ2
0∆t2 +1
4Ω4
0∆t3 = 0 .
Maximaler Zeitschritt, der fur α > 0 großer als beim Eulerverfahren ist
Fur ungedampften Fall α = 0 ist Heun-Verfahren fur das Pendel immer
noch bedingungslos instabil.
Spektralradien uber ∆t, harmonischer Oszillator, Ω0 = 1, links: gedampft,
α = 1/2, rechts: ungedampft, α = 0. Grun: Euler, Rot: Heun, Gelb:
Runge-Kutta (RK4).
3.3.2 Runge-Kutta-Verfahren
– Erhohung der Ordnung wirkt sich positiv auf Schrittweite und Genauigkeit
aus.
– Verfahren hoherer Ordnung
Runge-Kutta-Verfahren (RK).
Normalerweise 4. Ordnung (RK4).
Der Einfachheit halber hier nur 2. Ordnung:
Sei x = x(t) gesuchte Losung der DGL
x = f(t, x(t)) .
Man entwickelt x um t+∆t/2
x(t) = x(t+∆t/2)−∆t
2x(t+∆t/2) +
1
2
(
∆t
2
)2
x(t+∆t/2) +O(∆t3)
x(t+∆t) = x(t+∆t/2) +∆t
2x(t+∆t/2) +
1
2
(
∆t
2
)2
x(t+∆t/2) +O(∆t3)
Subtraktion der beiden Gleichungen
x(t+∆t) = x(t) +∆t x(t+∆t/2) +O(∆t3) ,
Iterationsvorschrift der Ordnung ∆t2.
man muss x = f fur t+∆t/2 kennen.Euler-Verfahren:
x(t+∆t/2) = f(t+∆t/2, x(t+∆t/2)) = f(t+∆t/2, x(t) +∆t/2 f(t, x(t))) +O(∆t2) .
Ein Iterationschritt sieht so aus:
k1 = ∆t f(t, x(t))
k2 = ∆t f(t+∆t/2, x(t) + k1/2) (10)
x(t+∆t) = x(t) + k2 .
Genauso lasst sich ein Verfahren 4. Ordnung (RK4) konstruieren:
k1 = ∆t f(t, x(t))
k2 = ∆t f(t+∆t/2, x(t) + k1/2)
k3 = ∆t f(t+∆t/2, x(t) + k2/2) (11)
k4 = ∆t f(t+∆t, x(t) + k3)
x(t+∆t) = x(t) +1
6(k1 + k2 + k3 + k4) .
SUBROUTINE rk4(y,t,n,dt,eq)C integriert das dgl-System definiert in eq von t bis t+dt
C y abh. Variablen y(n)C t unabh. VariableC n Anzahl der abh. VariablenC dt ZeitschrittC eq die rechten Seiten der dgls (subroutine)
REAL, DIMENSION(n) :: yREAL, DIMENSION(size(y)) :: f1,f2,f3,f4
CALL eq(f1,y,t); f1=dt*f1CALL eq(f2,y+.5*f1,t+dt/2.); f2=dt*f2CALL eq(f3,y+.5*f2,t+dt/2.); f3=dt*f3CALL eq(f4,y+f3,t+dt)y=y+(f1+2.*f2+2.*f3+f4*dt)/6.END
Fehler bei RK4 O(∆t5), die Stabilitat (ohne Rechnung)
ρ = maxi
∣
∣
∣
∣
1+∆tλi +1
2∆t2λ2i +
1
6∆t3λ3i +
1
24∆t4λ4i
∣
∣
∣
∣
< 1 . (12)
Beispiel: Mathematisches Pendel mit RK4
Als RK4-Anwendung wird das mathematische Pendel untersucht.
RK4 liefert selbst fur den problematischen ungedampften Grenzfall α = 0
konvergierende Ergebnisse.
Fur kleine Zeitschritte wird Energie gut konserviert.
Programmbeispiel zur Berechnung einer Trajektorie,Anfangsbedingung ϕ = 2, ω = 0:
PROGRAM pendel_rk4REAL, DIMENSION(2) :: y ! Variable phi, omega
...y=(/2.,0./) ! Anfangswert fuer phi und omegat=0.; dt=0.01 ! dt am AnfangDO ! Beginn Zeitschleife
t=t+dtCALL rk4(y,t,2,dt,pendel_dgl) ! Ein Zeitschritt RK4
...IF(t.GT.tend) EXIT
ENDDO...
Steht die Routine rk4 in der Programm-Library, so muss in der Datei inder das Hauptprogramm steht nur die Subroutine pendel dgl spezifiziertwerden.
...CONTAINS ! Dadurch sind alpha, omega bekannt (globale Variable)
SUBROUTINE pendel_dgl(rhside,y,t)REAL, DIMENSION(2) :: rhside,yrhside(1)=y(2)rhside(2)=-alpha*y(2)-omega**2*SIN(Y(1))END SUBROUTINE pendel_dgl
END PROGRAM pendel_rk4
Das ungedampfte mathematische Pendel (α = 0) mit RK4
fur ∆t = 0.1 bleibt die Energie uber viele Perioden in guter Naherung
erhalten.
Das ungedampfte mathematische Pendel (α = 0) mit RK4
Bei zu großem Zeitschritt verfalscht die numerische Dampfung das Re-
sultat (∆t = 1)
Programm
Recommended