/* Copyright (C) 2002 Kai Habel ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include // SLATEC/PCHIP function not in libcruft extern "C" { extern int F77_FUNC (dpchim, DPCHIM) (const int &n, double *x, double *f, double *d, const int &incfd, int *ierr); } DEFUN_DLD(pchip_deriv, args, ,"\ pchip_deriv(x,y):\n\ wrapper for SLATEC/PCHIP function DPCHIM to calculate derivates for\n\ piecewise polynomials. You shouldn't use pchip_deriv, use pchip instead.\n\ ") { octave_value_list retval; const int nargin = args.length(); if (nargin == 2) { ColumnVector xvec(args(0).vector_value()); Matrix ymat(args(1).matrix_value()); int nx = xvec.length(); int nyr = ymat.rows(); int nyc = ymat.columns(); if (nx != nyr) { error("number of rows for x and y must match"); return retval; } ColumnVector dvec(nx),yvec(nx); Matrix dmat(nyr,nyc); int ierr; const int incfd = 1; for (int c=0; c