2010-06-24 2 views
4

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

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

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

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

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

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

 
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 

ответ

4
Slope(X) = f(x) - f(x-1) 
Slope2(x) = Slope(x) - Slope(x-1) 

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

alt text http://img691.imageshack.us/img691/6716/slopes.png

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

+0

Вы действительно хотите, чтобы 2 точки поменялись местами? Что-то вроде: Slope (x) = f (x) - f (x-1) и такая же настройка для вычисления Slope2? Вы можете понять это из графика; когда синий график наклона поднимается, красный Slope2 падает. – Dan

+0

@ Да, вы на 100% стройте, но для slope2 мы получаем тот же график, так что это не очень серьезная ошибка :) – Andrey

4

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

0

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

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

  1. Наклон существенно меняет два раза подряд. Например, если данные 6, 5, 4, 3, 3, 4, 5, 6, 7, наклоны становятся -1, -1, -1, 0, 1, 1, 1, 1. Это означает, что реальное изменение наклона находится между точками промежуточного наклона, нулем в примере или между тремя. Чтобы получить точную информацию о том, где наклон действительно изменился, вам нужно получить точку, где линия, определяемая двумя последними точками (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. Это означает что реальное изменение наклона находится в точке coomon к обеим склонам (3 в примере).

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

1

Производное удары снова. Если вы или кто-то еще этого не понимаете.

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

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

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

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

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

0

Есть две части проблемы:

  1. Partition точки данных на две группы; те, которые лежат на левой линии, и те, которые лежат справа.
  2. Установите линию через каждый из двух комплектов.

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

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

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

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

Смежные вопросы