matlab - 可能重叠的曲线之间的插值
问题描述
我尝试使用 matlab(和 interp1 函数)在一些已经存在的曲线的间隙中插入曲线。
编辑开始 1
我已经有了 5 Torque over rpm 曲线的数据,我通过对每条曲线的多次模拟获得了这些数据。由于模拟时间很宝贵,我想通过插值曲线来节省时间,这些曲线“填补了现有曲线之间的空白”。
我正在寻找形成以下内容:
下面对我的进一步想法。
编辑结束 1
我尝试按照两条曲线之间的插值线程(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% 为负(使用链接中的代码),要么太高(10e8,插值超过 x)。
我所期望的是,它创建的曲线比“左侧”的曲线更陡峭,但比“右侧”的曲线更陡峭。
我进一步的想法:
现有曲线是大 3 维数组的产物。即,它可能是对数组进行插值然后“读出”扭矩在 rpm 曲线上的更多方法。另一方面,我看不到在两个 1001×7001×5 数组之间进行插值的方法......此外,对于程序的下一步,曲线插值需要非常好(它有必要在两条现有曲线之间有超过 1 条插值曲线),这使问题变得更加困难。
解决方案
如果我理解正确,情节是这样生成的:
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)
(内插线为橙色)
推荐阅读
- r - 在模块服务器函数中访问闪亮的模块 ID
- php - 为什么我收到此错误“未捕获的异常 'Firebase\JWT\SignatureInvalidException' 并带有消息'签名验证失败'”
- google-apps-script - 特定电子邮件的 GmailApp 或强制使用已登录的电子邮件?
- netlogo - 创建一个新项目并将其添加到我的邻居列表中
- javascript - 使用 Set 将对象的值数组减少为不重复的数组
- java - ToolProvider.getSystemJavaCompiler() --- 它返回什么,什么时候起作用?
- sql - SQL (String+Int) 变量插入循环
- flutter - Flutter 将两个文本在开头垂直对齐
- c# - 参数组合无效或不完整。\r\n参数名称: tagObject VSTS Git API
- facebook-graph-api - 视频允许页面交叉发布需要在实时模式下获得 publish_pages 权限