Logo Search packages:      
Sourcecode: octave-optiminterp version File versions  Download package

test_optiminterp_mult.m

% 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


Generated by  Doxygen 1.6.0   Back to index