Jump to content

N-Body Problems: Difference between revisions

From Haidhi Wiki
Created page with "'''N-body problem''' adalah masalah memprediksi gerakan individual sekumpulan objek bermassa yang berinteraksi satu sama lain melalui gaya gravitasi. Untuk dua body (''two-body problem''), terdapat solusi analitik tertutup yang diberikan oleh hukum Kepler. Namun untuk <math>N \geq 3</math>, sistem umumnya '''tidak memiliki solusi analitik''' dan harus diselesaikan secara numerik melalui simulasi. Artikel ini menjelaskan formulasi matematika N-body problem berbas..."
 
No edit summary
Line 278: Line 278:
* Hairer, E., Lubich, C., & Wanner, G. (2006). ''Geometric Numerical Integration: Structure-Preserving Algorithms for Ordinary Differential Equations''. Springer.
* Hairer, E., Lubich, C., & Wanner, G. (2006). ''Geometric Numerical Integration: Structure-Preserving Algorithms for Ordinary Differential Equations''. Springer.
* Nyland, L., Harris, M., & Prins, J. (2007). [https://developer.nvidia.com/gpugems/gpugems3/part-v-physics-simulation/chapter-31-fast-n-body-simulation-cuda "Fast N-Body Simulation with CUDA"]. ''GPU Gems 3'', NVIDIA Corporation.
* Nyland, L., Harris, M., & Prins, J. (2007). [https://developer.nvidia.com/gpugems/gpugems3/part-v-physics-simulation/chapter-31-fast-n-body-simulation-cuda "Fast N-Body Simulation with CUDA"]. ''GPU Gems 3'', NVIDIA Corporation.
[[Kategori:Mekanika klasik]]
[[Kategori:Simulasi numerik]]
[[Kategori:Astrofisika komputasional]]

Revision as of 01:33, 29 May 2026

N-body problem adalah masalah memprediksi gerakan individual sekumpulan objek bermassa yang berinteraksi satu sama lain melalui gaya gravitasi. Untuk dua body (two-body problem), terdapat solusi analitik tertutup yang diberikan oleh hukum Kepler. Namun untuk N≥3, sistem umumnya tidak memiliki solusi analitik dan harus diselesaikan secara numerik melalui simulasi.

Artikel ini menjelaskan formulasi matematika N-body problem berbasis hukum gravitasi Newton dan memberikan contoh perhitungan manual untuk kasus tiga body.

Hukum Gravitasi Newton

Antara dua body bermassa m1 dan m2 yang berjarak r, terdapat gaya tarik gravitasi yang dirumuskan oleh Isaac Newton sebagai:

F=Gm1m2r2

di mana:

Gaya gravitasi memiliki dua sifat penting:

  1. Selalu menarik (attractive), tidak pernah menolak.
  2. Bersifat mutual — body 1 menarik body 2 dengan gaya yang sama besar dan berlawanan arah dengan gaya body 2 ke body 1 (hukum III Newton).

Formulasi Vektor

Formula skalar F=Gm1m2/r2 hanya memberikan besar gaya. Untuk simulasi numerik, kita memerlukan informasi arah gaya.

Misalkan body i berada pada posisi r→i=(xi,yi,zi) dan body j pada posisi r→j. Maka:

Vektor jarak dari i ke j:

r→ij=r→j−r→i=(xj−xi,yj−yi,zj−zi)

Magnitudo jarak:

rij=‖r→ij‖=(xj−xi)2+(yj−yi)2+(zj−zi)2

Gaya gravitasi pada body i yang disebabkan oleh body j:

F→i←j=Gmimjrij2⋅r^ij=Gmimjrij3r→ij

Pembagi rij3 (bukan rij2) muncul karena vektor satuan r^ij=r→ij/rij memerlukan pembagian tambahan dengan rij.

Generalisasi ke N Body

Untuk sistem dengan N body, total gaya pada body i adalah jumlah vektor dari semua gaya yang dikerjakan oleh body-body lain:

Failed to parse (unknown function "\substack"): {\displaystyle \vec{F}_i = \sum_{\substack{j=1 \\ j \neq i}}^{N} G \frac{m_i m_j}{r_{ij}^3} \, \vec{r}_{ij}}

Persamaan ini adalah inti dari setiap implementasi N-body. Kompleksitas perhitungannya adalah O(N2), karena untuk setiap body harus dilakukan iterasi terhadap N−1 body lain.

Hukum II Newton dan Integrasi Numerik

Setelah total gaya pada body i diketahui, percepatan diperoleh dari hukum II Newton:

F→i=mia→i⟹a→i=F→imi

Untuk memperbarui kecepatan dan posisi seiring waktu, digunakan metode integrasi numerik. Metode paling sederhana adalah Euler semi-implisit:

v→i(t+Δt)=v→i(t)+a→i(t)⋅Δt

r→i(t+Δt)=r→i(t)+v→i(t+Δt)⋅Δt

Metode yang lebih akurat seperti Leapfrog atau Runge-Kutta umum digunakan dalam simulasi production karena memiliki sifat konservasi energi yang lebih baik (lihat bagian Template:Section link).

Contoh Perhitungan: 3-Body

Untuk memberikan ilustrasi konkret, berikut adalah perhitungan satu time step untuk sistem 3 body di bidang dua dimensi (sumbu z=0).

Kondisi Awal

Body Massa (kg) Posisi (m) Kecepatan (m/s)
A 1×1010 (0,0) (0,0)
B 1×1010 (1,0) (0,0)
C 1×1010 (0,1) (0,0)

Ketiga body berada dalam keadaan diam, membentuk segitiga siku-siku. Gunakan Δt=1 detik dan abaikan softening (ϵ=0) untuk kebersihan perhitungan.

Langkah 1: Vektor Jarak Antar Pasangan

Pasangan A–B:

r→AB=(1−0,0−0)=(1,0),rAB=1,rAB3=1

Pasangan A–C:

r→AC=(0−0,1−0)=(0,1),rAC=1,rAC3=1

Pasangan B–C:

r→BC=(0−1,1−0)=(−1,1),rBC=2≈1,414,rBC3=22≈2,828

Langkah 2: Perhitungan Gaya

Karena semua body bermassa sama, faktor G⋅mi⋅mj bernilai konstan untuk semua pasangan:

K≡G⋅mA⋅mB=6,674×10−11×1010×1010=6,674×109N⋅m2

Gaya pada body A (kontribusi dari B dan C):

F→A=KrAB3r→AB+KrAC3r→AC=K1(1,0)+K1(0,1)

F→A=(6,674×109,6,674×109)N

Interpretasi: A ditarik ke kanan (oleh B) dan ke atas (oleh C).

Gaya pada body B (kontribusi dari A dan C):

Vektor dari B ke A adalah (−1,0), dan vektor dari B ke C adalah (−1,1):

F→B=K1(−1,0)+K22(−1,1)

F→B=(−6,674×109,0)+(−2,360×109,2,360×109)

F→B=(−9,034×109,2,360×109)N

Interpretasi: B ditarik kuat ke kiri (oleh A yang dekat) dan sedikit ke atas (oleh C yang lebih jauh).

Gaya pada body C (kontribusi dari A dan B):

Vektor dari C ke A adalah (0,−1), dan vektor dari C ke B adalah (1,−1):

F→C=K1(0,−1)+K22(1,−1)

F→C=(2,360×109,−9,034×109)N

Interpretasi: C ditarik kuat ke bawah (oleh A) dan sedikit ke kanan (oleh B).

Langkah 3: Verifikasi Hukum III Newton

Untuk sistem terisolasi, jumlah total semua gaya internal harus nol:

F→A+F→B+F→C=?0→

Komponen x:

6,674+(−9,034)+2,360=0✓

Komponen y:

6,674+2,360+(−9,034)=0✓

Sanity check ini sangat penting dalam implementasi: jika jumlah total gaya tidak nol (di luar floating-point error), kemungkinan besar ada kesalahan dalam perhitungan.

Langkah 4: Percepatan

Bagi masing-masing gaya dengan massa body (semua 1010 kg):

Body ax(m/s2) ay(m/s2)
A 0,6674 0,6674
B −0,9034 0,2360
C 0,2360 −0,9034

Langkah 5: Update Kecepatan dan Posisi

Dengan Δt=1 detik dan kecepatan awal nol, metode Euler semi-implisit menghasilkan:

Body Kecepatan baru (m/s) Posisi baru (m)
A (0,6674,0,6674) (0,6674,0,6674)
B (−0,9034,0,2360) (0,0966,0,2360)
C (0,2360,−0,9034) (0,2360,0,0966)

Satu time step telah selesai. Untuk time step berikutnya, ulangi prosedur dari Langkah 1 dengan posisi dan kecepatan baru ini.

Implementasi dalam C++

Berikut implementasi minimal dari satu time step untuk verifikasi perhitungan di atas:

#include <iostream>
#include <vector>
#include <cmath>

constexpr double G = 6.674e-11;

int main() {
    std::vector<double> x = {0.0, 1.0, 0.0};
    std::vector<double> y = {0.0, 0.0, 1.0};
    std::vector<double> vx(3, 0), vy(3, 0);
    std::vector<double> mass = {1e10, 1e10, 1e10};
    int n = 3;
    double dt = 1.0;

    std::vector<double> fx(n, 0), fy(n, 0);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (i == j) continue;
            double dx = x[j] - x[i];
            double dy = y[j] - y[i];
            double r2 = dx*dx + dy*dy;
            double r3 = r2 * std::sqrt(r2);
            double s = G * mass[i] * mass[j] / r3;
            fx[i] += s * dx;
            fy[i] += s * dy;
        }
    }

    // Semi-implicit Euler integration
    for (int i = 0; i < n; ++i) {
        vx[i] += fx[i] / mass[i] * dt;
        vy[i] += fy[i] / mass[i] * dt;
        x[i]  += vx[i] * dt;
        y[i]  += vy[i] * dt;
    }
}

