Mercurial > hg > octave-nkf
comparison 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 |
comparison
equal
deleted
inserted
replaced
7584:a5307fa238ac | 7585:522433b05f45 |
---|---|
28 ## @seealso{griddata, delaunayn} | 28 ## @seealso{griddata, delaunayn} |
29 ## @end deftypefn | 29 ## @end deftypefn |
30 | 30 |
31 ## Author: David Bateman <dbateman@free.fr> | 31 ## Author: David Bateman <dbateman@free.fr> |
32 | 32 |
33 function [yi] = griddata3 (x, y, z,v, xi, yi, zi, method, varargin) | 33 function vi = griddata3 (x, y, z, v, xi, yi, zi, method, varargin) |
34 | 34 |
35 if (nargin < 7) | 35 if (nargin < 7) |
36 print_usage (); | 36 print_usage (); |
37 endif | 37 endif |
38 | 38 |
46 && (numel (xi) != numel (yi) || numel (xi) != numel (zi))) | 46 && (numel (xi) != numel (yi) || numel (xi) != numel (zi))) |
47 [xi, yi, zi] = meshgrid (xi, yi, zi); | 47 [xi, yi, zi] = meshgrid (xi, yi, zi); |
48 endif | 48 endif |
49 | 49 |
50 if (any (size(xi) != size(yi)) || any (size(xi) != size(zi))) | 50 if (any (size(xi) != size(yi)) || any (size(xi) != size(zi))) |
51 error ("griddata: xi, yi and zi must be vectors or matrices of same size"); | 51 error ("griddata3: xi, yi and zi must be vectors or matrices of same size"); |
52 endif | 52 endif |
53 | 53 |
54 vi = griddata ([x(:), y(:), z(:)], v(:), [xi(:), yi(:), zi(:)], varargin{:}); | 54 vi = griddatan ([x(:), y(:), z(:)], v(:), [xi(:), yi(:), zi(:)], varargin{:}); |
55 vi = reshape (vi, size (xi)); | 55 vi = reshape (vi, size (xi)); |
56 endfunction | 56 endfunction |
57 | 57 |
58 %!test | |
59 %! rand('state', 0); | |
60 %! x = 2 * rand(1000, 1) - 1; | |
61 %! y = 2 * rand(1000, 1) - 1; | |
62 %! z = 2 * rand(1000, 1) - 1; | |
63 %! v = x.^2 + y.^2 + z.^2; | |
64 %! [xi, yi, zi] = meshgrid (-0.8:0.2:0.8); | |
65 %! ##vi = reshape (griddatan([x(:), y(:), z(:)], v, [xi(:), yi(:), zi(:)], 'linear'), size (xi)); | |
66 %! vi = griddata3 (x, y, z, v, xi, yi, zi, 'linear'); | |
67 %! vv = vi - xi.^2 - yi.^2 - zi.^2; | |
68 %! assert (max(abs(vv(:))), 0, 0.1) | |
69 | |
70 %!test | |
71 %! rand('state', 0); | |
72 %! x = 2 * rand(1000, 1) - 1; | |
73 %! y = 2 * rand(1000, 1) - 1; | |
74 %! z = 2 * rand(1000, 1) - 1; | |
75 %! v = x.^2 + y.^2 + z.^2; | |
76 %! [xi, yi, zi] = meshgrid (-0.8:0.2:0.8); | |
77 %! ##vi = reshape (griddatan([x(:), y(:), z(:)], v, [xi(:), yi(:), zi(:)], 'linear'), size (xi)); | |
78 %! vi = griddata3 (x, y, z, v, xi, yi, zi, 'nearest'); | |
79 %! vv = vi - xi.^2 - yi.^2 - zi.^2; | |
80 %! assert (max(abs(vv(:))), 0, 0.1) |