diff scripts/geometry/griddata3.m @ 7585:522433b05f45

Fix griddata3 and add test code
author David Bateman <dbateman@free.fr>
date Wed, 12 Mar 2008 15:05:00 +0100
parents 42b70df74c21
children ec0a13863eb7 72830070a17b
line wrap: on
line diff
--- a/scripts/geometry/griddata3.m
+++ b/scripts/geometry/griddata3.m
@@ -30,7 +30,7 @@
 
 ## Author: David Bateman <dbateman@free.fr>
 
-function [yi] = griddata3 (x, y, z,v, xi, yi, zi, method, varargin)
+function vi = griddata3 (x, y, z, v, xi, yi, zi, method, varargin)
 	
   if (nargin < 7)
     print_usage ();
@@ -48,10 +48,33 @@
   endif
 
   if (any (size(xi) != size(yi)) || any (size(xi) != size(zi)))
-    error ("griddata: xi, yi and zi must be vectors or matrices of same size");
+    error ("griddata3: xi, yi and zi must be vectors or matrices of same size");
   endif
 
-  vi = griddata ([x(:), y(:), z(:)], v(:), [xi(:), yi(:), zi(:)], varargin{:});
+  vi = griddatan ([x(:), y(:), z(:)], v(:), [xi(:), yi(:), zi(:)], varargin{:});
   vi = reshape (vi, size (xi));
 endfunction
 
+%!test
+%! rand('state', 0);
+%! x = 2 * rand(1000, 1) - 1;
+%! y = 2 * rand(1000, 1) - 1;
+%! z = 2 * rand(1000, 1) - 1;
+%! v = x.^2 + y.^2 + z.^2;
+%! [xi, yi, zi] = meshgrid (-0.8:0.2:0.8);
+%! ##vi = reshape (griddatan([x(:), y(:), z(:)], v, [xi(:), yi(:), zi(:)], 'linear'), size (xi));
+%! vi = griddata3 (x, y, z, v, xi, yi, zi, 'linear');
+%! vv = vi - xi.^2 - yi.^2 - zi.^2;
+%! assert (max(abs(vv(:))), 0, 0.1)
+
+%!test
+%! rand('state', 0);
+%! x = 2 * rand(1000, 1) - 1;
+%! y = 2 * rand(1000, 1) - 1;
+%! z = 2 * rand(1000, 1) - 1;
+%! v = x.^2 + y.^2 + z.^2;
+%! [xi, yi, zi] = meshgrid (-0.8:0.2:0.8);
+%! ##vi = reshape (griddatan([x(:), y(:), z(:)], v, [xi(:), yi(:), zi(:)], 'linear'), size (xi));
+%! vi = griddata3 (x, y, z, v, xi, yi, zi, 'nearest');
+%! vv = vi - xi.^2 - yi.^2 - zi.^2;
+%! assert (max(abs(vv(:))), 0, 0.1)