Eksekusi program ini menghasilkan nilai posisi dan kecepatan yang konsisten dengan perhitungan manual hingga presisi floating-point.

Ringkasan Algoritma

Untuk setiap time step, siklus perhitungan adalah:

  1. Reset gaya: F→i=0→ untuk semua i.
  2. Loop atas pasangan body: untuk setiap i,j dengan j≠i, akumulasi:
    F→i+=Gmimjrij3r→ij
  3. Hitung percepatan: a→i=F→i/mi.
  4. Update kecepatan: v→i+=a→i⋅Δt.
  5. Update posisi: r→i+=v→i⋅Δt.

Siklus ini diulang untuk ribuan hingga jutaan time step, tergantung pada durasi simulasi yang diinginkan.

Catatan Implementasi

Kompleksitas dan Paralelisasi

Kompleksitas perhitungan langsung (direct sum) adalah O(N2) per time step. Untuk N=103, terdapat 106 perhitungan pasangan per step; untuk N=106, terdapat 1012 perhitungan per step. Kebutuhan komputasi yang masif ini memotivasi penggunaan komputasi paralel menggunakan teknologi seperti CUDA, OpenCL, dan MPI.

Algoritma alternatif dengan kompleksitas lebih rendah meliputi:

Softening Parameter

Jika dua body mendekati jarak nol, faktor 1/r3 menyebabkan gaya menuju tak hingga (singularitas), yang menyebabkan simulasi tidak stabil. Untuk mengatasinya, digunakan softening parameter ϵ:

