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 {
190 size_t xi=
svx.find_const(x,cache);
192 size_t yi=
svy.find_const(y,cache);
194 double xmin=(*this->
xfun)[xi];
195 double xmax=(*this->
xfun)[xi+1];
196 double ymin=(*this->
yfun)[yi];
197 double ymax=(*this->
yfun)[yi+1];
199 double zminmin=(*this->
datap)(xi,yi);
200 double zminmax=(*this->
datap)(xi,yi+1);
201 double zmaxmin=(*this->
datap)(xi+1,yi);
202 double zmaxmax=(*this->
datap)(xi+1,yi+1);
207 double t=(x-xmin)/dx;
208 double u=(y-ymin)/dy;
213 return (1.0-t)*(1.0-u)*zminmin+t*(1.0-u)*zmaxmin+
214 (1.0-t)*u*zminmax+t*u*zmaxmax;
217 double zxminmin=
zx(xi,yi)/dt;
218 double zxminmax=
zx(xi,yi+1)/dt;
219 double zxmaxmin=
zx(xi+1,yi)/dt;
220 double zxmaxmax=
zx(xi+1,yi+1)/dt;
222 double zyminmin=
zy(xi,yi)/du;
223 double zyminmax=
zy(xi,yi+1)/du;
224 double zymaxmin=
zy(xi+1,yi)/du;
225 double zymaxmax=
zy(xi+1,yi+1)/du;
227 double zxyminmin=
zxy(xi,yi)/du/dt;
228 double zxyminmax=
zxy(xi,yi+1)/du/dt;
229 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
230 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
246 v=-3*zminmin+3*zminmax-2*zyminmin-zyminmax;
248 v=2*zminmin-2*zminmax+zyminmin+zyminmax;
254 v=-3*zxminmin+3*zxminmax-2*zxyminmin-zxyminmax;
256 v=2*zxminmin-2*zxminmax+zxyminmin+zxyminmax;
258 v=-3*zminmin+3*zmaxmin-2*zxminmin-zxmaxmin;
260 v=-3*zyminmin+3*zymaxmin-2*zxyminmin-zxymaxmin;
262 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
263 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
264 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
266 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
267 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
268 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
270 v=2*zminmin-2*zmaxmin+zxminmin+zxmaxmin;
272 v=2*zyminmin-2*zymaxmin+zxyminmin+zxymaxmin;
274 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
275 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
276 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
278 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
279 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
280 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
288 virtual double deriv_x(
double x,
double y)
const {
295 size_t xi=
svx.find_const(x,cache);
297 size_t yi=
svy.find_const(y,cache);
299 double xmin=(*this->
xfun)[xi];
300 double xmax=(*this->
xfun)[xi+1];
301 double ymin=(*this->
yfun)[yi];
302 double ymax=(*this->
yfun)[yi+1];
304 double zminmin=(*this->
datap)(xi,yi);
305 double zminmax=(*this->
datap)(xi,yi+1);
306 double zmaxmin=(*this->
datap)(xi+1,yi);
307 double zmaxmax=(*this->
datap)(xi+1,yi+1);
312 double t=(x-xmin)/dx;
313 double u=(y-ymin)/dy;
318 return dt*(-(1.0-u)*zminmin+(1.0-u)*zmaxmin-u*zminmax+u*zmaxmax);
321 double zxminmin=
zx(xi,yi)/dt;
322 double zxminmax=
zx(xi,yi+1)/dt;
323 double zxmaxmin=
zx(xi+1,yi)/dt;
324 double zxmaxmax=
zx(xi+1,yi+1)/dt;
326 double zyminmin=
zy(xi,yi)/du;
327 double zyminmax=
zy(xi,yi+1)/du;
328 double zymaxmin=
zy(xi+1,yi)/du;
329 double zymaxmax=
zy(xi+1,yi+1)/du;
331 double zxyminmin=
zxy(xi,yi)/du/dt;
332 double zxyminmax=
zxy(xi,yi+1)/du/dt;
333 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
334 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
350 v=-3*zxminmin+3*zxminmax-2*zxyminmin-zxyminmax;
352 v=2*zxminmin-2*zxminmax+zxyminmin+zxyminmax;
354 v=-3*zminmin+3*zmaxmin-2*zxminmin-zxmaxmin;
356 v=-3*zyminmin+3*zymaxmin-2*zxyminmin-zxymaxmin;
358 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
359 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
360 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
362 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
363 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
364 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
366 v=2*zminmin-2*zmaxmin+zxminmin+zxmaxmin;
368 v=2*zyminmin-2*zymaxmin+zxyminmin+zxymaxmin;
370 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
371 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
372 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
374 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
375 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
376 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
385 virtual double deriv_xx(
double x,
double y)
const {
396 size_t xi=
svx.find_const(x,cache);
398 size_t yi=
svy.find_const(y,cache);
400 double xmin=(*this->
xfun)[xi];
401 double xmax=(*this->
xfun)[xi+1];
402 double ymin=(*this->
yfun)[yi];
403 double ymax=(*this->
yfun)[yi+1];
405 double zminmin=(*this->
datap)(xi,yi);
406 double zminmax=(*this->
datap)(xi,yi+1);
407 double zmaxmin=(*this->
datap)(xi+1,yi);
408 double zmaxmax=(*this->
datap)(xi+1,yi+1);
413 double t=(x-xmin)/dx;
414 double u=(y-ymin)/dy;
418 double zxminmin=
zx(xi,yi)/dt;
419 double zxminmax=
zx(xi,yi+1)/dt;
420 double zxmaxmin=
zx(xi+1,yi)/dt;
421 double zxmaxmax=
zx(xi+1,yi+1)/dt;
423 double zyminmin=
zy(xi,yi)/du;
424 double zyminmax=
zy(xi,yi+1)/du;
425 double zymaxmin=
zy(xi+1,yi)/du;
426 double zymaxmax=
zy(xi+1,yi+1)/du;
428 double zxyminmin=
zxy(xi,yi)/du/dt;
429 double zxyminmax=
zxy(xi,yi+1)/du/dt;
430 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
431 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
443 double v=-3*zminmin+3*zmaxmin-2*zxminmin-zxmaxmin;
445 v=-3*zyminmin+3*zymaxmin-2*zxyminmin-zxymaxmin;
447 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
448 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
449 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
451 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
452 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
453 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
455 v=2*zminmin-2*zmaxmin+zxminmin+zxmaxmin;
457 v=2*zyminmin-2*zymaxmin+zxyminmin+zxymaxmin;
459 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
460 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
461 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
463 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
464 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
465 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
474 virtual double deriv_y(
double x,
double y)
const {
481 size_t xi=
svx.find_const(x,cache);
483 size_t yi=
svy.find_const(y,cache);
485 double xmin=(*this->
xfun)[xi];
486 double xmax=(*this->
xfun)[xi+1];
487 double ymin=(*this->
yfun)[yi];
488 double ymax=(*this->
yfun)[yi+1];
490 double zminmin=(*this->
datap)(xi,yi);
491 double zminmax=(*this->
datap)(xi,yi+1);
492 double zmaxmin=(*this->
datap)(xi+1,yi);
493 double zmaxmax=(*this->
datap)(xi+1,yi+1);
498 double t=(x-xmin)/dx;
499 double u=(y-ymin)/dy;
504 return du*(-(1.0-t)*zminmin-t*zmaxmin+(1.0-t)*zminmax+t*zmaxmax);
507 double zxminmin=
zx(xi,yi)/dt;
508 double zxminmax=
zx(xi,yi+1)/dt;
509 double zxmaxmin=
zx(xi+1,yi)/dt;
510 double zxmaxmax=
zx(xi+1,yi+1)/dt;
512 double zyminmin=
zy(xi,yi)/du;
513 double zyminmax=
zy(xi,yi+1)/du;
514 double zymaxmin=
zy(xi+1,yi)/du;
515 double zymaxmax=
zy(xi+1,yi+1)/du;
517 double zxyminmin=
zxy(xi,yi)/du/dt;
518 double zxyminmax=
zxy(xi,yi+1)/du/dt;
519 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
520 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
534 v=-3*zminmin+3*zminmax-2*zyminmin-zyminmax;
536 v=2*zminmin-2*zminmax+zyminmin+zyminmax;
540 v=-3*zxminmin+3*zxminmax-2*zxyminmin-zxyminmax;
542 v=2*zxminmin-2*zxminmax+zxyminmin+zxyminmax;
544 v=-3*zyminmin+3*zymaxmin-2*zxyminmin-zxymaxmin;
546 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
547 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
548 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
550 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
551 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
552 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
554 v=2*zyminmin-2*zymaxmin+zxyminmin+zxymaxmin;
556 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
557 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
558 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
560 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
561 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
562 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
571 virtual double deriv_yy(
double x,
double y)
const {
582 size_t xi=
svx.find_const(x,cache);
584 size_t yi=
svy.find_const(y,cache);
586 double xmin=(*this->
xfun)[xi];
587 double xmax=(*this->
xfun)[xi+1];
588 double ymin=(*this->
yfun)[yi];
589 double ymax=(*this->
yfun)[yi+1];
591 double zminmin=(*this->
datap)(xi,yi);
592 double zminmax=(*this->
datap)(xi,yi+1);
593 double zmaxmin=(*this->
datap)(xi+1,yi);
594 double zmaxmax=(*this->
datap)(xi+1,yi+1);
599 double t=(x-xmin)/dx;
600 double u=(y-ymin)/dy;
604 double zxminmin=
zx(xi,yi)/dt;
605 double zxminmax=
zx(xi,yi+1)/dt;
606 double zxmaxmin=
zx(xi+1,yi)/dt;
607 double zxmaxmax=
zx(xi+1,yi+1)/dt;
609 double zyminmin=
zy(xi,yi)/du;
610 double zyminmax=
zy(xi,yi+1)/du;
611 double zymaxmin=
zy(xi+1,yi)/du;
612 double zymaxmax=
zy(xi+1,yi+1)/du;
614 double zxyminmin=
zxy(xi,yi)/du/dt;
615 double zxyminmax=
zxy(xi,yi+1)/du/dt;
616 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
617 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
629 double v=-3*zminmin+3*zminmax-2*zyminmin-zyminmax;
631 v=2*zminmin-2*zminmax+zyminmin+zyminmax;
633 v=-3*zxminmin+3*zxminmax-2*zxyminmin-zxyminmax;
635 v=2*zxminmin-2*zxminmax+zxyminmin+zxyminmax;
637 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
638 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
639 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
641 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
642 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
643 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
645 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
646 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
647 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
649 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
650 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
651 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
661 virtual double deriv_xy(
double x,
double y)
const {
668 size_t xi=
svx.find_const(x,cache);
670 size_t yi=
svy.find_const(y,cache);
672 double xmin=(*this->
xfun)[xi];
673 double xmax=(*this->
xfun)[xi+1];
674 double ymin=(*this->
yfun)[yi];
675 double ymax=(*this->
yfun)[yi+1];
677 double zminmin=(*this->
datap)(xi,yi);
678 double zminmax=(*this->
datap)(xi,yi+1);
679 double zmaxmin=(*this->
datap)(xi+1,yi);
680 double zmaxmax=(*this->
datap)(xi+1,yi+1);
685 double t=(x-xmin)/dx;
686 double u=(y-ymin)/dy;
691 return dt*du*(zminmin-zmaxmin-zminmax+zmaxmax);
694 double zxminmin=
zx(xi,yi)/dt;
695 double zxminmax=
zx(xi,yi+1)/dt;
696 double zxmaxmin=
zx(xi+1,yi)/dt;
697 double zxmaxmax=
zx(xi+1,yi+1)/dt;
699 double zyminmin=
zy(xi,yi)/du;
700 double zyminmax=
zy(xi,yi+1)/du;
701 double zymaxmin=
zy(xi+1,yi)/du;
702 double zymaxmax=
zy(xi+1,yi+1)/du;
704 double zxyminmin=
zxy(xi,yi)/du/dt;
705 double zxyminmax=
zxy(xi,yi+1)/du/dt;
706 double zxymaxmin=
zxy(xi+1,yi)/du/dt;
707 double zxymaxmax=
zxy(xi+1,yi+1)/du/dt;
721 v=-3*zxminmin+3*zxminmax-2*zxyminmin-zxyminmax;
723 v=2*zxminmin-2*zxminmax+zxyminmin+zxyminmax;
725 v=-3*zyminmin+3*zymaxmin-2*zxyminmin-zxymaxmin;
727 v=9*zminmin-9*zmaxmin+9*zmaxmax-9*zminmax+6*zxminmin+3*zxmaxmin-
728 3*zxmaxmax-6*zxminmax+6*zyminmin-6*zymaxmin-3*zymaxmax+
729 3*zyminmax+4*zxyminmin+2*zxymaxmin+zxymaxmax+2*zxyminmax;
731 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-4*zxminmin-2*zxmaxmin+
732 2*zxmaxmax+4*zxminmax-3*zyminmin+3*zymaxmin+3*zymaxmax-
733 3*zyminmax-2*zxyminmin-zxymaxmin-zxymaxmax-2*zxyminmax;
735 v=2*zyminmin-2*zymaxmin+zxyminmin+zxymaxmin;
737 v=-6*zminmin+6*zmaxmin-6*zmaxmax+6*zminmax-3*zxminmin-3*zxmaxmin+
738 3*zxmaxmax+3*zxminmax-4*zyminmin+4*zymaxmin+2*zymaxmax-
739 2*zyminmax-2*zxyminmin-2*zxymaxmin-zxymaxmax-zxyminmax;
741 v=4*zminmin-4*zmaxmin+4*zmaxmax-4*zminmax+2*zxminmin+2*zxmaxmin-
742 2*zxmaxmax-2*zxminmax+2*zyminmin-2*zymaxmin-2*zymaxmax+
743 2*zyminmax+zxyminmin+zxymaxmin+zxymaxmax+zxyminmax;
750 virtual double integ_x(
double x0,
double x1,
double y)
const {
751 O2SCL_ERR(
"Integration unimplemented in interp2_direct.",
756 virtual double integ_y(
double x,
double y0,
double y1)
const {
757 O2SCL_ERR(
"Integration unimplemented in interp2_direct.",
762 virtual double eval_gen(
int ix,
int iy,
double x0,
double x1,
763 double y0,
double y1)
const {
764 O2SCL_ERR(
"Function eval_gen() unimplemented in interp2_direct.",
770 #ifndef DOXYGEN_NO_O2NS 800 (
const interp2_direct<vec_t,mat_t,mat_row_t,mat_column_t>&);
806 #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.