Определить, где изменяется наклон линии (алгоритм) - PullRequest
4 голосов
/ 24 июня 2010

Если вы нанесете числа ниже, вы получите «улыбку волатильности»: числа следуют за одним линейным уклоном (левый уклон), а затем меняются на следующий другой линейный уклон (правый уклон).

У меня есть несколько таких наборов данных, и я хочу знать, где уклон изменения. Примечания:

  • Изменение наклона обычно происходит между точками

  • Я не знаю, сколько точек имеют левый уклон и сколько правый склон.

  • Нет гарантии относительно знака / величины либо склона, либо соотношение между склонами. Каждый наклон может быть отрицательным или положительный, и любой из них может быть больше, чем другой.

  • Если склоны идентичны, программа должна сообщить об этом как особый случай.

0.1613 
0.1596 
0.1579 
0.1561 
0.1544 
0.1528 
0.1511 
0.1495 
0.1478 
0.1462 
0.1446 
0.1431 
0.1415 
0.1416 
0.1418 
0.1419 
0.1421 
0.1422 
0.1424 
0.1425 
0.1426 
0.1428 
0.1429 
0.1431 

Ответы [ 5 ]

5 голосов
/ 24 июня 2010
Slope(X) = f(x) - f(x-1)
Slope2(x) = Slope(x) - Slope(x-1)

тебе нужен второй. Показывает скорость изменения самого склона. (ускорение с точки зрения физики) Я построил оба графика в Excel и проверил, что у меня есть:

альтернативный текст http://img691.imageshack.us/img691/6716/slopes.png

Вы видите пик slope2? это индикатор, и его легко найти.

4 голосов
/ 24 июня 2010

Создайте новый список чисел, который является разницей последовательных пар в этом списке. Эти различия представляют собой «уклон» от одной точки к другой. Для постоянных уклонов эти числа будут одинаковыми. Это меняет проблему от обнаружения изменения наклона до обнаружения изменения уровня.

1 голос
/ 24 июня 2010

Производная снова наносит удар.В случае, если вы или кто-либо еще не осознавали этого.

Базовый текст по исчислению должен помочь вам проанализировать ваши функции.

Производные дают наклон касательной линии функции.

Интегралы дают площадь под линией.

Как следует из предыдущего ответа, если f (x) - это «Положение», то производная от f [f '(x)] - это скорость,производной от этого [f '' (x)] является ускорение.

Вы также можете работать в обратном направлении по данным, представляющим f '' (x), и вычислять скорость и положение по времени.

0 голосов
/ 24 июня 2010

Проблема состоит из двух частей:

  1. Разделить точки данных на два набора; те, что лежат на левой линии, и те, которые лежат на правой.
  2. Проведите линию через каждый из двух наборов.

Вторая проблема проста и имеет стандартное решение: выровнять линию, используя линейные наименьшие квадраты.

Способ решения первой проблемы будет зависеть от специфики вашего приложения. Вот один очень простой алгоритм, который будет хорошо работать при условии, что число точек данных, n, не слишком велико: просто сделайте линейные наименьшие квадраты для первых точек i и последних точек n для i от 2 до n-2, и оставьте единицу с наименьшей суммой квадратов невязок.

Если n очень велико и вышеупомянутый подход неэффективен, вам придется взглянуть на дискретные вторые производные, как это предлагается в других опубликованных ответах. Обратите внимание, что в отличие от наименьших квадратов аппроксимации производных чрезвычайно чувствительны даже к небольшому количеству шума.

Как только у вас есть две подходящие линии, вы можете использовать некоторые эвристические методы (т. Е. Уклоны различаются менее чем на некоторое отклонение), чтобы определить, имеется ли у вас однострочный специальный случай.

0 голосов
/ 24 июня 2010

Вы должны определить, что означают одинаковые уклоны, поскольку данные округляются / усекаются. Степень разницы слишком велика?

Если есть только одно реальное изменение наклона, и это может произойти между точками, то есть три случая:

  1. Наклон значительно меняется два раза подряд. Например, если данные равны 6, 5, 4, 3, 3, 4, 5, 6, 7, наклоны становятся равными -1, -1, -1, 0, 1, 1, 1, 1. Это означает, что реальное изменение наклона происходит между точками промежуточного наклона, нулем в примере или между 3. Чтобы получить точку, где наклон действительно изменился, необходимо получить точку, где линия, определяемая двумя последними точками (в примере 4, 3), пересекает линию, определенную следующими двумя точками (в примере 3, 4 ). Пример дает решение [4.5, 2.5].

  2. Наклон значительно изменяется только один раз. Например, если данные 7, 6, 5, 4, 3, 4, 5, 6, 7, уклоны становятся -1, -1, -1, -1, 1, 1, 1, 1. Это означает, что что реальное изменение уклона находится в точке, совпадающей с обоими уклонами (в примере 3).

  3. Наклон существенно не изменяется. Это особый случай, который вы упомянули.

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