Ehsan
Ehsan

Reputation: 517

how to interpolate a fluctuated vector in matlab?

I have two arrays

x = [0    9.8312   77.1256  117.9810   99.9979];
y = [0    2.7545    4.0433    5.3763    5.0504];
figure; plot(x, y)

enter image description here

I want to make more samples of x and y then I interpolated both arrays. I tried this code

xi =min(x):.1:max(x);
yi = interp1(x,y,xi);
figure; plot(xi, yi)

enter image description here

but the trajectory is not same as previous plot. Its because the xi is not fluctuating same as x. How should I interpolate both arrays with same trajectory as original one?

Upvotes: 2

Views: 123

Answers (1)

Suever
Suever

Reputation: 65460

This is an issue because when interpolating, MATLAB is going to ignore the order that you feed in the points and instead just sort them based upon their x location.

Rather than interpolating in x/y coordinates, you can instead use a parameter which represents the cumulative arc length of the line segments and use that to interpolate both the x and y coordinates. This will provide you with an interpolant that respects the order and guarantees monotonicity even for multiple values at the same x coordinate.

% Compute the distance between all points.
distances = sqrt(diff(x).^2 + diff(y).^2);

% Compute the cumulative arclength
t = cumsum([0 distances]);

% Determine the arclengths to interpolate at
tt = linspace(t(1), t(end), 1000);

% Now interpolate x and y at these locations
xi = interp1(t, x, tt);
yi = interp1(t, y, tt);

Upvotes: 4

Related Questions