Matlab 如何使一个图与另一个图的顶部相切?

Matlab 如何使一个图与另一个图的顶部相切?,matlab,graph,Matlab,Graph,我有一张图表:速度是汽车转速的函数。实际图形由四个子图组成,汽车的四个档位各有一个子图。我将这些子图与for循环和一些if语句连接起来。结果图如下所示 我需要添加一个与所有图的顶部相切的图,比如红线。最终结果如下所示: 现在还没有红线,显然 这些是切线与图形接触的坐标:17、5130.36、28、3117.98、39、2239.37、51、1714.72。因为您已经知道切点 x = [17 28 39 51]; y = [5130.36 3117.98 2239.37 1714.72]; plo

我有一张图表:速度是汽车转速的函数。实际图形由四个子图组成,汽车的四个档位各有一个子图。我将这些子图与for循环和一些if语句连接起来。结果图如下所示

我需要添加一个与所有图的顶部相切的图,比如红线。最终结果如下所示:

现在还没有红线,显然


这些是切线与图形接触的坐标:17、5130.36、28、3117.98、39、2239.37、51、1714.72。

因为您已经知道切点

x = [17 28 39 51];
y = [5130.36 3117.98 2239.37 1714.72];
plot(x, y, 'b.')
解决方案是一个简单的插值

xs = linspace(min(x), max(x), 100);
ys = spline(x, y, xs);
hold on
plot(xs, ys, 'r')
结果是:


我在这里使用了Matlab的标准三次样条插值;根据数据的属性,其他方法可能会提供更好的结果。特别是,如果您不仅知道切点的位置,而且还知道切线斜率,则可以使用该信息对分段多项式插值施加约束。

如果您用肉眼求解曲线,那么机器很难做到这一点。如果你选择曲线的峰值,你可以使用多项式解算器来找到红色曲线?你也可以在数据的导数中寻找剧烈的变化来找到这些峰值?@Ben:我对Matlabor高等数学还没有真正的经验,我还是个学生..:我读过matlabs peaks函数,我能用peaks创建这个图吗?我已经对一些不太漂亮的东西感到满意了,比如一个有三个弯折的图形,如果它仍然触及所有的凸起,对我来说就足够了。没有峰值只会返回一个漂亮的2D网格。尝试使用根和它接触的4个点来生成一个四阶多项式。然后你可以为直线创建数据并绘制它。我想你要找的是某种形式的曲线,你想要的是曲线。看见通常,所示方法用于零左右的振荡信号,因此我不知道它对您的效果如何,您可能需要改变曲线。如果您使用有关系统和插值的知识,则可以使用其他方法。是的!这就是诀窍。至少,当这些坐标为真时,它适用于这种特殊情况。重点是,我给出的坐标来源于早期的计算。如果我在一辆装有不同变速箱的汽车上填写其他数据/变量,那么在计算中它还不起作用。但我想在你的帮助下我自己也能做到。谢谢在不了解更多细节的情况下,恐怕不可能提供更笼统的答案。一个人需要完整的基础数据,最好是一辆以上的车。对不起,我的意思是,我想我可以通过你在帖子中给我的帮助实现这一点。我知道我说的有点模棱两可。再次感谢