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

Nearest-neighbor interpolation in two dimensions. More...

#include <interp2_neigh.h>

Public Types

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

Public Member Functions

void compute_scale ()
 Find scaling.
 
void set_data (size_t n_points, vec_t &x, vec_t &y, vec_t &f)
 Initialize the data for the neigh interpolation. More...
 
double eval (double x, double y) const
 Perform the interpolation.
 
double operator() (double x, double y) const
 Perform the 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_point (double x, double y, double &f, size_t &i1, double &x1, double &y1) const
 Interpolation returning the closest point. More...
 

Public Attributes

double x_scale
 The user-specified x scale (default -1)
 
double y_scale
 The user-specified y scale (default -1)
 

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.
 

Detailed Description

template<class vec_t>
class o2scl::interp2_neigh< vec_t >

This class performs nearest-neighbor 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. 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}} $ .

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[].

Note
This class operates by performing a $ {\cal O}(N) $ brute-force search to find the closest points.
Idea for Future:
Make a parent class for this and o2scl::interp2_planar.
Idea for Future:
Maybe interpm_idw subsumes this functionality and makes this class obsolete? Or is this specialization particularly efficient?

Definition at line 74 of file interp2_neigh.h.

Member Function Documentation

◆ eval_point()

template<class vec_t >
void o2scl::interp2_neigh< vec_t >::eval_point ( double  x,
double  y,
double &  f,
size_t &  i1,
double &  x1,
double &  y1 
) const
inline

This function interpolates x and y into the data returning f. It also returns the closest x- and y-values found.

Definition at line 182 of file interp2_neigh.h.

◆ set_data()

template<class vec_t >
void o2scl::interp2_neigh< vec_t >::set_data ( size_t  n_points,
vec_t &  x,
vec_t &  y,
vec_t &  f 
)
inline

This function will call the error handler if n_points is zero.

Definition at line 138 of file interp2_neigh.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).