The ngmath library is a collection of mathematical procedures
for which there are equivalent Fortran, C, and
NCL entries.
These procedures are generally not available in other libraries local to the
NCAR Scientific Computing Division.
As of January, 1999 the ngmath library contains a collection of
interpolators
and approximators
for one-dimensional,
two-dimensional, and three-dimensional data. The packages are:
- natgrid -- a two-dimensional
random data interpolation package based on Dave Watson's package
nngridr.
- dsgrid -- a three-dimensional
random data interpolator based on a simple
inverse distance
weighting algorithm.
- fitgrid -- an interpolation
package for one-dimensional and two-dimensional gridded data
based on
Alan
Cline's package Fitpack, an early version of which is available
from netlib. Fitpack
uses splines under tension to interpolate in one and two dimensions.
- csagrid -- an approximation
package for one-dimensional, two-dimensional, and three-dimensional
random data based on
David
Fulker's package Splpack. Csagrid uses cubic splines to
calculate its approximation function.
Computational interpolation and approximation methods can be divided into two
basic classes: fitted function methods and weighted average methods.
The fitted function methods
fit an algebraic surface
to the known data and then pick the interpolated
values from the fitted surface. The weighted average
methods calculate interpolated values as
weighted averages of
known values.
Among the weighted average methods, the simplest are known as
the inverse distance weighted average methods.
These methods are implemented by
calculating weights for all input coordinates such that
the weights are inversely
proportional to the distance an input coordinate is from the point
where an interpolated value is desired. The sum of the weights
is normalized to unity and
an interpolated value is
the sum of the products of the functional values
and the calculated weights.
Only Dsgrid and Csagrid handle three-dimensional data. Csagrid will
in general produce smoother results than Dsgrid (compare the
plot for Csagrid example 5
to the plot for Dsgrid example 1).
Since Csagrid uses an approximation algorithm, the calculated surface
will not necessarily pass through the original data points. Also,
the Csagrid algorithm can become unstable in
data sparse regions.
The weighted average algorithm used in Dsgrid is stable in all cases
and the resulting surface will pass through the original data values.
The four packages natgrid, csagrid, dsgrid, and fitgrid have entries
for two-dimensional data.
In most all cases natgrid will be the package of choice. It implements
a very stable algorithm and has parameters for adjusting the smoothness
of the output surface.
The two-dimensional surface entries in Fitgrid offer user-settable
parameters for specifying derivatives along the boundary of the output
grid that are not available in Natgrid.
Csagrid will produce a two-dimensional surface that is an approximation
and may produce results that are smoother in appearance than those
produced by Fitgrid or Natgrid.
Dsgrid is not recommended for two-dimensional surfaces - Natgrid is
superior in all respects.
Only Fitgrid and Csagrid handle one-dimensional data and
Fitgrid is definitely the package of choice. Fitgrid has
an entry for producing an approximation that is essentially
the same as that produced by Csagrid, but Fitgrid has many features
not available in Csagrid, such as interpolating parametric curves,
finding integrals, handling periodic functions, allowing for smoothing
that varies from linear interpolation to a full cubic spline,
and specifying slopes at the end points.
The ngmath library is a stand-alone library. Using the Fortran and C
entries in the library in no way depends upon using NCAR Graphics.
However, the library is distributed only with NCAR Graphics.
The NCL interface to the ngmath
entries is built into the NCL executable.
If you have NCAR Graphics installed at your site, then
the ngmath library will be located in $NCARG_ROOT/lib/libngmath.a .
If you want to
load the library directly, check your environment variable settings to
see if you have $NCARG_ROOT set and, if not, consult your local
system administrator to see what you should set it to. If you are
using NCAR Graphics, then, for Fortran and C codes, by adding
a "-l ngmath" flag to "ncargf77" or "ncargcc" the ngmath library will
be loaded.
The next package to be added is
FFTPACK,
a locally-developed library
of one-dimensional FFT solvers, including complex, real, sin, cosine,
quarter-sin, and quarter-cosine transforms. Also planned is a package
for drawing Bezier curves and a random data two-dimensional interpolator
that allows for constrained regions with holes. Also, NCL interfaces
to commercial libraries such as Linpack and IMSL will be provided as
time permits.