Є одновимірний масив (розмірністю в кілька тисяч елементів) речових числі. Якщо побудувати графік за цими значеннями, то видно що є деяка флуктуація (розкид) значень (з нечисленними різкими піками).
Приклад (для наочності, інтервали вимірів рівномірні):
- показання температури
- рівень освітленості
- Заряд батареї
- рівня рідини
- і т.д.
вих. 10 12 15 40 17 16 12 10 22 12 14 15 14 10 12
згладжені.
10 13 15 16 16 14 12 16 14 13 14 14 13 11 12
Потрібно не збільшуючи число точок згладити свідчення:
(Приблизний нарис: "згладжена лінія" - свідчення без різких стрибків)
Ясна річ, що для цього потрібна апроксимація даних, але я вже кілька днів важко привести знайдений алгоритм апроксимації кривої Безьє до необхідного виду:
де, p1 згладжувати проміжне значення між двома своїми сусідами, t = 0.5 (по ідеї саме при 0.5 повинна братися саме проміжне значення).
Потім Знайшов алгоритм тут. а сам він викладений тут.
Але даний алгоритм не підходить тому що працюємо максимум на 32 точках, та й з факторіалами він занадто довго на JS буде виконуватися, якщо взагалі буде. А записати алгоритм без факториалов (це ніби можливо, якщо вірити формулами з Вікіпедії) у мене не виходить.
Ще можна використовувати наведену мною формулу і пройтися нею по ряду, але не думаю що це хороша ідея. Якби можна було використовувати за раз більше 32 точок (хоча б 100), то справа була б веселіше. Але я просто не знаю як це записати формулою по якій вже писати алгоритм.
Хто-небудь знає як в числовому ряду згладить "шум" і "піки"?
Б'юся вже не один день але щось виходить визначитися з алгоритмом.
Я в математиці не дуже, тому не можу продертися через теорію до формули.
Сподіваюся хтось мені з цим допоможе.
Пробував використовувати "ковзне середнє" (за порадою @lampa), але дані сильно спотворюються. Ось код (начебто не накосячілі, але хто його знає):
Але в результаті все одно зупинився на вихідному варіанті - згладжування Безьє (квадратичної кривої):
4-ри проходу дають задовільний результат.
PS Якщо не буде варіанту краще, то залишуся на цьому варіанті.
Коротше дивись, що я тут придумав: