Gelöste Aufgaben/T3BP: Unterschied zwischen den Versionen

Aus numpedia
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 112: Zeile 112:
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Solving
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Solving
|text=Die Lösung des Anfangswertproblems übertragen wir der Matlab-Routine ODE45.
|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.
Dabei organisieren wir die Zustandsgrößen so, dass in <code>y0</code> zunächst die 9 Anfangsverschiebungen und dann die 9 Anfangsgeschwindigkeiten stehen.


Wir lösen dann
Wir lösen dann
Zeile 127: Zeile 127:
\end{array}\right).</math>
\end{array}\right).</math>
z.B. mit
z.B. mit
::<math>V_{3,y}(\tau) = \frac{\displaystyle d}{\displaystyle d\tau} U_{3,y}(\tau).
::<math>V_{3,y}(\tau) = \frac{\displaystyle d}{\displaystyle d\tau} U_{3,y}(\tau)</math>.
|code=
|code=
<syntaxhighlight lang="matlab" line start=1>
<syntaxhighlight lang="matlab" line start=1>

Version vom 3. Oktober 2022, 08:54 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.


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
% params hold 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

Folder Structure

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.

archive
download compressed archive →


Post-Processing

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:

Bewegungsgrößen

.

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

1+1





Links

Literature

  • ...