TWO_BODY_SIMULATION is a MATLAB library which simulates the solution of the planar two body problem.
Two 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. One body is assume to be much more massive than the other. Therefore, the common motion of the two bodies about their center of mass can be approximated by assuming that the large body remains fixed.
Under these assumptions, Newton's equations for (x(t),y(t)), the positition of the lighter body with respect to the heavy body at (0,0), can be written as:
r(t) = sqrt ( x(t)^2 + y(t)^2 ) x''(t) = - x(t) / r^3 y''(t) = - y(t) / r^3
These two second order equations can be rewritten as a system of four first order equations using the variable u = [ x(t), x'(t), y(t), y'(t) ], resulting in the equations:
r = sqrt ( u(1)^2 + u(3)^2 ) u'(1) = u(2) u'(2) = - u(1) / r^3 u'(3) = u(4) u'(4) = - u(3) / r^3
By specifying some initial condition for u, the system can then be integrated in time using a standard ODE solver.
The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.
TWO_BODY_SIMULATION is available in 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.
THREE_BODY_SIMULATION, a MATLAB program which simulates the behavior of three planets, constrained to lie in a plane, and moving under the influence of gravity, by Walter Gander and Jiri Hrebicek.
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.
INITIAL_ORBIT simulates the problem over approximately two orbits.
ORBITAL_DECAY computes about twenty successive orbits, showing how the orbit gradually decays to a more elliptical form.
You can go up one level to the MATLAB source codes.