## Backward Difference Correction Method

The backward difference correction method is an explicit third 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'.

Let

*x*,

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

_{n}*y(x*, and

_{n})*f*, the procedure proceeds recursively via the explicit equation for y

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

*y(x*.

_{n + 1}) = 2 y(x_{n}) - y(x_{n - 1}) + h^{2}[ f_{n}+ ( f_{n}- 2 f_{n - 1}+ f_{n - 2}) / 12 ]In order to begin the recursion, three successive starting values of

*y*are required, one of which is

*y*and the other two starting values

_{0}*y*and

_{1}*y*need a different approximation method. The routine, as programmed, uses the Runge-Kutta method to approximate

_{2}*y*and

_{1}*y*. Particular classes of problems may have more accurate estimates for both

_{2}*y*and

_{1}*y*.

_{2}Richardson extrapolation may be used to increase both the order and accuracy.

### Function List

- void Backward_Difference_Correction( double (*f)(double, double), double y[ ], double x0, double c, double h, int richardson_columns, int number_of_steps )

This function uses the backward difference correction 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 argument*richardson_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, backdiffcorr.c, contains a version of Backward_Difference_Correction( ) written in
*C*.