Gelöste Aufgaben/T3BP: Unterschied zwischen den Versionen

Aus numpedia
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 20: Zeile 20:
|text=Wir implementieren die Lösung in Matlab. Dafür verwenden wir das script <code>T3BP.m</code>, das die Funktionen
|text=Wir implementieren die Lösung in Matlab. Dafür verwenden wir das script <code>T3BP.m</code>, das die Funktionen
* <code>preprocess.m</code>,
* <code>preprocess.m</code>,
* <code>solve.m</code> und
* <code>ode45.m</code> (solve) und
* <code>postprocess.m</code>
* <code>postprocess.m</code>
aufruft. Die Klasse  
aufruft. Die Klasse  
* <code>planets.m</code>
* <code>planets.m</code>
verwenden wir nur, um die Systemparameter "<code>sys</code>" bequem ansprechen zu können.  
verwenden wir nur, um die Systemparameter "<code>sys</code>" bequem ansprechen zu können.
Zur Lösung des Anfangswertproblems rufen wir eine der ODE-Funktionen aus Matlab auf, die wir mit den Gleichgewichtsbedingungen unserer Funktion <code>t3bpdydt.m</code> füttern.  
|code=
|code=
<syntaxhighlight lang="notmuch" line start=1>
<syntaxhighlight lang="notmuch" line start=1>
Zeile 30: Zeile 31:
   |- preprocess
   |- preprocess
           |- class sys=planets(data)
           |- class sys=planets(data)
   |- solve
   |- ode45
          |- t3bpdydt
   |- postprocess
   |- postprocess
</syntaxhighlight>
</syntaxhighlight>
Zeile 63: Zeile 65:
F = \frac{\displaystyle m_1\cdot L}{\displaystyle T^2} \text{ zu } T = \sqrt{\frac{\displaystyle m_1\cdot L}{\displaystyle F}}
F = \frac{\displaystyle m_1\cdot L}{\displaystyle T^2} \text{ zu } T = \sqrt{\frac{\displaystyle m_1\cdot L}{\displaystyle F}}
</math>
</math>
erhalten.
erhalten. Damit ist <math>T \approx 175 Jahre</math>.


Damit können wir schreiben:
Damit können wir schreiben:
Zeile 76: Zeile 78:
Einsetzen und Kürzen liefert uns dann die dimensionslosen Bewegungsgleichungen
Einsetzen und Kürzen liefert uns dann die dimensionslosen Bewegungsgleichungen
::<math> \ddot{\underline{U}}_i = \sum_{\ell=j,k} \frac{\displaystyle \theta_\ell}{\displaystyle \varrho_{i,\ell}^2} \dot \underline{e}_{i,\ell} </math>.
::<math> \ddot{\underline{U}}_i = \sum_{\ell=j,k} \frac{\displaystyle \theta_\ell}{\displaystyle \varrho_{i,\ell}^2} \dot \underline{e}_{i,\ell} </math>.
Diese Gleichgewichtsbeziehungen implementieren wir in der Funktion <code>t3bpdydt.m</code>, die von dem Löser ODE45 aufgerufen wird.
|code=
|code=
<syntaxhighlight lang="matlab" line start=1>
<syntaxhighlight lang="matlab" line start=1>
Zeile 108: Zeile 111:


<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Solving
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Solving
|text=Text
|text=Die Lösung des Anfangswertproblems übertragen wir der Matlab-Routine ODE45.
Dabei organisieren wir die Zustandsgrößen so, dass in <pre>y0</pre> zunächst die 9 Anfangsverschiebungen und dann die 9 Anfangsgeschwindigkeiten stehen.
 
Wir lösen dann
::<math>\dot{\underline{q}}(\tau) = \underline{f}(\underline{q}(\tau))</math>
mit
::<math>\underline{q}(0) = \left(\begin{array}{c}
U_{1,x}(0)\\
U_{1,y}(0)\\
U_{1,z}(0)\\
U_{2,x}(0)\\
\vdots\\
V_{3,y}(0)\\
V_{3,z}(0)
\end{array}\right).</math>
z.B. mit
::<math>V_{3,y}(\tau) = \frac{\displaystyle d}{\displaystyle d\tau} U_{3,y}(\tau).
|code=
|code=
<syntaxhighlight lang="matlab" line start=1>
<syntaxhighlight lang="matlab" line start=1>
1+1
%% solve IVP
% set-up numerical paramters
tspan = 0:sys.tEnd/1000:sys.tEnd;
u0 = [transpose(sys.u0(1,:));transpose(sys.u0(2,:));transpose(sys.u0(3,:))]/sys.L;
v0 = [transpose(sys.v0(1,:));transpose(sys.v0(2,:));transpose(sys.v0(3,:))]*sys.T/sys.L;
% initial values from sys structured for ODE45
y0    = [u0;v0];
h = waitbar(0,'solving ODE - please wait...');
%
[t,y] = ode45(@(t,y)t3bpdydt(t,y,sys),tspan,y0);
close(h);
</syntaxhighlight>
</syntaxhighlight>
}}
}}
Zeile 123: Zeile 152:


