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

У меня есть ряд нанесенных значений (x, y). Я ищу способ классификации каждого сегмента {(Xi, Yi), (Xi+1, Yi+1)} по самым быстрым и по наибольшему растущему / убывающему наклону. Plotted values

В примере изображения сегмент (620, 635) имеет наклон больше, чем сегмент (516, 550), но второй сегмент длиннее первого. Таким образом, в этом сегменте диаграммы (516, 550) будет первым, потому что в настоящее время очень высокий уклон, и он действительно длинный. Второе место для сегмента (620, 635), у которого действительно высокий уклон, но длина меньше, чем у предыдущего сегмента. Как я могу вычислить это в Matlab?

1 Ответ

1 голос
/ 01 декабря 2011

Учитывая два вектора x и y, определяющих ваши линейные сегменты, длина каждого сегмента составляет:

sqrt(diff(x).^2 + diff(y).^2);

и абсолютное значение наклона каждого сегмента (так как это, кажется,то, что вы используете):

abs(diff(y)./diff(x));

Теперь объедините эти два вместе некоторым подходящим способом, чтобы получить метрику, в зависимости от важности каждого из них для вашего приложения.Например, присваивая удвоенный вес наклону:

metric = sqrt(diff(x).^2 + diff(y).^2) + 2*abs(diff(y)./diff(x));

Затем сортируйте по этой метрике:

[~, IX] = sort(metric, 'descend');

IX(1) будет индексом в вектор сегментов наклонасегмент с наибольшим значением выбранной вами метрики.Его конечными точками являются [x(IX(1)), y(IX(1))] и [x(IX(1)+1), y(IX(1)+1)].Вы можете использовать произвольно сложную функцию уклонов и длин в качестве метрики, если это важно для вашего приложения.Если в вашем приложении возможно, чтобы два значения x были идентичными, вам необходимо тщательно обработать NaN s!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...