Problem n ciał

Wstęp.

W ramach tego opracowania pochyliłem się nieco nad problemem ruchu n ciał oddziałujących na siebie grawitacyjnie. Problem został przeze mnie tylko nieco liźnięty bo jest to wbrew pozorom bardzo ciekawe i praktyczne zagadnienie, którego złożoność jest znacznie większa niż się początkowo wydaje. Już sam fakt, że po dziś dzień umysły tego świata mają trudności z analitycznym rozwiązaniem tego zagadnienia powoduje, że warto się z tym zapoznać, żeby chociaż wiedzieć z czym to się je. Całość opiera się w zasadzie tylko na prawach fizyki sformułowanych przez Izaaka Newtona. Do tego dochodzi jeszcze szczypta metod numerycznych.

Równania ruchu.

Zgodnie z II zasadą dynamiki Newtona, równanie ruchu ciała o masie skupionej dane jest w postaci: $$ \mb{a}=\frac{\mb{F}}{m}, $$ gdzie: $\mb{a}$ - przyspieszenie, $\mb{F}$ - siła wypadkowa, $m$ - masa ciała. Siła oddziaływania grawitacyjnego dwóch ciał na siebie, zgodnie z prawem grawitacji Newtona przedstawia się następująco: $$ \mb{F}=\gamma\frac{m_1 m_2}{r^2}\mb{\hat{r}}, $$ gdzie: $\gamma$ - stała grawitacji, $m_1$ i $m_2$ - masy ciał, $r$ - odleglość między ciałami, $\mb{\hat{r}}$ - wersor łączący położenia ciał. Jeśli wyznaczana jest siła z jaką ciało 2 działa na ciało 1, to wersor $\hat{r}$ skierowany jest w stronę ciała 2. Korzystając z powyższych zależności można dokonać rozszerzenia problemu na n ciał wyznaczając ich wypadkowe sił oddziaływania oraz równania ruchu: $$ \ddot{\mb{x}}_i=\gamma\sum_{j=1,i\neq j}^{n}m_j\frac{\mb{x}_j-\mb{x}_i}{||\mb{x}_j-\mb{x}_i||^3}, $$ gdzie: $\mb{x}_i$ - trajektoria ruchu ciała i-tego będąca ciągłą funkcją czasu. Aby uzyskać ostatecznie postać poszukiwanych trajektorii należy rozwiązać powyższe równanie różniczkowe dla każdego z ciał. Równanie ruchu ciała dla przypadku dwuwymiarowego można sprowadzić do układu równań różniczkowych: $$ \mb{\dot{x}}=\mb{f}(\mb{x}), $$ gdzie: $\mb{x}=\begin{bmatrix}s_x & s_y & v_x & v_y\end{bmatrix}^T$, $s_x$ i $s_y$ - składowe położenia, $v_x$ i $v_y$ - składowe prędkości. Otrzymuje się ostatecznie postać równań ruchu: $$ \frac{d}{dt}\begin{bmatrix}s_x \\ s_y \\ v_x \\ v_y\end{bmatrix} = \begin{bmatrix}v_x \\ v_y \\ \frac{F_x}{m} \\ \frac{F_y}{m}\end{bmatrix}. $$ Traktując ruch n ciał jako pojedynczy układ dynamiczny należy rozbudować wektor $\mb{x}$ o stan wszystkich obiektów: $$ \mb{x}=\begin{bmatrix}s_{1,x} & s_{1,y} & v_{1,x} & v_{1,y} & s_{2,x} & s_{2,y} & v_{2,x} & v_{2,y} & \dots & s_{n,x} & s_{n,y} & v_{n,x} & v_{n,y}\end{bmatrix}^T, $$ co umożliwia sprowadzanie go do ogólnej postaci równań różniczkowych rozwiązywalnych z użyciem dostępnych metod całkowania numerycznego.

Układ uproszczony. Pierwsza prędkość kosmiczna.

