X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=octave_packages%2Foptiminterp-0.3.3%2Ftest_optiminterp_mult.m;fp=octave_packages%2Foptiminterp-0.3.3%2Ftest_optiminterp_mult.m;h=3b9ac89f8dc5885b7ae11628c19a269c007f56ee;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hp=0000000000000000000000000000000000000000;hpb=1705066eceaaea976f010f669ce8e972f3734b05;p=CreaPhase.git diff --git a/octave_packages/optiminterp-0.3.3/test_optiminterp_mult.m b/octave_packages/optiminterp-0.3.3/test_optiminterp_mult.m new file mode 100644 index 0000000..3b9ac89 --- /dev/null +++ b/octave_packages/optiminterp-0.3.3/test_optiminterp_mult.m @@ -0,0 +1,159 @@ +% Tests 1D, 2D and 3D optimal interpolation. +% All tests should pass; any error indicates that either +% there is a bug in the optimal interpolation package or +% that it is incrorrectly installed. + +function test_optiminterp_mult + +more off + +printf('Testing multiple 1D-optimal interpolation: '); + +try + % grid of background field + xi = linspace(0,1,50)'; + fi_ref(:,1) = sin( xi*6 ); + fi_ref(:,2) = cos( xi*6 ); + + % grid of observations + x = linspace(0,1,20)'; + + on = numel(x); + var = 0.01 * ones(on,1); + f(:,1) = sin( x*6 ); + f(:,2) = cos( x*6 ); + + m = 15; + + [fi,vari] = optiminterp1(x,f,var,0.1,m,xi); + + + rms = sqrt(mean((fi_ref(:) - fi(:)).^2)); + + if (rms > 0.005) + error('unexpected large difference with reference field'); + end + + disp('OK'); + +catch + disp('failed'); + disp(lasterr); +end + + + +printf('Testing multiple 2D-optimal interpolation: '); + +try + clear fi_ref f + % grid of background field + [xi,yi] = ndgrid(linspace(0,1,30)); + + fi_ref(:,:,1) = sin( xi*6 ) .* cos( yi*6); + fi_ref(:,:,2) = cos( xi*6 ) .* sin( yi*6); + + % grid of observations + [x,y] = ndgrid(linspace(0,1,20)); + + on = numel(x); + var = 0.01 * ones(on,1); + f(:,:,1) = sin( x*6 ) .* cos( y*6); + f(:,:,2) = cos( x*6 ) .* sin( y*6); + + m = 30; + + [fi,vari] = optiminterp2(x,y,f,var,0.1,0.1,m,xi,yi); + + + rms = sqrt(mean((fi_ref(:) - fi(:)).^2)); + + if (rms > 0.005) + error('unexpected large difference with reference field'); + end + + disp('OK'); + +catch + disp('failed'); + disp(lasterr); +end + +printf('Testing multiple 3D-optimal interpolation: '); + + +try + clear fi_ref f + + % grid of background field + [xi,yi,zi] = ndgrid(linspace(0,1,15)); + + fi_ref(:,:,:,1) = sin(6*xi) .* cos(6*yi) .* sin(6*zi); + fi_ref(:,:,:,2) = cos(6*xi) .* sin(6*yi) .* cos(6*zi); + + % grid of observations + [x,y,z] = ndgrid(linspace(0,1,10)); + + on = numel(x); + var = 0.01 * ones(on,1); + f(:,:,:,1) = sin(6*x) .* cos(6*y) .* sin(6*z); + f(:,:,:,2) = cos(6*x) .* sin(6*y) .* cos(6*z); + + m = 20; + + [fi,vari] = optiminterp3(x,y,z,f,var,0.1,0.1,0.1,m,xi,yi,zi); + + + rms = sqrt(mean((fi_ref(:) - fi(:)).^2)); + + if (rms > 0.04) + error('unexpected large difference with reference field'); + end + + disp('OK'); + +catch + disp('failed'); + disp(lasterr); +end + +printf('Testing multiple 4D-optimal interpolation: '); + +try + clear fi_ref f + + % grid of background field + [xi,yi,zi,ti] = ndgrid(linspace(0,1,5)); + + fi_ref(:,:,:,:,1) = sin(6*xi) .* cos(6*yi) .* sin(6*zi) .* cos(6*ti); + fi_ref(:,:,:,:,2) = cos(6*xi) .* sin(6*yi) .* cos(6*zi) .* sin(6*ti); + + % grid of observations + [x,y,z,t] = ndgrid(linspace(0,1,10)); + x = x(:); + y = y(:); + z = z(:); + t = t(:); + + on = numel(x); + var = 0.01 * ones(on,1); + f(:,:,:,:,1) = sin(6*x) .* cos(6*y) .* sin(6*z) .* cos(6*t); + f(:,:,:,:,2) = cos(6*x) .* sin(6*y) .* cos(6*z) .* sin(6*t); + + m = 20; + + [fi,vari] = optiminterp4(x,y,z,t,f,var,0.1,0.1,0.1,0.1,m,xi,yi,zi,ti); + + rms = sqrt(mean((fi_ref(:) - fi(:)).^2)); + + if (rms > 0.04) + error('unexpected large difference with reference field'); + end + + disp('OK'); + +catch + disp('failed'); + disp(lasterr); +end +