如何使一个图与另一个图的顶部相切?
How to make a graph tangent to tops of another graph?
我有一张图表:速度与汽车转速的函数关系。实际图由四个子图组成(汽车的 4 个档位各一个)。我将那些 sub-graphs 与 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的标准三次样条插值;根据数据的属性,其他 interpolation functions 可能会提供更好的结果。特别是,如果您不仅知道切点的位置而且知道切线斜率,则可以使用该信息对分段多项式插值施加约束。
我有一张图表:速度与汽车转速的函数关系。实际图由四个子图组成(汽车的 4 个档位各一个)。我将那些 sub-graphs 与 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的标准三次样条插值;根据数据的属性,其他 interpolation functions 可能会提供更好的结果。特别是,如果您不仅知道切点的位置而且知道切线斜率,则可以使用该信息对分段多项式插值施加约束。