Вычислить наиболее быстро растущие / уменьшающиеся части в серии значений - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть ряд нанесенных значений (х, у).Я ищу способ идентифицировать сегменты {(Xi, Yi), (Xi + 1, Yi + 1)} с самой быстрой скоростью роста / снижения.Plotted values В примере изображения эти сегменты помечены и имеют следующие координаты X (516, 550) для самого быстрорастущего сегмента и (620, 635) для самого быстро убывающего сегмента.Как я могу определить алгоритм для этого?

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Рассчитайте наклон каждого отрезка.Следите за максимальными и минимальными значениями уклона.Они будут соответствовать сегментам с наибольшей скоростью увеличения и наибольшей скоростью уменьшения соответственно.

0 голосов
/ 30 ноября 2011

Следующий пример кода должен предоставить вам путь к решению вашей проблемы:

%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');

Я создал игрушечный набор данных и нашел точку, где у изменяется больше всего. Обратите внимание, что точки с равным интервалом (x увеличивается линейно) предполагаются здесь. Распределены ли ваши данные равномерно?

Результирующий участок: enter image description here

...