Shooting is a numerical technique for solving boundary value problems, where conditions on an ODE are specified at both endpoints of the domain.

When solving ODEs numerically, one usually uses methods like Runge-Kutta or Euler's method in which initial conditions are fully specified while ending conditions are unknown. The computer integrates the ODE (or system of ODEs) to a specified time (or location). However, this method cannot solve boundary value problems, since there is no way to enforce the far boundary condition.

Shooting solves this problem by repeatedly solving the ODE, changing the initial conditions to hit the desired far boundary condition, much like someone shooting at a target might adjust their aim. (For reasons I will not explain here, if there are n far boundary conditions to satisfy, there are also n free initial conditions that may be varied at will.)

Typical methods of adjusting the initial condition are bisection and Newton's method. A mathematician would think of shooting as finding the root of the function:

g(initial conditions) = f(t1; initial conditions) - f1

where f(t1) is the computed far boundary condition, and f1 is the desired far boundary condition. For most problems of interest, this is a transcendental equation, which cannot be solved algebraically.