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_mult
10 printf('Testing multiple 1D-optimal interpolation: ');
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 );
18 % grid of observations
19 x = linspace(0,1,20)';
22 var = 0.01 * ones(on,1);
28 [fi,vari] = optiminterp1(x,f,var,0.1,m,xi);
31 rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
34 error('unexpected large difference with reference field');
46 printf('Testing multiple 2D-optimal interpolation: ');
50 % grid of background field
51 [xi,yi] = ndgrid(linspace(0,1,30));
53 fi_ref(:,:,1) = sin( xi*6 ) .* cos( yi*6);
54 fi_ref(:,:,2) = cos( xi*6 ) .* sin( yi*6);
56 % grid of observations
57 [x,y] = ndgrid(linspace(0,1,20));
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);
66 [fi,vari] = optiminterp2(x,y,f,var,0.1,0.1,m,xi,yi);
69 rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
72 error('unexpected large difference with reference field');
82 printf('Testing multiple 3D-optimal interpolation: ');
88 % grid of background field
89 [xi,yi,zi] = ndgrid(linspace(0,1,15));
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);
94 % grid of observations
95 [x,y,z] = ndgrid(linspace(0,1,10));
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);
104 [fi,vari] = optiminterp3(x,y,z,f,var,0.1,0.1,0.1,m,xi,yi,zi);
107 rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
110 error('unexpected large difference with reference field');
120 printf('Testing multiple 4D-optimal interpolation: ');
125 % grid of background field
126 [xi,yi,zi,ti] = ndgrid(linspace(0,1,5));
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);
131 % grid of observations
132 [x,y,z,t] = ndgrid(linspace(0,1,10));
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);
145 [fi,vari] = optiminterp4(x,y,z,t,f,var,0.1,0.1,0.1,0.1,m,xi,yi,zi,ti);
147 rms = sqrt(mean((fi_ref(:) - fi(:)).^2));
150 error('unexpected large difference with reference field');