嗨我在使两个矢量大小相同时遇到了一些麻烦。基本上我有一个包含大量元素的向量和另一个包含较少元素的向量,这些元素对应于较大向量中的元素。 例如,如果我的短向量具有两个元素,则这些元素将对应于较大向量中的第一个和最后一个元素,如果三个元素在较小的向量中,则这些元素将对应于较大向量的第一个中间元素和最后一个元素。 我需要为较小的向量生成插值,以便它和较大的向量具有相同的大小。我正在尝试使用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)
答案 0 :(得分:4)
解决方案是组成一个坐标向量,给出用户给出的测量位置,然后使用interp1
。
例如,假设您在点0,0.5和1处有三个测量值,那么坐标向量将为[0, 0.5, 1]
。看起来您的测量值被定义为0
和semispan
之间的等间距,在这种情况下,您可以使用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);