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