计算一系列绘图值中最快的增长/降低部分

时间:2011-11-29 18:30:34

标签: matlab polyline

我有一系列绘制值(x,y)。我正在寻找一种方法来识别具有增长/降低速度最快的段{(Xi,Yi),(Xi + 1,Yi + 1)}。 Plotted values 在示例图像中,这些片段被标记并且具有用于最快增加片段的以下X坐标(516,550)和用于最快减小片段的(620,635)。如何定义算法来执行此操作?

2 个答案:

答案 0 :(得分:2)

计算每个线段的斜率。跟踪斜率的最大值和最小值。这些将分别对应于具有最大增长率和最大减少率的分段。

答案 1 :(得分:0)

以下示例代码应为您提供解决问题的方法:

%Create x and y values
x = 1:0.5:20;
y = real((x-15).^2.2.*sin(x)-0.5*x);

%Plot
f1 = figure(1);clf
plot(x,y)

%Calculate derivative
dx = abs(conv(y,[1 -1],'same'));

%Find maximum change
[maxSlope idx] = find(dx==max(dx));

%Display derivative and maximum change points
hold on
plot(x+0.5,dx,'g')
plot(x(idx+1),y(idx+1),'*r')
grid on

legend('Data series','abs(Derivative)','Point of maximum change');

我创建了一个玩具数据集,并找到了y变化最大的点。注意,这里假设等间隔点(x线性增加)。您的数据是否均匀分布?

结果情节: enter image description here