Gelöste Aufgaben/T3BP
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.
![](/images/thumb/1/13/T3BP-01.png/150px-T3BP-01.png)
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) 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 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
![](/images/c/c2/Matlab-folder-structure.png)
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.
![](/images/thumb/e/ee/Zipfile.png/80px-Zipfile.png)
download compressed archive →
Post-Processing
![](/images/thumb/a/ac/T3BP-21.png/550px-T3BP-21.png)
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:
![](/images/thumb/8/8f/T3BP-22.png/150px-T3BP-22.png)
.
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