# Interpolating non-independent values

3 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

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

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!