]> Creatis software - CreaPhase.git/blob - octave_packages/optiminterp-0.3.3/test_optiminterp_mult.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / optiminterp-0.3.3 / test_optiminterp_mult.m
1 % Tests 1D, 2D and 3D optimal interpolation.
2 % All tests should pass; any error indicates that either 
3 % there is a bug in the optimal interpolation package or 
4 % that it is incrorrectly installed.
5
6 function test_optiminterp_mult
7
8 more off
9
10 printf('Testing multiple 1D-optimal interpolation: ');
11
12 try
13   % grid of background field
14   xi = linspace(0,1,50)';
15   fi_ref(:,1) = sin( xi*6 );
16   fi_ref(:,2) = cos( xi*6 );
17
18   % grid of observations
19   x = linspace(0,1,20)';
20
21   on = numel(x);
22   var = 0.01 * ones(on,1);
23   f(:,1) = sin( x*6 );
24   f(:,2) = cos( x*6 );
25
26   m = 15;
27
28   [fi,vari] = optiminterp1(x,f,var,0.1,m,xi);
29
30
31   rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
32
33   if (rms > 0.005) 
34     error('unexpected large difference with reference field');
35   end
36
37   disp('OK');
38
39 catch
40   disp('failed');
41   disp(lasterr);
42 end
43
44
45
46 printf('Testing multiple 2D-optimal interpolation: ');
47
48 try
49   clear fi_ref f
50   % grid of background field
51   [xi,yi] = ndgrid(linspace(0,1,30));
52
53   fi_ref(:,:,1) = sin( xi*6 ) .* cos( yi*6);
54   fi_ref(:,:,2) = cos( xi*6 ) .* sin( yi*6);
55
56   % grid of observations
57   [x,y] = ndgrid(linspace(0,1,20));
58
59   on = numel(x);
60   var = 0.01 * ones(on,1);
61   f(:,:,1) = sin( x*6 ) .* cos( y*6);
62   f(:,:,2) = cos( x*6 ) .* sin( y*6);
63
64   m = 30;
65
66   [fi,vari] = optiminterp2(x,y,f,var,0.1,0.1,m,xi,yi);
67
68
69   rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
70
71   if (rms > 0.005) 
72     error('unexpected large difference with reference field');
73   end
74
75   disp('OK');
76
77 catch
78   disp('failed');
79   disp(lasterr);
80 end
81
82 printf('Testing multiple 3D-optimal interpolation: ');
83
84
85 try
86    clear fi_ref f
87
88   % grid of background field
89   [xi,yi,zi] = ndgrid(linspace(0,1,15));
90   
91   fi_ref(:,:,:,1) = sin(6*xi) .* cos(6*yi) .* sin(6*zi);
92   fi_ref(:,:,:,2) = cos(6*xi) .* sin(6*yi) .* cos(6*zi);
93
94   % grid of observations
95   [x,y,z] = ndgrid(linspace(0,1,10));
96
97   on = numel(x);
98   var = 0.01 * ones(on,1);
99   f(:,:,:,1) = sin(6*x) .* cos(6*y) .* sin(6*z);
100   f(:,:,:,2) = cos(6*x) .* sin(6*y) .* cos(6*z);
101
102   m = 20;
103
104   [fi,vari] = optiminterp3(x,y,z,f,var,0.1,0.1,0.1,m,xi,yi,zi);
105
106
107   rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
108
109   if (rms > 0.04) 
110     error('unexpected large difference with reference field');
111   end
112
113   disp('OK');
114
115 catch
116   disp('failed');
117   disp(lasterr);
118 end
119
120 printf('Testing multiple 4D-optimal interpolation: ');
121
122 try
123   clear fi_ref f
124
125   % grid of background field
126   [xi,yi,zi,ti] = ndgrid(linspace(0,1,5));
127
128   fi_ref(:,:,:,:,1) = sin(6*xi) .* cos(6*yi) .* sin(6*zi) .* cos(6*ti);
129   fi_ref(:,:,:,:,2) = cos(6*xi) .* sin(6*yi) .* cos(6*zi) .* sin(6*ti);
130
131   % grid of observations
132   [x,y,z,t] = ndgrid(linspace(0,1,10));
133   x = x(:);
134   y = y(:);
135   z = z(:);
136   t = t(:);
137
138   on = numel(x);
139   var = 0.01 * ones(on,1);
140   f(:,:,:,:,1) = sin(6*x) .* cos(6*y) .* sin(6*z) .* cos(6*t);
141   f(:,:,:,:,2) = cos(6*x) .* sin(6*y) .* cos(6*z) .* sin(6*t);
142
143   m = 20;
144
145   [fi,vari] = optiminterp4(x,y,z,t,f,var,0.1,0.1,0.1,0.1,m,xi,yi,zi,ti);
146
147   rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
148
149   if (rms > 0.04) 
150     error('unexpected large difference with reference field');
151   end
152
153   disp('OK');
154
155 catch
156   disp('failed');
157   disp(lasterr);
158 end
159