X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fm%2Fgeneral%2Fprivate%2F__splinen__.m;fp=octave_packages%2Fm%2Fgeneral%2Fprivate%2F__splinen__.m;h=6e1e30da9f9f3cb16add9e6ddfb465319d003307;hp=0000000000000000000000000000000000000000;hb=1c0469ada9531828709108a4882a751d2816994a;hpb=63de9f36673d49121015e3695f2c336ea92bc278 diff --git a/octave_packages/m/general/private/__splinen__.m b/octave_packages/m/general/private/__splinen__.m new file mode 100644 index 0000000..6e1e30d --- /dev/null +++ b/octave_packages/m/general/private/__splinen__.m @@ -0,0 +1,49 @@ +## Copyright (C) 2007-2012 David Bateman +## +## This file is part of Octave. +## +## Octave 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 3 of the License, or (at +## your option) any later version. +## +## Octave 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 Octave; see the file COPYING. If not, see +## . + +## Undocumented internal function. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{yi} =} __splinen__ (@var{x}, @var{y}, @var{xi}) +## Undocumented internal function. +## @end deftypefn + +## FIXME: Allow arbitrary grids.. + +function yi = __splinen__ (x, y, xi, extrapval, f) + if (nargin != 5) + error ("__splinen__: Incorrect number of arguments"); + endif + ## ND isvector function. + isvec = @(x) numel (x) == length (x); + if (!iscell (x) || length(x) < ndims(y) || any (! cellfun (isvec, x)) + || !iscell (xi) || length(xi) < ndims(y) || any (! cellfun (isvec, xi))) + error ("__splinen__: %s: non gridded data or dimensions inconsistent", f); + endif + yi = y; + for i = length(x):-1:1 + yi = permute (spline (x{i}, yi, xi{i}(:)), [length(x),1:length(x)-1]); + endfor + + [xi{:}] = ndgrid (cellfun (@(x) x(:), xi, "uniformoutput", false){:}); + idx = zeros (size(xi{1})); + for i = 1 : length(x) + idx |= xi{i} < min (x{i}(:)) | xi{i} > max (x{i}(:)); + endfor + yi(idx) = extrapval; +endfunction