THREE_BODY_SIMULATION is a MATLAB library which simulates the solution of the planar three body problem.
Three bodies, regarded as point masses, are constrained to lie in a plane. The masses of each body are given, as are the positions and velocities at a starting time T = 0. The bodies move in accordance with the gravitational force between them.
The force exerted on the 0-th body by the 1st body can be written:
F = - m0 m1 ( p0 - p1 ) / |p0 - p1|^3assuming that units have been normalized to that the gravitational coefficient is 1. Newton's laws of motion can be written:
m0 p0'' = - m0 m1 ( p0 - p1 ) / |p0 - p1|^3 - m0 m2 ( p0 - p2 ) / |p0 - p2|^3 m1 p1'' = - m1 m0 ( p1 - p0 ) / |p1 - p0|^3 - m1 m2 ( p1 - p2 ) / |p1 - p2|^3 m2 p2'' = - m2 m0 ( p2 - p0 ) / |p2 - p0|^3 - m2 m1 ( p2 - p1 ) / |p2 - p1|^3
Letting
y1 = p0(x) y2 = p0(y) y3 = p0'(x) y4 = p0'(y)and using similar definitions for p1 and p2, the 3 second order vector equations can be rewritten as 12 first order equations. In particular, the first four are:
y1' = y3 y2' = y4 y3' = - m1 ( y1 - y5 ) / |(y1,y2) - (y5,y6) |^3 - m2 ( y1 - y9 ) / |(y1,y2) - (y9,y10)|^3 y4' = - m1 ( y2 - y6 ) / |(y1,y2) - (y5,y6) |^3 - m2 ( y2 - y10 ) / |(y1,y2) - (y9,y10)|^3and so on. This first order system can be integrated by a standard ODE solver.
Note that when any two bodies come close together, the solution changes very rapidly, and very small steps must be taken by the ODE solver. For this system, the first near collision occurs around T=15.8299, and the results produced by MATLAB's ode113 will not be very accurate after that point.
The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.
THREE_BODY_SIMULATION is available in a C version and a C++ version and a FORTRAN77 version and a FORTRAN90 version and a MATLAB version.
BROWNIAN_MOTION_SIMULATION, a MATLAB program which simulates Brownian motion in an M-dimensional region.
COIN_SIMULATION, a MATLAB library which looks at ways of simulating or visualizing the results of many tosses of a fair or biased coin.
DICE_SIMULATION, a MATLAB program which simulates N tosses of M dice, making a histogram of the results.
DUEL_SIMULATION, a MATLAB program which simulates N repetitions of a duel between two players, each of whom has a known firing accuracy.
GAMBLERS_RUIN_SIMULATION, a MATLAB program which simulates the game of gambler's ruin.
HIGH_CARD_SIMULATION, a MATLAB program which simulates a situation in which you see the cards in a deck one by one, and must select the one you think is the highest and stop.
ISING_2D_SIMULATION, a MATLAB program which carries out a Monte Carlo simulation of an Ising model, a 2D array of positive and negative charges, each of which is likely to "flip" to be in agreement with neighbors.
LORENZ_SIMULATION, a MATLAB program which solves the Lorenz equations and displays the solution, for various starting conditions.
POISSON_SIMULATION, a MATLAB library which simulates a Poisson process in which events randomly occur with an average waiting time of Lambda.
RANDOM_WALK_1D_SIMULATION, a MATLAB program which simulates a random walk in a 1-dimensional region.
RANDOM_WALK_2D_AVOID_SIMULATION, a MATLAB program which simulates a self-avoiding random walk in a 2-dimensional region.
RANDOM_WALK_2D_SIMULATION, a MATLAB program which simulates a random walk in a 2-dimensional region.
RANDOM_WALK_3D_SIMULATION, a MATLAB program which simulates a random walk in a 3-dimensional region.
REACTOR_SIMULATION, a MATLAB program which a simple Monte Carlo simulation of the shielding effect of a slab of a certain thickness in front of a neutron source. This program was provided as an example with the book "Numerical Methods and Software."
RKF45, a MATLAB library which implements the Runge-Kutta-Fehlberg ODE solver.
SIR_SIMULATION, a MATLAB program which simulates the spread of a disease through a hospital room of M by N beds, using the SIR (Susceptible/Infected/Recovered) model.
TRAFFIC_SIMULATION, a MATLAB program which simulates the cars waiting to get through a traffic light.
TRUEL_SIMULATION, a MATLAB program which simulates N repetitions of a duel between three players, each of whom has a known firing accuracy.
TWO_BODY_SIMULATION, a MATLAB program which simulates the behavior of two bodies, constrained to lie in a plane, moving under the influence of gravity, with one body much more massive than the other.
Dominik Gruntz, Joerg Waldvogel
SIMPLE simulates the problem by immediately calling an ODE integrator. This approach loses accuracy when the bodies come close to colliding, which is likely to happen often.
THREEBP eliminates some variables by working in the center of mass coordinate system, and uses an approach suggested by Levi-Civita in which a new time scale is devised. The transformed system of ODE's can be solved with greater accuracy.
You can go up one level to the MATLAB source codes.