Class interp2_direct (o2scl)¶
-
template<class
vec_t
= boost::numeric::ublas::vector<double>, classmat_t
= boost::numeric::ublas::matrix<double>, classmat_row_t
= boost::numeric::ublas::matrix_row<mat_t>, classmat_column_t
= boost::numeric::ublas::matrix_column<mat_t>>
classo2scl
::
interp2_direct
: public o2scl::interp2_base<boost::numeric::ublas::vector<double>, boost::numeric::ublas::matrix<double>>¶ Bilinear or bicubic two-dimensional interpolation.
This class implements two-dimensional interpolation. First and second derivatives along both x- and y-directions can be computed. This class is likely a bit faster than o2scl::interp2_seq but less flexible.
The convention used by this class is that the first (row) index of the matrix enumerates the x coordinate and that the second (column) index enumerates the y coordinate. See the discussion in the User’s guide in the section called Rows and columns vs. x and y.
The function set_data() does not copy the data, it stores pointers to the data. If the data is modified, then the function reset_interp() must be called to reset the interpolation information with the original pointer information. The storage for the data, including the arrays
x_grid
andy_grid
are all managed by the user.By default, cubic spline interpolation with natural boundary conditions is used. This can be changed by calling set_interp() again with the same data and the new interpolation type. Only cubic spline and linear interpolation are supported.
Based on D. Zaslavsky’s routines at https://github.com/diazona/interp2d (licensed under GPLv3).
Public Types
-
typedef boost::numeric::ublas::matrix<double>
ubmatrix
¶
Public Functions
-
interp2_direct
()¶
-
void
set_data
(size_t n_x, size_t n_y, vec_t &x_grid, vec_t &y_grid, mat_t &data, size_t interp_type = itp_cspline)¶ Initialize the data for the 2-dimensional interpolation.
-
double
eval
(double x, double y) const¶ Perform the 2-d interpolation.
-
double
deriv_x
(double x, double y) const¶ Compute the partial derivative in the x-direction.
-
double
deriv_xx
(double x, double y) const¶ Compute the partial second derivative in the x-direction.
-
double
deriv_y
(double x, double y) const¶ Compute the partial derivative in the y-direction.
-
double
deriv_yy
(double x, double y) const¶ Compute the partial second derivative in the y-direction.
-
double
deriv_xy
(double x, double y) const¶ Compute the mixed partial derivative \( \frac{\partial^2 f}{\partial x \partial y} \).
-
double
integ_x
(double x0, double x1, double y) const¶ Compute the integral in the x-direction between x=x0 and x=x1.
-
double
integ_y
(double x, double y0, double y1) const¶ Compute the integral in the y-direction between y=y0 and y=y1.
-
double
eval_gen
(int ix, int iy, double x0, double x1, double y0, double y1) const¶ Compute a general interpolation result.
This computes
\[ \frac{\partial^m}{\partial x^m} \frac{\partial^n}{\partial y^n} f(x,y) \]for \( m \in (-1,0,1,2) \) and \( n \in (-1,0,1,2) \) with the notation\[\begin{split}\begin{eqnarray*} \frac{\partial^{-1}}{\partial x^{-1}} &\equiv & \int_{x_0}^{x_1} f~dx \nonumber \\ \frac{\partial^0}{\partial x^0} &\equiv & \left.f\right|_{x=x_0} \nonumber \\ \frac{\partial^1}{\partial x^1} &\equiv & \left(\frac{\partial f}{\partial x}\right)_{x=x_0} \nonumber \\ \frac{\partial^2}{\partial x^2} &\equiv & \left(\frac{\partial^2 f}{\partial x^2}\right)_{x=x_0} \end{eqnarray*}\end{split}\]and the value of \( x_1 \) is ignored when \( m \geq 0 \) and the value of \( y_1 \) is ignored when \( n \geq 0 \).
Protected Attributes
-
bool
data_set
¶ True if the data has been specified by the user.
-
size_t
itype
¶ Interpolation type.
-
search_vec<vec_t>
svx
¶ Searching object for x-direction.
-
search_vec<vec_t>
svy
¶ Searching object for y-direction.
Private Functions
-
interp2_direct
(const interp2_direct<vec_t, mat_t, mat_row_t, mat_column_t>&)¶
-
interp2_direct<vec_t, mat_t, mat_row_t, mat_column_t> &
operator=
(const interp2_direct<vec_t, mat_t, mat_row_t, mat_column_t>&)¶
-
typedef boost::numeric::ublas::matrix<double>