50 #ifndef O2SCL_INTERP2_DIRECT_H 51 #define O2SCL_INTERP2_DIRECT_H 57 #include <boost/numeric/ublas/vector.hpp> 58 #include <boost/numeric/ublas/matrix.hpp> 59 #include <boost/numeric/ublas/matrix_proxy.hpp> 61 #include <o2scl/interp.h> 62 #include <o2scl/interp2.h> 63 #include <o2scl/search_vec.h> 65 #ifndef DOXYGEN_NO_O2NS 96 template<
class vec_t=boost::numeric::ublas::vector<
double>,
97 class mat_t=boost::numeric::ublas::matrix<
double>,
98 class mat_row_t=boost::numeric::ublas::matrix_row<mat_t>,
99 class mat_column_t=boost::numeric::ublas::matrix_column<mat_t> >
102 #ifdef O2SCL_NEVER_DEFINED 109 typedef boost::numeric::ublas::matrix_column<ubmatrix> ubmatrix_col;
118 void set_data(
size_t n_x,
size_t n_y, vec_t &x_grid,
119 vec_t &y_grid, mat_t &data,
124 O2SCL_ERR2(
"Unsupported interpolation type in ",
135 svx.set_vec(n_x,x_grid);
136 svy.set_vec(n_y,y_grid);
145 for(
size_t j=0;j<n_y;j++) {
147 o2scl::matrix_column<mat_t,mat_column_t>(data,j);
149 for(
size_t i=0;i<n_x;i++) {
150 zx(i,j)=itp.deriv(x_grid[i]);
155 for(
size_t i=0;i<n_x;i++) {
157 o2scl::matrix_row<mat_t,mat_row_t>(data,i);
159 for(
size_t j=0;j<n_y;j++) {
160 zy(i,j)=itp.deriv(y_grid[j]);
165 for(
size_t j=0;j<n_y;j++) {
167 o2scl::matrix_column<ubmatrix,ubmatrix_col>(
zy,j);
169 for(
size_t i=0;i<n_x;i++) {
170 zxy(i,j)=itp.deriv(x_grid[i]);
183 virtual double eval(
double x,
double y)
const {
189 size_t xi=
svx.find(x);
190 size_t yi=
svy.find(y);
192 double xmin=(*this->
xfun)[xi];
193 double xmax=(*this->
xfun)[xi+1];
194 double ymin=(*this->
yfun)[yi];
195 double ymax=(*this->
yfun)[yi+1];
197 double zminmin=(*this->
datap)(xi,yi);
198 double zminmax=(*this->
datap)(xi,yi+1);
199 double zmaxmin=(*this->
datap)(xi+1,yi);
200 double zmaxmax=(*this->
datap)(xi+1,yi+1);
205 double t=(x-xmin)/dx;
206 double u=(y-ymin)/dy;
211 return (1.0-t)*(1.0-u)*zminmin+t*(1.0-u)*zmaxmin+
212 (1.0-t)*u*zminmax+t*u*zmaxmax;
215 double zxminmin=
zx(xi,yi)/dt;
216 double zxminmax=
zx(xi,yi+1)/dt;
217 double zxmaxmin=
zx(xi+1,yi)/dt;
218 double zxmaxmax=
zx(xi+1,yi+1)/dt;
220 double zyminmin=
zy(xi,yi)/du;
221 double zyminmax=
zy(xi,yi+1)/du;
222 double zymaxmin=
zy(xi+1,yi)/du;
223 double zymaxmax=
zy(xi+1,yi+1)/du;
225 double zxyminmin=
zxy(xi,yi)/du/dt;
226 double zxyminmax=
zxy(xi,yi+1)/du/dt;
227 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
228 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
244 v=-3*zminmin+3*zminmax-2*zyminmin-zyminmax;
246 v=2*zminmin-2*zminmax+zyminmin+zyminmax;
252 v=-3*zxminmin+3*zxminmax-2*zxyminmin-zxyminmax;
254 v=2*zxminmin-2*zxminmax+zxyminmin+zxyminmax;
256 v=-3*zminmin+3*zmaxmin-2*zxminmin-zxmaxmin;
258 v=-3*zyminmin+3*zymaxmin-2*zxyminmin-zxymaxmin;
260 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
261 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
262 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
264 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
265 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
266 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
268 v=2*zminmin-2*zmaxmin+zxminmin+zxmaxmin;
270 v=2*zyminmin-2*zymaxmin+zxyminmin+zxymaxmin;
272 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
273 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
274 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
276 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
277 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
278 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
286 virtual double deriv_x(
double x,
double y)
const {
292 size_t xi=
svx.find(x);
293 size_t yi=
svy.find(y);
295 double xmin=(*this->
xfun)[xi];
296 double xmax=(*this->
xfun)[xi+1];
297 double ymin=(*this->
yfun)[yi];
298 double ymax=(*this->
yfun)[yi+1];
300 double zminmin=(*this->
datap)(xi,yi);
301 double zminmax=(*this->
datap)(xi,yi+1);
302 double zmaxmin=(*this->
datap)(xi+1,yi);
303 double zmaxmax=(*this->
datap)(xi+1,yi+1);
308 double t=(x-xmin)/dx;
309 double u=(y-ymin)/dy;
314 return dt*(-(1.0-u)*zminmin+(1.0-u)*zmaxmin-u*zminmax+u*zmaxmax);
317 double zxminmin=
zx(xi,yi)/dt;
318 double zxminmax=
zx(xi,yi+1)/dt;
319 double zxmaxmin=
zx(xi+1,yi)/dt;
320 double zxmaxmax=
zx(xi+1,yi+1)/dt;
322 double zyminmin=
zy(xi,yi)/du;
323 double zyminmax=
zy(xi,yi+1)/du;
324 double zymaxmin=
zy(xi+1,yi)/du;
325 double zymaxmax=
zy(xi+1,yi+1)/du;
327 double zxyminmin=
zxy(xi,yi)/du/dt;
328 double zxyminmax=
zxy(xi,yi+1)/du/dt;
329 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
330 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
346 v=-3*zxminmin+3*zxminmax-2*zxyminmin-zxyminmax;
348 v=2*zxminmin-2*zxminmax+zxyminmin+zxyminmax;
350 v=-3*zminmin+3*zmaxmin-2*zxminmin-zxmaxmin;
352 v=-3*zyminmin+3*zymaxmin-2*zxyminmin-zxymaxmin;
354 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
355 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
356 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
358 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
359 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
360 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
362 v=2*zminmin-2*zmaxmin+zxminmin+zxmaxmin;
364 v=2*zyminmin-2*zymaxmin+zxyminmin+zxymaxmin;
366 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
367 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
368 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
370 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
371 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
372 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
381 virtual double deriv_xx(
double x,
double y)
const {
391 size_t xi=
svx.find(x);
392 size_t yi=
svy.find(y);
394 double xmin=(*this->
xfun)[xi];
395 double xmax=(*this->
xfun)[xi+1];
396 double ymin=(*this->
yfun)[yi];
397 double ymax=(*this->
yfun)[yi+1];
399 double zminmin=(*this->
datap)(xi,yi);
400 double zminmax=(*this->
datap)(xi,yi+1);
401 double zmaxmin=(*this->
datap)(xi+1,yi);
402 double zmaxmax=(*this->
datap)(xi+1,yi+1);
407 double t=(x-xmin)/dx;
408 double u=(y-ymin)/dy;
412 double zxminmin=
zx(xi,yi)/dt;
413 double zxminmax=
zx(xi,yi+1)/dt;
414 double zxmaxmin=
zx(xi+1,yi)/dt;
415 double zxmaxmax=
zx(xi+1,yi+1)/dt;
417 double zyminmin=
zy(xi,yi)/du;
418 double zyminmax=
zy(xi,yi+1)/du;
419 double zymaxmin=
zy(xi+1,yi)/du;
420 double zymaxmax=
zy(xi+1,yi+1)/du;
422 double zxyminmin=
zxy(xi,yi)/du/dt;
423 double zxyminmax=
zxy(xi,yi+1)/du/dt;
424 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
425 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
437 double v=-3*zminmin+3*zmaxmin-2*zxminmin-zxmaxmin;
439 v=-3*zyminmin+3*zymaxmin-2*zxyminmin-zxymaxmin;
441 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
442 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
443 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
445 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
446 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
447 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
449 v=2*zminmin-2*zmaxmin+zxminmin+zxmaxmin;
451 v=2*zyminmin-2*zymaxmin+zxyminmin+zxymaxmin;
453 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
454 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
455 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
457 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
458 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
459 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
468 virtual double deriv_y(
double x,
double y)
const {
474 size_t xi=
svx.find(x);
475 size_t yi=
svy.find(y);
477 double xmin=(*this->
xfun)[xi];
478 double xmax=(*this->
xfun)[xi+1];
479 double ymin=(*this->
yfun)[yi];
480 double ymax=(*this->
yfun)[yi+1];
482 double zminmin=(*this->
datap)(xi,yi);
483 double zminmax=(*this->
datap)(xi,yi+1);
484 double zmaxmin=(*this->
datap)(xi+1,yi);
485 double zmaxmax=(*this->
datap)(xi+1,yi+1);
490 double t=(x-xmin)/dx;
491 double u=(y-ymin)/dy;
496 return du*(-(1.0-t)*zminmin-t*zmaxmin+(1.0-t)*zminmax+t*zmaxmax);
499 double zxminmin=
zx(xi,yi)/dt;
500 double zxminmax=
zx(xi,yi+1)/dt;
501 double zxmaxmin=
zx(xi+1,yi)/dt;
502 double zxmaxmax=
zx(xi+1,yi+1)/dt;
504 double zyminmin=
zy(xi,yi)/du;
505 double zyminmax=
zy(xi,yi+1)/du;
506 double zymaxmin=
zy(xi+1,yi)/du;
507 double zymaxmax=
zy(xi+1,yi+1)/du;
509 double zxyminmin=
zxy(xi,yi)/du/dt;
510 double zxyminmax=
zxy(xi,yi+1)/du/dt;
511 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
512 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
526 v=-3*zminmin+3*zminmax-2*zyminmin-zyminmax;
528 v=2*zminmin-2*zminmax+zyminmin+zyminmax;
532 v=-3*zxminmin+3*zxminmax-2*zxyminmin-zxyminmax;
534 v=2*zxminmin-2*zxminmax+zxyminmin+zxyminmax;
536 v=-3*zyminmin+3*zymaxmin-2*zxyminmin-zxymaxmin;
538 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
539 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
540 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
542 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
543 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
544 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
546 v=2*zyminmin-2*zymaxmin+zxyminmin+zxymaxmin;
548 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
549 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
550 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
552 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
553 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
554 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
563 virtual double deriv_yy(
double x,
double y)
const {
573 size_t xi=
svx.find(x);
574 size_t yi=
svy.find(y);
576 double xmin=(*this->
xfun)[xi];
577 double xmax=(*this->
xfun)[xi+1];
578 double ymin=(*this->
yfun)[yi];
579 double ymax=(*this->
yfun)[yi+1];
581 double zminmin=(*this->
datap)(xi,yi);
582 double zminmax=(*this->
datap)(xi,yi+1);
583 double zmaxmin=(*this->
datap)(xi+1,yi);
584 double zmaxmax=(*this->
datap)(xi+1,yi+1);
589 double t=(x-xmin)/dx;
590 double u=(y-ymin)/dy;
594 double zxminmin=
zx(xi,yi)/dt;
595 double zxminmax=
zx(xi,yi+1)/dt;
596 double zxmaxmin=
zx(xi+1,yi)/dt;
597 double zxmaxmax=
zx(xi+1,yi+1)/dt;
599 double zyminmin=
zy(xi,yi)/du;
600 double zyminmax=
zy(xi,yi+1)/du;
601 double zymaxmin=
zy(xi+1,yi)/du;
602 double zymaxmax=
zy(xi+1,yi+1)/du;
604 double zxyminmin=
zxy(xi,yi)/du/dt;
605 double zxyminmax=
zxy(xi,yi+1)/du/dt;
606 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
607 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
619 double v=-3*zminmin+3*zminmax-2*zyminmin-zyminmax;
621 v=2*zminmin-2*zminmax+zyminmin+zyminmax;
623 v=-3*zxminmin+3*zxminmax-2*zxyminmin-zxyminmax;
625 v=2*zxminmin-2*zxminmax+zxyminmin+zxyminmax;
627 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
628 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
629 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
631 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
632 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
633 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
635 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
636 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
637 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
639 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
640 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
641 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
651 virtual double deriv_xy(
double x,
double y)
const {
657 size_t xi=
svx.find(x);
658 size_t yi=
svy.find(y);
660 double xmin=(*this->
xfun)[xi];
661 double xmax=(*this->
xfun)[xi+1];
662 double ymin=(*this->
yfun)[yi];
663 double ymax=(*this->
yfun)[yi+1];
665 double zminmin=(*this->
datap)(xi,yi);
666 double zminmax=(*this->
datap)(xi,yi+1);
667 double zmaxmin=(*this->
datap)(xi+1,yi);
668 double zmaxmax=(*this->
datap)(xi+1,yi+1);
673 double t=(x-xmin)/dx;
674 double u=(y-ymin)/dy;
679 return dt*du*(zminmin-zmaxmin-zminmax+zmaxmax);
682 double zxminmin=
zx(xi,yi)/dt;
683 double zxminmax=
zx(xi,yi+1)/dt;
684 double zxmaxmin=
zx(xi+1,yi)/dt;
685 double zxmaxmax=
zx(xi+1,yi+1)/dt;
687 double zyminmin=
zy(xi,yi)/du;
688 double zyminmax=
zy(xi,yi+1)/du;
689 double zymaxmin=
zy(xi+1,yi)/du;
690 double zymaxmax=
zy(xi+1,yi+1)/du;
692 double zxyminmin=
zxy(xi,yi)/du/dt;
693 double zxyminmax=
zxy(xi,yi+1)/du/dt;
694 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
695 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
709 v=-3*zxminmin+3*zxminmax-2*zxyminmin-zxyminmax;
711 v=2*zxminmin-2*zxminmax+zxyminmin+zxyminmax;
713 v=-3*zyminmin+3*zymaxmin-2*zxyminmin-zxymaxmin;
715 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
716 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
717 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
719 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
720 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
721 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
723 v=2*zyminmin-2*zymaxmin+zxyminmin+zxymaxmin;
725 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
726 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
727 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
729 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
730 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
731 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
738 virtual double integ_x(
double x0,
double x1,
double y)
const {
739 O2SCL_ERR(
"Integration unimplemented in interp2_direct.",
744 virtual double integ_y(
double x,
double y0,
double y1)
const {
745 O2SCL_ERR(
"Integration unimplemented in interp2_direct.",
750 virtual double eval_gen(
int ix,
int iy,
double x0,
double x1,
751 double y0,
double y1)
const {
752 O2SCL_ERR(
"Function eval_gen() unimplemented in interp2_direct.",
758 #ifndef DOXYGEN_NO_O2NS 788 (
const interp2_direct<vec_t,mat_t,mat_row_t,mat_column_t>&);
794 #ifndef DOXYGEN_NO_O2NS Interpolation class for pre-specified vector.
virtual double deriv_y(double x, double y) const
Compute the partial derivative in the y-direction.
ubmatrix zx
Partial derivative with respect to x.
The main O<span style='position: relative; top: 0.3em; font-size: 0.8em'>2</span>scl O$_2$scl names...
virtual double deriv_x(double x, double y) const
Compute the partial derivative in the x-direction.
size_t ny
The number of y grid points.
invalid argument supplied by user
bool data_set
True if the data has been specified by the user.
virtual double eval_gen(int ix, int iy, double x0, double x1, double y0, double y1) const
Compute a general interpolation result.
virtual double integ_x(double x0, double x1, double y) const
Compute the integral in the x-direction between x=x0 and x=x1.
virtual double deriv_xx(double x, double y) const
Compute the partial second derivative in the x-direction.
requested feature not (yet) implemented
size_t itype
Interpolation type.
virtual double integ_y(double x, double y0, double y1) const
Compute the integral in the y-direction between y=y0 and y=y1.
Cubic spline for natural boundary conditions.
ubmatrix zxy
Mixed partial derivative.
#define O2SCL_ERR2(d, d2, n)
Set an error, two-string version.
search_vec< vec_t > svy
Searching object for y-direction.
virtual double eval(double x, double y) const
Perform the 2-d interpolation.
#define O2SCL_ERR(d, n)
Set an error with message d and code n.
size_t nx
The number of x grid points.
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.
virtual double deriv_xy(double x, double y) const
Compute the mixed partial derivative .
Two-dimensional interpolation base class [abstract].
Cubic spline for periodic boundary conditions.
Searching class for monotonic data with caching.
Bilinear or bicubic two-dimensional interpolation.
ubmatrix zy
Partial derivative with respect to y.
virtual double deriv_yy(double x, double y) const
Compute the partial second derivative in the y-direction.
static const double x1[5]
search_vec< vec_t > svx
Searching object for x-direction.