Numerov's MethodNumerov's method, also called Cowell's method, is an implicit fourth order method for approximating the solution of the second order differential equation y''(x) = f(x, y) with initial conditions y(x0) = y0, y'(x0) = y'0.
Note that the integrand f(x,y) does not depend upon y'.
Numerov's algorithm is derived by summing the Taylor series approximations for y(x + h) and y(x - h), then substituting f(x, y) for y''(x) and finally substituting the expression
[ f(x + h, y(x + h)) -2 f(x, y) + f(x - h), y(x - h) ) ] / h² for the second derivative of f(x, y(x)) with respect to x. The result is
y(x + h) + y(x - h) = 2 y(x) + h² f(x, y) + (h² / 12) (f(x + h,y(x + h)) -2 f(x, y) + f(x - h, y(x - h)) ).
Let xn = x0 + nh, yn be the approximation to y(xn), and fn = f(xn, yn), the Numerov's method proceeds recursively via the implicit equation for yn + 1 as follows:
yn + 1 = 2yn - yn - 1 + h2 ( fn + ( fn + 1 - 2fn + fn - 1 ) / 12 ).
In order to begin the recursion, two successive starting values of y are required, one of which is y0 and the other starting value y1 is approximated by using a Runge-Kutta method.
Particular classes of problems may have a more accurate estimate for y1.
Richardson extrapolation may be used to increase to increase both the order and accuracy.
- void Numerovs_Method( double (*f)(double, double), double (*g)(double,double,double), double y[ ], double x0, double c, double h, int richardson_columns, int number_of_steps )
This function uses the Numerov's method to estimate the solution of the initial value problem, y'' = f(x,y); y(x0) = y and y'(x0) = c, at x0 + nh where for n =1, . . ., number_of_steps and h is the step size. The function g(x,h,u) returns the value y so that u = y - h^2 f(x,y) / 12. The argument max_columns is the number of step size halving + 1 used in Richardson extrapolation so that if richardson_columns = 1 then no extrapolation to the limit is performed. On input, y is the value of y(x) at x = x0. On output y[n] is the value of y(x) at x = x0 + n h for n =0, . . ., number_of_steps.
C Source Code
- The file, numerov.c, contains a version of Numerovs_Method( ) written in C.