我有两个数组
x = [0 9.8312 77.1256 117.9810 99.9979];
y = [0 2.7545 4.0433 5.3763 5.0504];
figure; plot(x, y)
我想制作更多x
和y
的样本,然后插入两个数组。我试过这段代码
xi =min(x):.1:max(x);
yi = interp1(x,y,xi);
figure; plot(xi, yi)
但是轨迹与之前的情节不同。这是因为xi
与x
的波动不同。我应该如何用与原始轨迹相同的轨迹插入两个阵列?
答案 0 :(得分:4)
这是一个问题,因为在插值时,MATLAB将忽略您在点中提供的顺序,而只是根据它们的x位置对它们进行排序。
不是在x / y坐标中进行插值,而是使用表示线段的累积弧长的参数,并使用 来插值x和y坐标。这将为您提供一个尊重顺序的插值,即使对于同一个x坐标的多个值,也能保证单调性。
% 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);