matlab,interp1

时间:2012-10-21 15:50:52

标签: matlab

嗨我在使两个矢量大小相同时遇到了一些麻烦。基本上我有一个包含大量元素的向量和另一个包含较少元素的向量,这些元素对应于较大向量中的元素。 例如,如果我的短向量具有两个元素,则这些元素将对应于较大向量中的第一个和最后一个元素,如果三个元素在较小的向量中,则这些元素将对应于较大向量的第一个中间元素和最后一个元素。 我需要为较小的向量生成插值,以便它和较大的向量具有相同的大小。我正在尝试使用interp1功能,但无法找到使其工作的方法。 感谢

简化示例,我希望这更清楚,新的C_L应该仍然以0.0结尾并且仍然以1.4开始,然后必须插入第一批新数字,使它们介于1.4和1.6之间,下一组之间1.6和1.7,等等。

% For finding the lift curve slope across a wing
semispan = 8; % User inputs
C_L = [1.4,1.6,1.7,1.4,1.1,0.0]; % from a user input at stations which equally subdivide the wing.
x = 0:0.2:semispan

% C_L needs to be the same length as x
c_L = interp1(C_L,x,'linear','extrap') % Don't know how to do this part correctly.

plot(x,C_L)

1 个答案:

答案 0 :(得分:4)

解决方案是组成一个坐标向量,给出用户给出的测量位置,然后使用interp1

例如,假设您在点0,0.5和1处有三个测量值,那么坐标向量将为[0, 0.5, 1]。看起来您的测量值被定义为0semispan之间的等间距,在这种情况下,您可以使用linspace(0, semispan, N)在这些值之间创建N个等间距坐标的矢量(包括)

一旦获得了测量坐标和测量值,您就可以使用interp1在实际测量值之间插值。

这应该有效:

% For finding the lift curve slope across a wing
semispan = 8; % User inputs
C_L = [1.4,1.6,1.7,1.4,1.1,0.0]; % from a user input at stations which equally subdivide the wing.
C_L_coord = linspace(0, semispan, length(C_L));

x = 0:0.2:semispan

% C_L needs to be the same length as x
C_L_interpolated = interp1(C_L_coord, C_L, x);

plot(C_L_coord, C_L, x, C_L_interpolated);