<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Post-Processing
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Post-Processing
|text=Text
|text=[[Datei:T3BP-21.png|550px|right|mini|Trajektoren der Körper]]
 
Uns interessieren natürlich die Trajektorien der Körper im Raum - dabei zeichnen wir die Körper-Durchmesser entsprechend Ihrer Masse. Die Darstellung ist nicht maßstäblich.  
[[Datei:T3BP-21.png|550px|left|mini|Trajektoren der Körper]]
 
[[Datei:T3BP-22.png|150px|left|mini|Bewegungsgrößen <i>Σ M<sub>i</sub> <i>I<sub>i,x</sub></i>]]


Zur Kontrolle können wir prüfen, ob die ODE-Routine im Rahmen der numerischen Genauigkeit die Erhaltungssätze der Mechanik erfüllt. Das machen wir hier am Beispiel des Impulssystes: die Summe der Bewegungsgrößen jeweils in die drei Raumrichtungen muss gleich bleiben:
[[Datei:T3BP-22.png|150px|left|mini|Bewegungsgrößen <math>\sum_{i=1}^3 \theta_i \cdot I_{i,x0}</math>]].
Und schließlich schauen wir uns die Bewegung der drei Körper in einer Animation über der Zeit an - hier über einen Zeitraum 4375 Jahren.
[[Datei:T3BP-23.mp4|100%|left|mini|Animation der Bewegung]]
[[Datei:T3BP-23.mp4|100%|left|mini|Animation der Bewegung]]
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
Zeile 136: Zeile 164:
</syntaxhighlight>
</syntaxhighlight>
}}
}}
<table class="wikitable mw-collapsible" style="background-color:white; float: left; margin-right:14px;">
<tr><th></th><th></th></tr>
<tr><td></td><td></td></tr>
</table>