Tematem, który dodatkowo chciałem poruszyć w ramach tego opracowania jest układ uproszczony ruchu dwóch ciał, który idealnie nadaje się do testowania metod całkowania równań różniczkowych. Zakładamy, że jedno z ciał jest znacząco bardziej masywne od drugiego, na tyle, że oddziaływanie tego drugiego jest pomijalne i nie powoduje zmiany położenia ciała cięższego. Układ odniesienia zlokalizowany jest w centrum ciała masywnego. W przybliżeniu można powiedzieć, że przykładem tego typu dwóch ciał jest para Słońce - Ziemia.

Równania stanu satelity, zgodnie z wcześniej przytoczonymi zależnościami dane są w postaci: $$ \frac{d}{dt}\begin{bmatrix}s_x \\ s_y \\ v_x \\ v_y\end{bmatrix} = \begin{bmatrix}v_x \\ v_y \\ -\gamma M \frac{s_x}{(s^2_x + s^2_y)^{\frac{3}{2}}} \\ -\gamma M \frac{s_y}{(s^2_x + s^2_y)^{\frac{3}{2}}}\end{bmatrix}, $$ gdzie: $M$ - masa ciała w centrum. Aby otrzymać stabilną, kołową trajektorię ruchu satelity należy nadać mu odpowiednią prędkość początkową, zwaną pierwszą prędkością kosmiczną. Jej wyznaczenie, przy założeniu braku oporów, możliwe jest poprzez przyrównanie siły dośrodkowej w ruchu po okręgu oraz siły przyciągania grawitacyjnego ciała masywnego: $$ \frac{mv^2}{r}=\gamma \frac{Mm}{r^2}, $$ gdzie: $m$ - masa satelity, $v$ - pozioma (względem powierzchni ciała masywnego) prędkość liniowa satelity, $r$ - promień orbity. Po kilku przekształceniach otrzymuje się ostatecznie zależność wiążącą prędkość satelity oraz jego orbitę: $$ v=\sqrt{\frac{\gamma M}{r}}. $$ Ostatnią rzeczą, której wyznaczenie może się do czegoś przydać jest środek ciężkości układu złożonego z n ciał. Jego współrzędne dane są w postaci: $$ \mb{s}_0=\frac{\sum_{i=1}^{n}{m_i\mb{s}_i}}{\sum_{i=1}^{n}{m_i}}, $$ gdzie: $\mb{s}_0$ - wektor położenia środka ciężkości (barycentrum), $\mb{s}_i$ - wektor położeń ciał.

Implementacja

Na potrzeby tego opracowania stworzono mały skrypt Matlaba, który umożliwia symulacje trajektorii w zasadzie dowolnej ilości ciał. Całkowanie równań odbywa się z użyciem metody RK4. Całą paczkę można ściągnąć tutaj: Download

Paczka zawiera w sobie 3 pliki:

  • nBodies.m - skrypt uruchamiający symulację. Aby dodać ciała należy uzupełnić wektor warunków początkowych o 4 kolejne wielkości zgodnie z przyjętą tutaj konwencją. Pamiętać należy również o dodaniu mas następnych ciał do stosownego wektora. Macierz y jest trójwymiarową macierzą o wymiarach: (ilość ciał, 4, ilość kroków symulacji).
  • eqOfMot.m - funkcja implementująca równania ruchu n ciał. Pierwszym krokiem jest stworzenie macierzy sił oddziałujących pomiędzy ciałami. Następnie wyznaczane są równania różniczkowe.
  • gravForce.m - funkcja obliczająca wartość siły grawitacji pomiędzy dwoma ciałami.
Powyższy algorytm nie uwzględnia możliwości kolizji ciał. Skutkuje to mniej więcej tym, że jeśli ciała zbliżą się do siebie na niebezpiecznie małą odległość to zgodnie z równaniem na siłę oddziaływania, na ciała zadziała dążąca do nieskończoności siła i ciała wystrzelą jak z procy.

Przykładowe wyniki uzyskane z użyciem wspomnianego kodu przedstawiono poniżej:

Problem n cial 1 Problem n cial 2
Problem n cial 3 Problem n cial 4

Oczywiście lepszy efekt można byłoby uzyskać animując te wykresy, a nie prezentując tylko wyznaczone trajektorie. Będzie to jeden z kolejnych punktów o które będę musiał rozbudować niniejszy "projekt".