## 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(x*,

_{0}) = y_{0}*y'(x*.

_{0}) = 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

*x*,

_{n}= x_{0}+ nh*y*be the approximation to

_{n}*y(x*, and

_{n})*f*, the Numerov's method proceeds recursively via the implicit equation for y

_{n}= f(x_{n}, y_{n})_{n + 1}as follows:

*y*.

_{n + 1}= 2y_{n}- y_{n - 1}+ h^{2}( f_{n}+ ( f_{n + 1}- 2f_{n}+ f_{n - 1}) / 12 )In order to begin the recursion, two successive starting values of

*y*are required, one of which is

*y*and the other starting value

_{0}*y*is approximated by using a Runge-Kutta method.

_{1}Particular classes of problems may have a more accurate estimate for

*y*.

_{1}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*.