Interpolation and Approximation of Data

SPLINE is a FORTRAN90 library which defines and evaluates spline functions.

These spline functions are typically used to:

The most common use of this software is for situations where a set of (X,Y) data points is known, and it is desired to determine a smooth function which passes exactly through those points, and which can be evaluated everywhere. Thus, it is possible to get a formula that allows you to "connect the dots".

Of course, you could could just connect the dots with straight lines, but that would look ugly, and if there really is some function that explains your data, you'd expect it to curve around rather than make sudden angular turns. The functions in SPLINE offer a variety of choices for slinky curves that will make pleasing interpolants of your data.

There are a variety of types of approximation curves available, including:

Also included are a set of routines that return the local "basis matrix", which allows the evaluation of the spline in terms of local function data.


The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.


SPLINE is available in a C version and a C++ version and a FORTRAN77 version and a FORTRAN90 version and a MATLAB version.

Related Data and Programs:

BERNSTEIN_POLYNOMIAL, a FORTRAN90 library which evaluates the Bernstein polynomials, useful for uniform approximation of functions;

CHEBYSHEV, a FORTRAN90 library which computes the Chebyshev interpolant/approximant to a given function over an interval.

DIVDIF, a FORTRAN90 library which uses divided differences to interpolate data.

HERMITE, a FORTRAN90 library which computes the Hermite interpolant, a polynomial that matches function values and derivatives.

HERMITE_CUBIC, a FORTRAN90 library which can compute the value, derivatives or integral of a Hermite cubic polynomial, or manipulate an interpolating function made up of piecewise Hermite cubic polynomials.

INTERP, a FORTRAN90 library which can be used for parameterizing and interpolating data;

LAGRANGE_APPROX_1D, a FORTRAN90 library which defines and evaluates the Lagrange polynomial p(x) of degree m which approximates a set of nd data points (x(i),y(i)).

LAGRANGE_INTERP_1D, a FORTRAN90 library which defines and evaluates the Lagrange polynomial p(x) which interpolates a set of data, so that p(x(i)) = y(i).

NMS, a FORTRAN90 library which includes a wide variety of numerical software, including solvers for linear systems of equations, interpolation of data, numerical quadrature, linear least squares data fitting, the solution of nonlinear equations, ordinary differential equations, optimization and nonlinear least squares, simulation and random numbers, trigonometric approximation and Fast Fourier Transforms.

PPPACK, a FORTRAN90 library which implements piecewise polynomial functions, including, in particular, cubic splines, by Carl deBoor.

TEST_APPROX, a FORTRAN90 library which defines a number of test problems for approximation and interpolation.

TEST_INTERP_1D, a FORTRAN90 library which defines test problems for interpolation of data y(x), depending on a 1D argument.

TOMS446, a FORTRAN90 library which manipulates Chebyshev series for interpolation and approximation;
this is a version of ACM TOMS algorithm 446, by Roger Broucke.


  1. JA Brewer, DC Anderson,
    Visual Interaction with Overhauser Curves and Surfaces,
    SIGGRAPH 77,
    in Proceedings of the 4th Annual Conference on Computer Graphics and Interactive Techniques,
    ASME, July 1977, pages 132-137.
  2. Edwin Catmull, Raphael Rom,
    A Class of Local Interpolating Splines,
    in Computer Aided Geometric Design,
    edited by Robert Barnhill, Richard Reisenfeld,
    Academic Press, 1974,
    ISBN: 0120790505,
    LC: QA464.I58.
  3. Samuel Conte, Carl deBoor,
    Elementary Numerical Analysis,
    Second Edition,
    McGraw Hill, 1972,
    ISBN: 07-012446-4,
    LC: QA297.C65.
  4. Alan Davies, Philip Samuels,
    An Introduction to Computational Geometry for Curves and Surfaces,
    Clarendon Press, 1996,
    ISBN: 0-19-851478-6,
    LC: QA448.D38.
  5. Carl deBoor,
    A Practical Guide to Splines,
    Springer, 2001,
    ISBN: 0387953663,
    LC: QA1.A647.v27.
  6. Jack Dongarra, Jim Bunch, Cleve Moler, Pete Stewart,
    LINPACK User's Guide,
    SIAM, 1979,
    ISBN13: 978-0-898711-72-1,
    LC: QA214.L56.
  7. Gisela Engeln-Muellges, Frank Uhlig,
    Numerical Algorithms with C,
    Springer, 1996,
    ISBN: 3-540-60530-4,
    LC: QA297.E56213.
  8. James Foley, Andries vanDam, Steven Feiner, John Hughes,
    Computer Graphics, Principles and Practice,
    Second Edition,
    Addison Wesley, 1995,
    ISBN: 0201848406,
    LC: T385.C5735.
  9. Fred Fritsch, Judy Butland,
    A Method for Constructing Local Monotone Piecewise Cubic Interpolants,
    SIAM Journal on Scientific and Statistical Computing,
    Volume 5, Number 2, 1984, pages 300-304.
  10. Fred Fritsch, Ralph Carlson,
    Monotone Piecewise Cubic Interpolation,
    SIAM Journal on Numerical Analysis,
    Volume 17, Number 2, April 1980, pages 238-246.
  11. David Kahaner, Cleve Moler, Steven Nash,
    Numerical Methods and Software,
    Prentice Hall, 1989,
    ISBN: 0-13-627258-4,
    LC: TA345.K34.
  12. David Rogers, Alan Adams,
    Mathematical Elements for Computer Graphics,
    Second Edition,
    McGraw Hill, 1989,
    ISBN: 0070535299,
    LC: T385.R6.

Source Code:

Examples and Tests:

List of Routines:

You can go up one level to the FORTRAN90 source codes.

Last revised on 29 January 2007.