Gelöste Aufgaben/T3BP: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 18: | Zeile 18: | ||
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Declarations | <!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Declarations | ||
|text= | |text=Dafür verwenden wir das script <code>T3BP.m</code>, das die Funktionen | ||
* <code>preprocess.m</code>, | * <code>preprocess.m</code>, | ||
* <code>ode45.m</code> (solve) und | * <code>ode45.m</code> (solve) und | ||
Zeile 45: | Zeile 45: | ||
Dabei gehen die Wirkungslinien der Kräfte durch die Massenmittelpunkte der Körper, die Körper ziehen sich gegenseitig an. | Dabei gehen die Wirkungslinien der Kräfte durch die Massenmittelpunkte der Körper, die Körper ziehen sich gegenseitig an. | ||
Damit ist | Damit ist | ||
::<math>\vec{F} = F\cdot \vec{e}_{i,j}</math>, | ::<math>\vec{F} = F \cdot \vec{e}_{i,j}</math>, | ||
wobei <math>\vec{e}_{i,j}</math> der Einheitsvektor der Anziehungskraft - in diesem Fall von <i>i</i> nach <i>j</i> - ist. | wobei <math>\vec{e}_{i,j}</math> der Einheitsvektor der Anziehungskraft - in diesem Fall von <i>i</i> nach <i>j</i> - ist. | ||
Die Bewegungsgleichungen schreiben wir in Vektorschreibweise für Körper <i>i</i> als | Die Bewegungsgleichungen schreiben wir mit <math>F</math> in Vektorschreibweise für Körper <i>i</i> als | ||
::<math> m_i \dot \ddot{\vec{u}}_i = \sum_{\ell=j,k} G\cdot \frac{\displaystyle m_i\cdot m_\ell}{\displaystyle r_{i,\ell}^2} \ | ::<math> m_i \dot \ddot{\vec{u}}_i = \sum_{\ell=j,k} G\cdot \frac{\displaystyle m_i\cdot m_\ell}{\displaystyle r_{i,\ell}^2} \cdot \vec{e}_{i,\ell} \text{ mit } | ||
\vec{u}_i = \left(\vec{e}_x,\vec{e}_y,\vec{e}_z\right)\cdot \underbrace{\left(\begin{array}{l}u_x\\u_y\\u_z\end{array}\right)}_{\displaystyle = \underline{u}_i}</math>. | \vec{u}_i = \left(\vec{e}_x,\vec{e}_y,\vec{e}_z\right)\cdot \underbrace{\left(\begin{array}{l}u_x\\u_y\\u_z\end{array}\right)}_{\displaystyle = \underline{u}_i}</math>. | ||
Dabei ist z.B. <i>i=1</i> und <i><math>\ell</math>=2,3</i>. | Dabei ist z.B. <i>i=1</i> und <i><math>\ell</math>=2,3</i>. | ||
Zeile 155: | Zeile 155: | ||
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. | 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 | 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 Impulssatzes: 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>]]. | [[Datei:T3BP-22.png|150px|left|mini|Bewegungsgrößen <math>\sum_{i=1}^3 \theta_i \cdot I_{i,x0}</math>]]. | ||
Und das tut sie offensichtlich auch - im Rahmen der numerischen Genauigkeit. | |||
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. | 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]] |
Version vom 3. Oktober 2022, 09:03 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.
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
Dafür verwenden wir das script T3BP.m
, das die Funktionen
preprocess.m
,ode45.m
(solve) undpostprocess.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.
T3BP
|- preprocess
|- class sys=planets(data)
|- ode45
|- t3bpdydt
|- postprocess
Equilibrium Conditions
Die Gravitationskräfte zwischen den Körpern i und j erfassen wir mit
mit der Gravitationskonstanten
Dabei gehen die Wirkungslinien der Kräfte durch die Massenmittelpunkte der Körper, die Körper ziehen sich gegenseitig an. Damit ist
- ,
wobei der Einheitsvektor der Anziehungskraft - in diesem Fall von i nach j - ist.
Die Bewegungsgleichungen schreiben wir mit in Vektorschreibweise für Körper i als
- .
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
Uns fehlt noch die Referent-Zeit T, die wir aus
erhalten. Damit ist .
Damit können wir schreiben:
Einsetzen und Kürzen liefert uns dann die dimensionslosen Bewegungsgleichungen
- .
Diese Gleichgewichtsbeziehungen implementieren wir in der Funktion t3bpdydt.m
, die von dem Löser ODE45 aufgerufen wird.
function dydt = t3bpdydt(t,y,sys)
% implementation of ode
% sys holds system parameters
% get coordinates
for body = 1:3
u(body,1:3) = transpose(y(3*(body-1)+1:3*body,1));
end
r = zeros(3,3,3);
e = zeros(3,3,3);
% compose vectors, unit vectors and distances
r(1,2,:) = u(2,:)-u(1,:); % this from m[1] to m[2]
:
:
:
% mass 3
dydt(9+7:9+9,1)=sys.theta(1)/R(3,1)*e(3,1,:)+sys.theta(2)/R(3,2)*e(3,2,:);
%% velocities
dydt(1:9,1) = y(10:18,1);
%%
waitbar(t / sys.tEnd);
end
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
mit
z.B. mit
- .
%% 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);
Matlab©-files
Die Datei-Struktur zeit das Skript T3BP.m. 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.
download compressed archive →
Post-Processing
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 Impulssatzes: die Summe der Bewegungsgrößen jeweils in die drei Raumrichtungen muss gleich bleiben:
.
Und das tut sie offensichtlich auch - im Rahmen der numerischen Genauigkeit.
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.
1+1
Literature