Interpolating non-independent values
    18 views (last 30 days)
  
       Show older comments
    
I'm not really sure how to ask this in a concise enough way to find it elsewhere, so I'm just going to ask a new question.
I have two arrays of data, one with time and x values, and one with x and y values. I want to get the y values based on time, but the x values are not uniquely associated with y values.
tx = [0     0;
      0.1   1;
      0.2   2;
      0.3   3;
      0.4   2.5;
      0.5   2.8;
      0.6   2.6];
xy = [0     0;
      0.5   0.1;
      1     0.15;
      1.5   0.2;
      2.1   0.22;
      2.7   0.3;
      3     0.33;
      2.6   0.37;
      2.5   0.39;
      2.7   0.42;
      2.8   0.45;
      2.6   0.5];
% I can interpolate the axial data to time easily.
x_proper = interp1(tx(:,1),tx(:,2),[0:0.05:0.6]);
% Interpolating with interp1 to get y data limits the y values to <= 0.33,
% because it doesn't understand the bounce in x values.
Here are the assumptions that can be made about the two datasets:
1) tx and xy are applicable over the same total time. Therefore tx([1,end],1) == time of xy([1,end],:)
2) The pattern of x in tx and in xy are matching, and share the same peaks and troughs
3) Due to the time nature of the dataset, each unique (x,y) set will correspond to a unique time

8 Comments
  Matt J
      
      
 on 29 Mar 2021
				Here are the assumptions that can be made about the two datasets:
It's basically a 1D image registration problem. The question is, what will be your deformation model...
Answers (2)
  John D'Errico
      
      
 on 29 Mar 2021
        x is non-monotonic as a function of time. I have no idea what you mean by bounce, but I assume it indicates the failure to be monotonic.
You can predict x as a function of time. But now you want to predict y as a function of x? How should MATLAB (or anyone, including me) know how to predict y? x does not vary in any kind of increasing order, so which value of x should be used to predict y? Sorry, but you are asking for something that is not posible.
xy = [0     0;
      0.5   0.1;
      1     0.15;
      1.5   0.2;
      2.1   0.22;
      2.7   0.3;
      3     0.33;
      2.6   0.37;
      2.5   0.39;
      2.7   0.42;
      2.8   0.45;
      2.6   0.5];
plot(xy(:,1),xy(:,2),'o-')
xline(2.65);
Consider x = 2.65. Which of several (four possible) values of y should be predicted?Can the computer possibly know? Looking at it, I don't even know.
2 Comments
  John D'Errico
      
      
 on 29 Mar 2021
				
      Edited: John D'Errico
      
      
 on 29 Mar 2021
  
			Yes, you did communicate that. What you did not communicate is how you can possibly know from one curve what to do with the second.
  Matt J
      
      
 on 29 Mar 2021
        
      Edited: Matt J
      
      
 on 30 Mar 2021
  
      Assuming you had moderately tight upper and lower bounds U and L on the time increments t(j+1)-t(j) of the xy data set, I can sort of see you attempting an inverse problem to solve for the unknown t(j) as follows.
Fx=griddedInterpolant(tx(:,1), tx(:,2),'spline');
tstart=tx(1,1); 
tstop=tx(end,1);
xdata=xy(:,1);
ydata=xy(:,2);
N=numel(xdata)-2;
D=diff(speye(N),1,1);  %differencing matrix
Aineq=[D;-D]; 
bineq=max(0, repelem([U;-L],N-1) );
lb=repelem(tstart,N-1,1);
ub=repelem(tstop,N-1,1);
t0=linspace(tstart,tstop,N+2); 
 t0([1,end])=[];
t=fmincon(@(t) norm(Fx(t(:))-xdata).^2, t0,Aineq,bineq,[],[],lb,ub,[]);
t=[tstart,t(:).',tstop];
Fy=griddedInterpolant(t,ydata,'spline');
0 Comments
See Also
Categories
				Find more on Creating, Deleting, and Querying Graphics Objects in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


