X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Foptiminterp-0.3.3%2Ftest_optiminterp.m;fp=octave_packages%2Foptiminterp-0.3.3%2Ftest_optiminterp.m;h=52b9945fd9100b1a5ea21a683a359c9572dd8182;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/optiminterp-0.3.3/test_optiminterp.m b/octave_packages/optiminterp-0.3.3/test_optiminterp.m new file mode 100644 index 0000000..52b9945 --- /dev/null +++ b/octave_packages/optiminterp-0.3.3/test_optiminterp.m @@ -0,0 +1,147 @@ +% 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 + +more off + +printf('Testing 1D-optimal interpolation: '); + +try + % grid of background field + xi = linspace(0,1,50); + fi_ref = sin( xi*6 ); + + % grid of observations + x = linspace(0,1,20); + + on = numel(x); + var = 0.01 * ones(on,1); + f = sin( 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 2D-optimal interpolation: '); + +try + % grid of background field + [xi,yi] = ndgrid(linspace(0,1,30)); + fi_ref = sin( xi*6 ) .* cos( yi*6); + + % grid of observations + [x,y] = ndgrid(linspace(0,1,20)); + x = x(:); + y = y(:); + + on = numel(x); + var = 0.01 * ones(on,1); + f = sin( x*6 ) .* cos( 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 3D-optimal interpolation: '); + +try + % grid of background field + [xi,yi,zi] = ndgrid(linspace(0,1,15)); + fi_ref = sin(6*xi) .* cos(6*yi) .* sin(6*zi); + + % grid of observations + [x,y,z] = ndgrid(linspace(0,1,10)); + x = x(:); + y = y(:); + z = z(:); + + on = numel(x); + var = 0.01 * ones(on,1); + f = sin(6*x) .* cos(6*y) .* sin(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 4D-optimal interpolation: '); + +try + % grid of background field + [xi,yi,zi,ti] = ndgrid(linspace(0,1,5)); + fi_ref = sin(6*xi) .* cos(6*yi) .* sin(6*zi) .* cos(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 = sin(6*x) .* cos(6*y) .* sin(6*z) .* cos(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 +