X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Foptiminterp-0.3.3%2Foptiminterpn.m;fp=octave_packages%2Foptiminterp-0.3.3%2Foptiminterpn.m;h=aa6da04ecf58eaee62c51b550e14c3e8370cd482;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/optiminterp-0.3.3/optiminterpn.m b/octave_packages/optiminterp-0.3.3/optiminterpn.m new file mode 100644 index 0000000..aa6da04 --- /dev/null +++ b/octave_packages/optiminterp-0.3.3/optiminterpn.m @@ -0,0 +1,103 @@ +## Copyright (C) 2008 Alexander Barth +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; If not, see . + +## -*- texinfo -*- +## @deftypefn {Loadable Function} {[@var{fi},@var{vari}] = } optiminterpn(@var{x},@var{y},@var{...},@var{f},@var{var},@var{lenx},@var{leny},@var{...},@var{m},@var{xi},@var{yi},@var{...}) +## Performs a local nD-optimal interpolation (objective analysis). +## +## Every elements in @var{f} corresponds to a data point (observation) +## at location @var{x},@var{y},@var{...} with the error variance @var{var}. +## +## @var{lenx},@var{leny},@var{...} are correlation length in x-direction +## y-direction,... respectively. +## @var{m} represents the number of influential points. +## +## @var{xi},@var{yi},@var{...} are the data points where the field is +## interpolated. @var{fi} is the interpolated field and @var{vari} is +## its error variance. +## +## The background field of the optimal interpolation is zero. +## For a different background field, the background field +## must be subtracted from the observation, the difference +## is mapped by OI onto the background grid and finally the +## background is added back to the interpolated field. +## The error variance of the background field is assumed to +## have a error variance of one. +## @end deftypefn + +## Copyright (C) 2008, Alexander Barth +## Author: Alexander Barth + +# {[@var{fi},@var{vari}] = } optiminterpn(@var{x},@var{y},@var{...},@var{f},@var{var},@var{lenx},@var{leny},@var{len...},@var{m},@var{xi},@var{yi},@var{...}) + +function [fi,vari] = optiminterpn(varargin) + +if nargin < 6 || mod(nargin-3,3) ~= 0 + error('optiminterpn: wrong number of arguments'); +end + +n = (nargin-3)/3; + +x = varargin{1}; +xi = varargin{2*n+4}; +on = numel(varargin{1}); +gsz = size(varargin{2*n+4}); + +for i=1:n + tmp = varargin{i}; + + if on ~= numel(tmp) + error('optiminterpn: x, y,... must have the same number of elements'); + end + + ox(:,i) = tmp(:); + + len(i) = varargin{n+i+2}; + tmp = varargin{2*n+3+i}; + + if (numel(tmp) ~= prod(gsz)) + error('optiminterpn: xi, yi, ... must have the same number of elements'); + end + + gx(:,i) = tmp(:); +end + +f = varargin{n+1}; +var = varargin{n+2}; + +m = varargin{2*n+3}; + +if (isscalar(var)) + var = var*ones(size(x)); +end + +if isvector(f) && size(f,1) == 1 + f = f'; +end + +% is this correct? +nf = size(f,n+1); + +if (on*nf ~= numel(f) && on ~= numel(var)) + error('optiminterpn: x,y,...,var must have the same number of elements'); +end + +f=reshape(f,[on nf]); + +%whos ox f var len m gx +[fi,vari] = optiminterp(ox,f,var,len,m,gx); + +fi = reshape(fi,[gsz nf]); +vari = reshape(vari,gsz);