rijsoft=rij2+ϵ2

Secara fisik, ini setara dengan memodelkan body sebagai distribusi massa terdistribusi (bukan titik massa), sehingga interaksi pada jarak sangat dekat tetap finit.

Drift Energi

Untuk sistem gravitasi tertutup, energi total E=Ekinetik+Epotensial harus kekal:

Etot=∑i12mivi2−∑i<jGmimjrij=konstan

Namun integrasi numerik selalu memperkenalkan kesalahan truncation error kecil di setiap step. Akumulasi kesalahan ini menyebabkan drift energi — perubahan bertahap dalam energi total simulasi.

Metode Euler memiliki drift yang tumbuh linear terhadap waktu. Metode Leapfrog yang bersifat simplektik memiliki drift yang bounded (berosilasi tetapi tidak tumbuh), sehingga lebih disukai untuk simulasi jangka panjang.

Optimisasi Hukum III Newton

Karena F→i←j=−F→j←i, secara teoritis kita dapat menghemat 50% perhitungan dengan iterasi j>i saja dan mengakumulasi gaya ke kedua body sekaligus. Namun optimisasi ini menyulitkan paralelisasi pada GPU karena menyebabkan write conflict antar thread. Pada implementasi paralel, perhitungan N2 penuh seringkali lebih efisien.

Lihat Pula

Referensi

  • Aarseth, S. J. (2003). Gravitational N-Body Simulations: Tools and Algorithms. Cambridge University Press.
  • Hairer, E., Lubich, C., & Wanner, G. (2006). Geometric Numerical Integration: Structure-Preserving Algorithms for Ordinary Differential Equations. Springer.
  • Nyland, L., Harris, M., & Prins, J. (2007). "Fast N-Body Simulation with CUDA". GPU Gems 3, NVIDIA Corporation.