N-Body Problems: Difference between revisions
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 |
||
| (One intermediate revision by the same user not shown) | |||
| Line 42: | Line 42: | ||
Untuk sistem dengan <math>N</math> body, '''total gaya''' pada body <math>i</math> adalah jumlah vektor dari semua gaya yang dikerjakan oleh body-body lain: | Untuk sistem dengan <math>N</math> body, '''total gaya''' pada body <math>i</math> adalah jumlah vektor dari semua gaya yang dikerjakan oleh body-body lain: | ||
<math display="block">\vec{F}_i = \sum_{\ | <math display="block">\vec{F}_i = \sum_{\begin{smallmatrix} j=1 \\ j \neq i \end{smallmatrix}}^{N} G \frac{m_i m_j}{r_{ij}^3} \, \vec{r}_{ij}</math> | ||
Persamaan ini adalah inti dari setiap implementasi N-body. Kompleksitas perhitungannya adalah <math>O(N^2)</math>, karena untuk setiap body harus dilakukan iterasi terhadap <math>N-1</math> body lain. | Persamaan ini adalah inti dari setiap implementasi N-body. Kompleksitas perhitungannya adalah <math>O(N^2)</math>, karena untuk setiap body harus dilakukan iterasi terhadap <math>N-1</math> body lain. | ||
| 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. | ||
Latest revision as of 01:40, 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 , 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 dan yang berjarak , terdapat gaya tarik gravitasi yang dirumuskan oleh Isaac Newton sebagai:
di mana:
- adalah konstanta gravitasi universal
- adalah jarak antara kedua body (meter)
- adalah besar gaya (Newton)
Gaya gravitasi memiliki dua sifat penting:
- Selalu menarik (attractive), tidak pernah menolak.
- 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 hanya memberikan besar gaya. Untuk simulasi numerik, kita memerlukan informasi arah gaya.
Misalkan body berada pada posisi dan body pada posisi . Maka:
Vektor jarak dari ke :
Magnitudo jarak:
Gaya gravitasi pada body yang disebabkan oleh body :
Pembagi (bukan ) muncul karena vektor satuan memerlukan pembagian tambahan dengan .
Generalisasi ke N Body
Untuk sistem dengan body, total gaya pada body adalah jumlah vektor dari semua gaya yang dikerjakan oleh body-body lain:
Persamaan ini adalah inti dari setiap implementasi N-body. Kompleksitas perhitungannya adalah , karena untuk setiap body harus dilakukan iterasi terhadap body lain.
Hukum II Newton dan Integrasi Numerik
Setelah total gaya pada body diketahui, percepatan diperoleh dari hukum II Newton:
Untuk memperbarui kecepatan dan posisi seiring waktu, digunakan metode integrasi numerik. Metode paling sederhana adalah Euler semi-implisit:
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 ).
Kondisi Awal
| Body | Massa (kg) | Posisi (m) | Kecepatan (m/s) |
|---|---|---|---|
| A | |||
| B | |||
| C |
Ketiga body berada dalam keadaan diam, membentuk segitiga siku-siku. Gunakan detik dan abaikan softening () untuk kebersihan perhitungan.
Langkah 1: Vektor Jarak Antar Pasangan
Pasangan A–B:
Pasangan A–C:
Pasangan B–C:
Langkah 2: Perhitungan Gaya
Karena semua body bermassa sama, faktor bernilai konstan untuk semua pasangan:
Gaya pada body A (kontribusi dari B dan C):
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 , dan vektor dari B ke C adalah :
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 , dan vektor dari C ke B adalah :
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:
Komponen :
Komponen :
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 kg):
| Body | ||
|---|---|---|
| A | ||
| B | ||
| C |
Langkah 5: Update Kecepatan dan Posisi
Dengan detik dan kecepatan awal nol, metode Euler semi-implisit menghasilkan:
| Body | Kecepatan baru (m/s) | Posisi baru (m) |
|---|---|---|
| A | ||
| B | ||
| C |
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:
- Reset gaya: untuk semua .
- Loop atas pasangan body: untuk setiap dengan , akumulasi:
- Hitung percepatan: .
- Update kecepatan: .
- Update posisi: .
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 per time step. Untuk , terdapat perhitungan pasangan per step; untuk , terdapat 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:
- Algoritma Barnes-Hut — kompleksitas , menggunakan struktur octree untuk meng-aproksimasi gaya dari kelompok body yang jauh.
- Fast Multipole Method — kompleksitas , menggunakan ekspansi multipolar.
Softening Parameter
Jika dua body mendekati jarak nol, faktor menyebabkan gaya menuju tak hingga (singularitas), yang menyebabkan simulasi tidak stabil. Untuk mengatasinya, digunakan softening parameter :
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 harus kekal:
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 , secara teoritis kita dapat menghemat 50% perhitungan dengan iterasi 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 penuh seringkali lebih efisien.
Lihat Pula
- Hukum gravitasi Newton
- Two-body problem
- Three-body problem
- Algoritma Barnes-Hut
- Simulasi numerik
- Komputasi paralel
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.