Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

# QwtSpline Class Reference

List of all members.

## Detailed Description

A class for spline interpolation.

The QwtSpline class is used for cubical spline interpolation. Two types of splines, natural and periodic, are supported.

Usage:
  1. First call QwtSpline::recalc() to determine the spline coefficients for a tabulated function y(x).
  2. After the coefficients have been set up, the interpolated function value for an argument x can be determined by calling QwtSpline::value().
  In order to save storage space, QwtSpline can be advised not to buffer the contents of x and y. This means that the arrays have to remain valid and unchanged for the interpolation to work properly. This can be achieved by calling QwtSpline::copyValues().

Example:

      #include<qwt_spline.h>
      #include<iostream.h>

      QwtSpline s;
      double x[30], y[30], xInter[300], yInter[300];
      int i;

      for(i=0;i<30;i++)               // fill up x[] and y[]
      cin >> x[i] >> y[i];

      if (s.recalc(x,y,30,0) == 0)    // build natural spline
      {
         for(i=0;i<300;i++)          // interpolate
         {
           xInter[i] = x[0] + double(i) * (x[29] - x[0]) / 299.0;
           yInter[i] = s.value( xInter[i] );
         }

         do_something(xInter, yInter, 300);
      }
      else
        cerr << "Uhhh...\n";

Definition at line 63 of file qwt_spline.h.

## Public Member Functions
| QwtSpline ()
| ~QwtSpline ()
double | value (double x) const
int | recalc (double *x, double *y, int n, int periodic=0)
int | recalc (const QwtArray< double > &x, const QwtArray< double > &y, int periodic=0)
void | copyValues (int tf=1)

## Constructor & Destructor Documentation

QwtSpline::QwtSpline | ( |  | ) |

| CTOR. Definition at line 31 of file qwt_spline.cpp.

QwtSpline::~QwtSpline | ( |  | ) |

| DTOR. Definition at line 68 of file qwt_spline.cpp.

## Member Function Documentation

void QwtSpline::copyValues | ( | int | tf = `1` | ) |

  | Advise recalc() to buffer the tabulated function or switch off internal buffering. By default, QwtSpline maintains an internal copy of the tabulated function given as *x and *y arguments of QwtSpline::recalc(). If QwtSpline::copyValues() is called with zero argument, subsequent calls to QwtSpline::recalc() will not buffer these values anymore and just store the pointers instead. The QwtSpline::value() function will then silently assume that these pointers remained valid and that the contents of the arrays have not been changed since the last QwtSpline::recalc(). If called with no or nonzero argument, any following QwtSpline::recalc() calls will use the internal buffer. Parameters:
  | tf | if nonzero, the function table will be buffered
Warning: copyValues() resets all the contents of QwtSpline. A subsequent recalc() will be necessary. Definition at line 61 of file qwt_spline.cpp.

int QwtSpline::recalc | ( | const QwtArray< double > & | x,
|  | const QwtArray< double > & | y,
|  | int | periodic = `0`
| ) |

  | re-calculate the spline coefficients Depending on the value of periodic, this function will determine the coefficients for a natural or a periodic spline and store them internally. It also buffers the values of x and y, which are needed for the interpolation (See QwtSpline::value()). Parameters:
  | x | QwtArray<double> of points
  | y | QwtArray<double> of points
  | periodic | if non-zero, calculate periodic spline
Returns: 0 successful Qwt::ErrMono<dd>Sequence of x values is not strictly monotone increasing Qwt::ErrNoMem<dd>Couldn't allocate memory Warning: The sequence of x (but not y) values has to be strictly monotone increasing, which means `x[0] < x[1] < .... < x[n-1]`. If this is not the case, the function will return an error. Definition at line 206 of file qwt_spline.cpp. References recalc().

int QwtSpline::recalc | ( | double * | x,
|  | double * | y,
|  | int | n,
|  | int | periodic = `0`
| ) |

  | re-calculate the spline coefficients Depending on the value of periodic, this function will determine the coefficients for a natural or a periodic spline and store them internally. By default, it also buffers the values of x and y, which are needed for the interpolation (See QwtSpline::value()). In order to save memory, this last behaviour may be changed with the QwtSpline::copyValues() function. Parameters:
  | x |
  | y | points
  | n | number of points
  | periodic | if non-zero, calculate periodic spline
Returns: 0 successful Qwt::ErrMono<dd>Sequence of x values is not strictly monotone increasing Qwt::ErrNoMem<dd>Couldn't allocate memory Warning: The sequence of x (but not y) values has to be strictly monotone increasing, which means `x[0] < x[1] < .... < x[n-1]`. If this is not the case, the function will return an error. Definition at line 127 of file qwt_spline.cpp. Referenced by QwtCurve::drawSpline(), and recalc().

double QwtSpline::value | ( | double | x | ) | const

| Calculate the interpolated function value corresponding to a given argument x. Definition at line 18 of file qwt_spline.cpp. Referenced by QwtCurve::drawSpline().