我尝试使用matlab(和interp1函数)在一些已经存在的曲线的间隙中插入曲线。
开始编辑1
我已经获得了通过转弯曲线的多次仿真获得的5转转矩曲线的数据。由于仿真时间很宝贵,我想通过对曲线进行插值来节省时间,以“填充”现有曲线之间的间隙。
我希望形成以下内容:
下面是我的更多想法。
编辑结束1
我试图按照问题Interpolation between two curves (matlab)中的步骤进行操作,但是它似乎不适用于我的代码。我不确定代码是否真正适用,因为曲线可能重叠...
我尝试通过上面的链接编辑代码,如下所示:
% Save the data in one array each. The original data is stored in the
% arrays "x/yOriginal" row-wise.
curve1_data = [xOriginal(:,1) yOriginal(:,1)];
curve2_data = [xOriginal(:,2) yOriginal(:,2)];
% This was to try if the code from the link works
yy = [0:1:60];
xx1 = interp1(curve1_data(:,2),curve1_data(:,1),yy,'spline');
xx2 = interp1(curve2_data(:,2),curve2_data(:,1),yy,'spline');
m = 3; % Curve_Offset
mm(:,m) = xx1 + (xx2-xx1)*(m/(8750-5000));
% With the following I tried to interpolate over x
xx = (xOriginal(1,1):1:xOriginal(1,2));
yy1 = interp1(curve1_data(:,1),curve1_data(:,2),xx,'spline');
yy2 = interp1(curve2_data(:,1),curve2_data(:,2),xx,'spline');
m = 3; % Curve_Offset
% From the original code:
mm(:,m) = xx1 + (xx2-xx1)*(m/(8750-5000));
% Interpolation over x
yINT = yy1 + (yy2-yy1)*(m/8750-5000);
所有插值技术都无效,y值要么为90%负(使用链接中的代码),要么太高(对于x进行插值为10e8)。
我期望的是,它创建的曲线的斜度比“左侧”的曲线略小,但比“右侧”的曲线略陡。
我的进一步想法:
现有曲线是大型3维数组的产物。即可能是插入数组并然后“读出” Torque-over-rpm-Curves的更多方法。另一方面,我看不到在两个1001×7001×5数组之间进行插值的方法... 此外,对于程序的后续步骤,曲线插值必须非常精细(必须在两条现有曲线之间使用1条以上的插值曲线),这使问题更加棘手。
答案 0 :(得分:0)
如果我理解正确,则使用以下方式生成图:
plot(xOriginal(:,1),yOriginal(:,1))
plot(xOriginal(:,2),yOriginal(:,2))
% ...
如果是这样,您可以使用绘制一条中间曲线
plot((xOriginal(:,1) + xOriginal(:,2))/2, (yOriginal(:,1) + yOriginal(:,2))/2)
也就是说,每对坐标之间的平均值形成一条曲线,该曲线恰好位于两条原始曲线之间。
使用加权平均值生成更多这些曲线。这是线性插值。
d = 0.2;
plot(d*xOriginal(:,1) + (1-d)*xOriginal(:,2), d*yOriginal(:,1) + (1-d)*yOriginal(:,2))
设置d = 0.5
后,我们回到上面的一半情况。
示例:
xOriginal(:,1) = linspace(0.2,0.5,100);
yOriginal(:,1) = 3 * cos(xOriginal(:,1)*10-2.5) + 3;
xOriginal(:,2) = linspace(0.6,0.8,100);
yOriginal(:,2) = cos(xOriginal(:,2)*20-13.5) + 1;
clf; hold on
plot(xOriginal(:,1),yOriginal(:,1))
plot(xOriginal(:,2),yOriginal(:,2))
plot((xOriginal(:,1)+xOriginal(:,2))/2,(yOriginal(:,1)+yOriginal(:,2))/2)
(内插线为橙色)