Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
o2scl::interp2_planar< vec_t > Class Template Reference

Interpolate among two independent variables with planes. More...

#include <interp2_planar.h>

Public Types

typedef boost::numeric::ublas::vector< double > ubvector
typedef boost::numeric::ublas::vector< size_t > ubvector_size_t

Public Member Functions

void set_data (size_t n_points, vec_t &x, vec_t &y, vec_t &f)
 Initialize the data for the planar interpolation and compute the scaling factors.
void compute_scale ()
 Find scaling.
double eval (double x, double y) const
 Perform the planar interpolation.
double operator() (double x, double y) const
 Perform the planar interpolation.
template<class vec2_t >
double operator() (vec2_t &v) const
 Perform the planar interpolation using the first two elements of v as input.
void eval_points (double x, double y, double &f, size_t &i1, double &x1, double &y1, size_t &i2, double &x2, double &y2, size_t &i3, double &x3, double &y3) const
 Planar interpolation returning the closest points. More...

Public Attributes

double thresh
 Threshold for colinearity (default $ 10^{-12} $)
double x_scale
 The user-specified x scale (default -1)
double y_scale
 The user-specified y scale (default -1)

Protected Member Functions

int swap (size_t &index_1, double &dist_1, size_t &index_2, double &dist_2) const
 Swap points 1 and 2.

Protected Attributes

double dx
 The scale in the x direction.
double dy
 The scale in the y direction.
size_t np
 The number of points.
vec_t * ux
 The x-values.
vec_t * uy
 The y-values.
vec_t * uf
 The f-values.
bool data_set
 True if the data has been specified.

Private Member Functions

 interp2_planar (const interp2_planar< vec_t > &)
interp2_planar< vec_t > & operator= (const interp2_planar< vec_t > &)

Detailed Description

template<class vec_t>
class o2scl::interp2_planar< vec_t >

This class performs planar interpolation when the data points are not arranged in a specified order (i.e. not on a grid). For a set of data $ {x_i,y_i,f_i} $, the value of $ f $ is predicted given a new value of x and y. This interpolation is performed by finding the plane that goes through three closest points in the data set. Distances are determined with

\[ d_{ij} = \sqrt{\left(\frac{x_i-x_j}{\Delta x}\right)^2 + \left(\frac{y_i-y_j}{\Delta y}\right)^2} \]

The values $ \Delta_x $ and $ \Delta_y $ are specified in x_scale and y_scale, respectively. If these values are negative (the default) then they are computed with $ \Delta x = x_{\mathrm{max}}-x_{\mathrm{min}} $ and $ \Delta y = y_{\mathrm{max}}-y_{\mathrm{min}} $ .

If the x- and y-values of the entire data set lie on a line, then the interpolation will fail and the error handler will be called. Colinearity is defined by a threshold, thresh which defaults to $ 10^{-12} $. If the denominator,

\[ \sum_{k=1}^{3}\varepsilon_{ijk} x_i y_j < \mathrm{thresh} \]

where $ \varepsilon_{ijk} $ is an anti-symmetric Levi-Cevita tensor, then the points are colinear. The value of thresh can be zero, but if it is negative then it will be reset to the default value for the next interpolation.

This class stores pointers to the data, not a copy. The data can be changed between interpolations without an additional call to set_data(), but the scales may need to be recomputed with compute_scale().

The vector type can be any type with a suitably defined operator[].

The interpolation requires at least three points and set_data() will call the error handler if the first argument is less than three.

This class operates by performing a $ {\cal O}(N) $ brute-force search to find the three closest points. If the three closest points are colinear, then the data are sorted by distance [ $ {\cal O}(N \log N) $ ], and the closest triplets are enumerated until a non-colinear triplet is found.
Idea for Future:
Make a parent class for this and o2scl::interp2_neigh.

Definition at line 93 of file interp2_planar.h.

Member Function Documentation

◆ eval_points()

template<class vec_t>
void o2scl::interp2_planar< vec_t >::eval_points ( double  x,
double  y,
double &  f,
size_t &  i1,
double &  x1,
double &  y1,
size_t &  i2,
double &  x2,
double &  y2,
size_t &  i3,
double &  x3,
double &  y3 
) const

This function interpolates x and y into the data returning f. It also returns the three closest x- and y-values used for computing the plane.

Definition at line 203 of file interp2_planar.h.

The documentation for this class was generated from the following file:

Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).