reverse-shooting

Matlab scripts for reverse shooting
Log | Files | Refs | README

interplin3.m (1484B)


      1 function ydata=interplin3(x,missval,NotStartEnd)
      2 
      3 % interplin3
      4 %
      5 %   Simple linear interpolation -- replaces NaNs (or missval)
      6 %
      7 %    x=initial vector/matrix (will interpolate each column)
      8 %    missval = (optional) denotes "missing value", default is NaN
      9 %    Column by column
     10 %
     11 %    If "NotStartEnd" is absent or zero, missing values at beginning or end
     12 %    will be replaced with first/last value.
     13 %  
     14 %    If NotStartEnd==1, then leaves missing values alone at beginning and end
     15 
     16 if exist('NotStartEnd')==0;
     17   NotStartEnd=0;
     18 end;
     19 
     20 if exist('missval')==1;  % If some number other than NaN denotes missing value
     21   x(x==missval)=NaN;      % replace it with NaN
     22 end;
     23 
     24 [T K]=size(x);
     25 if T==1; x=x'; T=length(x); end;  % row vector ==> column vector
     26 
     27 xdata=x;
     28 
     29 for c=1:K;  % column by column
     30   x=xdata(:,c);
     31   if ~all(isnan(x)); % Skip column if all values are missing
     32     y=x;
     33     i0=find(~isnan(x));
     34     iT=i0(length(i0)); 			% The last valid position
     35     i0=i0(1); 				% The first valid entry
     36 
     37     for i=i0:(iT-1);     % position in x
     38       if isnan(y(i));
     39         notnan=find(~isnan(x((i+1):iT)));  % Next non NaN
     40         notnan=notnan(1)+i;
     41         points=notnan-i;
     42         slope=x(notnan)-x(i-1);
     43         dx=slope/(points+1);
     44         dx=(1:points)'*dx;
     45         y(i:(notnan-1))=dx+x(i-1);
     46       end;
     47     end;
     48 
     49     ydata(:,c)=y;
     50     if ~NotStartEnd;
     51       ydata(1:(i0-1),c)=y(i0);  % Missing at beginning
     52       ydata((iT+1):end,c)=y(iT);  % Missing at beginning
     53     end;
     54   end;
     55 end;