如何在matlab中插入波动的矢量?

时间:2016-12-28 14:01:28

标签: matlab interpolation

我有两个数组

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

我想制作更多xy的样本,然后插入两个数组。我试过这段代码

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

enter image description here

但是轨迹与之前的情节不同。这是因为xix的波动不同。我应该如何用与原始轨迹相同的轨迹插入两个阵列?

1 个答案:

答案 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);