Mathematics Source Library
C & ASM


Numerov's Method

Numerov's Method

Numerov'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.

Function List

  • 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[0] 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[0] 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.