Mercurial > hg > octave-lyh
diff scripts/general/interp3.m @ 6722:5b09d433171c
[project @ 2007-06-14 10:13:14 by dbateman]
author | dbateman |
---|---|
date | Thu, 14 Jun 2007 10:13:16 +0000 |
parents | b2391d403ed2 |
children | ebf96cc00ee9 |
line wrap: on
line diff
--- a/scripts/general/interp3.m +++ b/scripts/general/interp3.m @@ -75,27 +75,58 @@ method = varargin {end}; nargs = nargs - 1; elseif (ischar (varargin {end - 1})) - if (! isnumeric (vargin {end}) || ! isscalar (vargin {end})) + if (! isnumeric (varargin {end}) || ! isscalar (varargin {end})) error ("extrapal is expected to be a numeric scalar"); endif + extrapval = varargin {end}; method = varargin {end - 1}; nargs = nargs - 2; endif if (nargs < 3 || (nargs == 4 && ! isvector (varargin {1}) && nargs == (ndims (varargin {1}) + 1))) - v = varargin {1}; if (ndims (v) != 3) error ("expect 3-dimensional array of values"); endif - vi = ipermute (interpn (permute(varargin, [1, 3, 2, 4]){:}), [2, 1, 3]); + x = varargin (2:4); + if (any (! cellfun (@isvector, x))) + for i = 2 : 3 + if (! size_equal (x{1}, x{i}) || ! size_equal (x{i}, v)) + error ("dimensional mismatch"); + endif + x{i} = permute (x{i}, [2, 1, 3]); + endfor + x{1} = permute (x{1}, [2, 1, 3]); + endif + v = permute (v, [2, 1, 3]); + vi = ipermute (interpn (v, x{:}, method, extrapval), [2, 1, 3]); elseif (nargs == 7 && nargs == (2 * ndims (varargin {ceil (nargs / 2)})) + 1) v = varargin {4}; if (ndims (v) != 3) error ("expect 3-dimensional array of values"); endif - vi = ipermute (interpn (permute(varargin, [2, 1, 3, 4, 6, 5, 7]){:}), - [2, 1, 3]); + x = varargin (1:3); + if (any (! cellfun (@isvector, x))) + for i = 2 : 3 + if (! size_equal (x{1}, x{i}) || ! size_equal (x{i}, v)) + error ("dimensional mismatch"); + endif + x{i} = permute (x{i}, [2, 1, 3]); + endfor + x{1} = permute (x{1}, [2, 1, 3]); + endif + y = varargin (5:7); + if (any (! cellfun (@isvector, y))) + for i = 2 : 3 + if (! size_equal (y{1}, y{i})) + error ("dimensional mismatch"); + endif + y{i} = permute (y{i}, [2, 1, 3]); + endfor + y{1} = permute (y{1}, [2, 1, 3]); + endif + v = permute (v, [2, 1, 3]); + vi = ipermute (interpn (x{:}, v, y{:}, method, extrapval), [2,1,3]); else error ("wrong number or incorrectly formatted input arguments"); endif