<hr/>
<hr/>
'''Links'''
'''Links'''
* ...
* [https://en.wikipedia.org/wiki/The_Three-Body_Problem_(novel) The Three-Body-Problem]


'''Literature'''
'''Literature'''
* ...
* ...

Version vom 3. Oktober 2022, 08:53 Uhr


Aufgabenstellung

Sie untersuchen das „Three-Body-Problem“(vgl. Wikipedia) numerisch. Dabei sollen die Bahnen von drei Körper mit den Punktmassen m1, m2, m3 in Wechselwirkung miteinander berechnet werden.

"Die Drei Sonnen"

Gesucht ist die Lösung des Anfangswertproblems für verschiedene Anfangswerte (Orte und Geschwindigkeiten) und Massen mi der Körper.


Lösung mit Matlab®

Die Lösung mit Matlab erfordert keine großen algebraischen Vorbereitungen - für die wir Maxima einsetzten würden. Als äußere Kräfte treten nur die Feldkräfte der Gravitation zwischen den Körpern auf - die wir einfach einschreiben und in Matlab implementieren können.

Declarations

Wir implementieren die Lösung in Matlab. Dafür verwenden wir das script T3BP.m, das die Funktionen

  • preprocess.m,
  • ode45.m (solve) und
  • postprocess.m

aufruft. Die Klasse

  • planets.m

verwenden wir nur, um die Systemparameter "sys" bequem ansprechen zu können. Zur Lösung des Anfangswertproblems rufen wir eine der ODE-Funktionen aus Matlab auf, die wir mit den Gleichgewichtsbedingungen unserer Funktion t3bpdydt.m füttern.




Equilibrium Conditions

Die Gravitationskräfte zwischen den Körpern i und j erfassen wir mit

F=Gmimjri,j2

mit der Gravitationskonstanten

G=6.6741011m3kgs2

Dabei gehen die Wirkungslinien der Kräfte durch die Massenmittelpunkte der Körper, die Körper ziehen sich gegenseitig an. Damit ist

F=Fei,j,

wobei ei,j der Einheitsvektor der Anziehungskraft - in diesem Fall von i nach j - ist.

Die Bewegungsgleichungen schreiben wir in Vektorschreibweise für Körper i als

miu¨˙i==j,kGmimri,2e˙i, mit ui=(ex,ey,ez)(uxuyuz)=u_i.

Dabei ist z.B. i=1 und =2,3.

Die drei Bewegungsgleichungen in den drei räumlichen Koordinaten ui formulieren wir in dimensionslosen Koordinaten. Dafür brauchen wir drei unabhängige Referenzgrößen, hier wählen wir

M=m1 Referenz-MasseL=1.61011km Referenz-Länge: der Durchmesser unseres Sonnensystems undF=Gm1m1L2 Referenz-Kraft.

Uns fehlt noch die Referent-Zeit T, die wir aus

F=m1LT2 zu T=m1LF

erhalten. Damit ist T175Jahre.

Damit können wir schreiben:

t=τT mit der dimensionslosen Zeit τmi=θim1 mit der dimensionslosen Masse θiu_i(t)=LU_i(τ) mit den dimensionslose Koordinaten Ui undri,j=Lϱi,j mit dem dimensionslosen Abstand zweier Körper ϱi,j.

Einsetzen und Kürzen liefert uns dann die dimensionslosen Bewegungsgleichungen

U_¨i==j,kθϱi,2e_˙i,.

Diese Gleichgewichtsbeziehungen implementieren wir in der Funktion t3bpdydt.m, die von dem Löser ODE45 aufgerufen wird.




Solving

Die Lösung des Anfangswertproblems übertragen wir der Matlab-Routine ODE45.

Dabei organisieren wir die Zustandsgrößen so, dass in

y0

zunächst die 9 Anfangsverschiebungen und dann die 9 Anfangsgeschwindigkeiten stehen.

Wir lösen dann

q_˙(τ)=f_(q_(τ))

mit

q_(0)=(U1,x(0)U1,y(0)U1,z(0)U2,x(0)V3,y(0)V3,z(0)).

z.B. mit

Fehler beim Parsen (Syntaxfehler): {\displaystyle V_{3,y}(\tau) = \frac{\displaystyle d}{\displaystyle d\tau} U_{3,y}(\tau). |code= <syntaxhighlight lang="matlab" line start=1> %% solve IVP % set-up numerical paramters tspan = 0:sys.tEnd/1000:sys.tEnd; u0 = [transpose(sys.u0(1,:));transpose(sys.u0(2,:));transpose(sys.u0(3,:))]/sys.L; v0 = [transpose(sys.v0(1,:));transpose(sys.v0(2,:));transpose(sys.v0(3,:))]*sys.T/sys.L; % initial values from sys structured for ODE45 y0 = [u0;v0]; h = waitbar(0,'solving ODE - please wait...'); % [t,y] = ode45(@(t,y)t3bpdydt(t,y,sys),tspan,y0); close(h); </syntaxhighlight> }} {{MyZipfileBlock |title=Matlab<sup>©</sup>-files |text =[[Datei:matlab-folder-structure.png|links|mini|Folder Structure]]Die Datei-Struktur zeit das Skript <nowiki>T3BP.m</nowiki>. Classes und Functions sind in den jeweiligen Ordnern. Die Excel-Datei hält alle System-Parameter. Den komplette Quellcode zu diesem Programm können Sie über dieses ZIP-File rechts herunterladen. |file =T3BP.zip}} <!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Post-Processing |text=[[Datei:T3BP-21.png|550px|right|mini|Trajektoren der Körper]] Uns interessieren natürlich die Trajektorien der Körper im Raum - dabei zeichnen wir die Körper-Durchmesser entsprechend Ihrer Masse. Die Darstellung ist nicht maßstäblich. Zur Kontrolle können wir prüfen, ob die ODE-Routine im Rahmen der numerischen Genauigkeit die Erhaltungssätze der Mechanik erfüllt. Das machen wir hier am Beispiel des Impulssystes: die Summe der Bewegungsgrößen jeweils in die drei Raumrichtungen muss gleich bleiben: [[Datei:T3BP-22.png|150px|left|mini|Bewegungsgrößen <math>\sum_{i=1}^3 \theta_i \cdot I_{i,x0}} ]].

Und schließlich schauen wir uns die Bewegung der drei Körper in einer Animation über der Zeit an - hier über einen Zeitraum 4375 Jahren.

Animation der Bewegung





Links

Literature

  • ...