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.
6 function test_optiminterp
10 printf('Testing 1D-optimal interpolation: ');
13 % grid of background field
14 xi = linspace(0,1,50);
17 % grid of observations
21 var = 0.01 * ones(on,1);
26 [fi,vari] = optiminterp1(x,f,var,0.1,m,xi);
29 rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
32 error('unexpected large difference with reference field');
43 printf('Testing 2D-optimal interpolation: ');
46 % grid of background field
47 [xi,yi] = ndgrid(linspace(0,1,30));
48 fi_ref = sin( xi*6 ) .* cos( yi*6);
50 % grid of observations
51 [x,y] = ndgrid(linspace(0,1,20));
56 var = 0.01 * ones(on,1);
57 f = sin( x*6 ) .* cos( y*6);
61 [fi,vari] = optiminterp2(x,y,f,var,0.1,0.1,m,xi,yi);
64 rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
67 error('unexpected large difference with reference field');
78 printf('Testing 3D-optimal interpolation: ');
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);
85 % grid of observations
86 [x,y,z] = ndgrid(linspace(0,1,10));
92 var = 0.01 * ones(on,1);
93 f = sin(6*x) .* cos(6*y) .* sin(6*z);
97 [fi,vari] = optiminterp3(x,y,z,f,var,0.1,0.1,0.1,m,xi,yi,zi);
100 rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
103 error('unexpected large difference with reference field');
113 printf('Testing 4D-optimal interpolation: ');
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);
120 % grid of observations
121 [x,y,z,t] = ndgrid(linspace(0,1,10));
128 var = 0.01 * ones(on,1);
129 f = sin(6*x) .* cos(6*y) .* sin(6*z) .* cos(6*t);
133 [fi,vari] = optiminterp4(x,y,z,t,f,var,0.1,0.1,0.1,0.1,m,xi,yi,zi,ti);
135 rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
138 error('unexpected large difference with reference field');