Функция интерполирующая данные с использованием двух чисел в каждой точке

Содержание
  1. Интерполирующая функция
  2. Пример
  3. Смотреть что такое «Интерполирующая функция» в других словарях:
  4. Как интерполировать данные временных рядов в Python Pandas
  5. Подготовка данных и первоначальная визуализация
  6. интерполирование
  7. означать()
  8. Визуализация результатов
  9. Резюме
  10. Интерполировать в Excel
  11. Введение в интерполяцию в Excel
  12. Примеры для интерполяции в Excel
  13. Что нужно помнить о интерполяции в Excel
  14. Рекомендуемые статьи
  15. Инструменты сайта
  16. Основное
  17. Навигация
  18. Информация
  19. Действия
  20. Содержание
  21. Интерполяция
  22. Полиномиальная интерполяция
  23. Интерполяционый полином в форме Лагранжа
  24. Рекурсивное вычисление коэффициентов
  25. Интерполяционный полином в форме Ньютона
  26. Применение полиномиальной интерполяции в задаче о разделении секрета
  27. Обратная интерполяция
  28. Интерполяционный полином Эрмита
  29. Рациональная интерполяция
  30. Тригонометрическая интерполяция
  31. Интерполяция суммами экспонент
  32. Аппроксимация
  33. Аппроксимация в случае недостоверности данных
  34. Метод наименьших квадратов
  35. Многомерная интерполяция
  36. Сложности: парадокс Крамера
  37. Прямоугольная сетка
  38. Задачи
  39. Источники
  40. Интерполяция данных: соединяем точки так, чтобы было красиво
  41. Немного матчасти
  42. Ставим опыты
  43. Думаем и экспериментируем
  44. А как люди-то делают?

Интерполирующая функция

О способе нахождения промежуточных значений см. Интерполяция.

Интерполянт или интерполирующая функция — в вычислительной математике это функция, которая строится по значениям в некоторых точках. Эта функция может быть использована для того, чтобы приблизить значение новых точек.

Пример

Пусть будет известна функция 404849620705ac4aa51eca6a283b4ed8и 8642f70920bf29f5e86cefccecc14778, а также

b857476c5f1a0a856d0df493708f96e8 0901ce0cbf8a3b8dda944e9d1ea7ce69

Проведя простую линейную интерполяцию мы находим интерполянт 0be7555a4a4967cb39a53624642583a4и 47f55092d7fcc857e51a971dc34886b3:

b715f014472c9752b14971c038b99b10

с помощью которого мы можем аппроксимировать значения между 0 и 1. Например 10f75f7cf4ccfe5649aa3d40b35da8b9.

Смотреть что такое «Интерполирующая функция» в других словарях:

Функция sinc(x) — Функция sinc(x) … Википедия

Sinc — Графики нормированной и ненор … Википедия

Интерполянт — О способе нахождения промежуточных значений см. Интерполяция. Интерполянт или интерполирующая функция в вычислительной математике это функция, которая строится по значениям в некоторых точках. Эта функция может быть использована для того,… … Википедия

Рациональная интерполяция — (интерполяция рациональными функциями) представление интерполируемой функции (точнее говоря, ряда табличных значений) в виде отношения двух полиномов. Ряд функций, плохо интерполируемых полиномиальными методами, удаётся хорошо приблизить… … Википедия

Источник

Как интерполировать данные временных рядов в Python Pandas

Дата публикации Jun 11, 2019

0 521407 503918

Примечание: Pandas версии 0.20.1 (май 2017 г.) изменил API группировки. Этот пост отражает функциональность обновленной версии.

Подготовка данных и первоначальная визуализация

Сначала мы генерируем кадр данных pandas df0 с некоторыми тестовыми данными. Мы создаем фиктивный набор данных, содержащий два дома, и используем функции sin и cos для генерации некоторых данных считывания с датчиков для набора дат. Чтобы сгенерировать пропущенные значения, мы случайным образом отбрасываем половину записей.

Вот как выглядит итоговая таблица:

На приведенном ниже графике показаны сгенерированные данные: функция sin и cos, которые содержат множество пропущенных точек данных.

0 640198 894203

Теперь мы рассмотрим три различных метода интерполяции пропущенных значений чтения: прямое заполнение, обратное заполнение и интерполяция. Помните, что очень важно выбрать подходящий метод интерполяции для каждой задачи. Особые соображения требуются, в частности, для задач прогнозирования, где нам необходимо рассмотреть вопрос о том, будем ли мы иметь данные для интерполяции при выполнении прогнозирования. Например, если вам нужно интерполировать данные для прогноза погоды, вы не можете интерполировать погоду сегодня, используя погоду завтрашнего дня, поскольку она все еще неизвестна (логично, не правда ли?).

интерполирование

Для интерполяции данных мы можем использоватьгруппа по()-функция с последующимчастоты дискретизации (), Однако сначала нам нужно преобразовать даты чтения в формат datetime и установить их в качестве индекса нашего фрейма данных:

Так как мы хотим интерполировать для каждого дома отдельно, нам нужно сгруппировать наши данные по «дому», прежде чем мы сможем использоватьчастоты дискретизации ()Функция с опцией «D» для повторной выборки данных на ежедневной частоте.

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

означать()

Поскольку мы строго повышаем, используяозначать()Метод, все пропущенные значения чтения заполняются NaN:

С помощьюковрик ()вместо тогоозначать()форвард заполняет NaNs.

С помощьюbfill ()вместо тогоозначать()обратно заполняет NaNs:

Если мы хотим иметь в виду интерполяцию пропущенных значений, нам нужно сделать это в два этапа. Сначала мы генерируем базовую сетку данных, используяозначать().Это создает сетку с NaNs в качестве значений. После этого мы заполняем NaN интерполированными значениями, вызываяинтерполировать ()метод в столбце прочитанного значения:

Визуализация результатов

Наконец, мы можем визуализировать три различных метода заполнения, чтобы лучше понять их результаты. Непрозрачные точки показывают необработанные данные, прозрачные точки показывают интерполированные значения.

Мы можем видеть, как на верхнем рисунке зазоры были заполнены ранее известным значением, на среднем рисунке зазоры были заполнены существующим значением, а на нижнем рисунке разница была линейно интерполирована. Обратите внимание на ребра в интерполированных линиях из-за линейности процесса интерполяции. В зависимости от задачи, мы могли бы использовать методы более высокого порядка, чтобы избежать этих перегибов, но для этого поста это будет слишком далеко.

0 440783 503488

Резюме

В этом посте мы увидели, как мы можем использовать модуль Pandas Python для интерполяции данных временных рядов, используя методы обратной засыпки, прямой заливки или интерполяции.

Источник

Интерполировать в Excel

interpolate

Excel Interpolate (Содержание)

Введение в интерполяцию в Excel

Линейная интерполяция означает оценку будущего значения определенной переменной на основе текущих данных. В MS-Excel создается прямая линия, которая соединяет два известных значения, и, таким образом, будущее значение рассчитывается с использованием простой математической формулы или функции FORECAST.

Примеры для интерполяции в Excel

Давайте разберемся, как интерполировать в Excel с некоторыми примерами.

Допустим, у нас есть простой набор данных из двух известных значений x и y, и мы хотим интерполировать значение (т.е. найти соответствующее значение y для значения x) следующим образом:

interpolate excel 2

Итак, простая формула, которая используется для интерполяции этого значения:

interpolate excel 3

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

interpolate excel 4

Таким образом, мы можем видеть на скриншоте выше, что мы интерполировали значение с двумя известными значениями x и y. Могут быть моменты, когда становится трудно запомнить формулу. Таким образом, функция ПРОГНОЗ может быть использована в таких случаях.

Теперь допустим, что мы хотим интерполировать то же значение в примере 1 с помощью функции FORECAST.

interpolate excel 5

Функция ПРОГНОЗ оценивает значение на основе существующих значений вместе с линейным трендом. Он имеет следующий синтаксис:

ПРОГНОЗ (x, known_y’s, known_x’s)

interpolate excel 6

Итак, давайте теперь посмотрим на скриншот ниже, что происходит, когда мы применяем эту функцию FORECAST для интерполяции заданного значения x:

interpolate excel 7

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

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

interpolate excel 8

В этом случае продажи являются линейными (что также можно проверить вручную или с помощью линейного графика). Теперь давайте посмотрим, как мы используем функцию FORECAST, когда known_y’s и known_x’s вычисляются с использованием функций OFFSET и MATCH:

Давайте сначала посмотрим синтаксис функции OFFSET и функции MATCH:

Функция OFFSET возвращает ячейку или диапазон ячеек с указанным количеством строк и столбцов, в зависимости от высоты и ширины в указанных строках и столбцах. Он имеет следующий синтаксис:

OFFSET (ссылка, строки, столбцы, (высота), (ширина))

Функция MATCH возвращает относительное положение искомого значения в строке, столбце или таблице, которое соответствует указанному значению в указанном порядке. Он имеет следующий синтаксис:

MATCH (lookup_value, lookup_array, (match_type))

Теперь, если мы хотим оценить продажи, скажем, на 28 дней, мы используем эти функции следующим образом:

interpolate excel 9

interpolate excel 10

Таким образом, первая функция OFFSET, используемая в качестве второго параметра в функции FORECAST, используется для выбора known_y’s (зависимых значений, то есть продаж).

Вторая функция OFFSET, используемая в качестве третьего параметра в функции FORECAST, используется для выбора известных_х (независимых значений, то есть количества дней).

Функция MATCH, используемая в качестве параметра в функции OFFSET, используется для генерации позиции значения, которая должна быть спрогнозирована, и, таким образом, для вычисления количества строк. Столбцы в функции MATCH, т. Е. Второй параметр в ней должен быть 0, так как зависимое значение требуется для того же выбранного столбца.

Таким образом, в течение 28 дней мы оценили или прогнозировали продажи фирмы как 1120. Аналогично, мы можем оценить продажи фирмы за другое количество дней, используя эту функцию ПРОГНОЗ.

Что нужно помнить о интерполяции в Excel

Рекомендуемые статьи

Источник

Инструменты сайта

Основное

Информация

Действия

Содержание

Интерполяция

Интерполяция или интерполирование — приближенное или точное нахождение какой-либо величины по известным отдельным значениям этой же величины, или других величин, с ней связанных.

Происхождение слова «интерполяция» ☞ ЗДЕСЬ.

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

Полиномиальная интерполяция

interpol0 interpol1

Все множество интерполяционных полиномов, принимающих значения по таблице, можно представить в виде

Решение ☞ ЗДЕСЬ.

Пусть имеется интерполяционная таблица

Пример. Интерполяционный полином для таблицы

Следовательно, применение вычислительных методов решения систем линейных уравнений — типа метода Гаусса — к системе с матрицей Вандермонда столкнется с необходимостью строгого контроля округлений. ♦

Практическое построение интерполяционного полинома производится альтернативными алгоритмами — посредством вспомогательных промежуточных представлений полинома в специальных, сравнительно просто вычисляемых, видах. Самыми распространенными являются формы Лагранжа и Ньютона.

Интерполяционый полином в форме Лагранжа

Пример. Построить интерполяционный полином по таблице

Рекурсивное вычисление коэффициентов

В настоящем пункте мы произведем «доводку» метода Лагранжа до коэффициентов интерполяционного полинома

Интерполяционный полином в форме Ньютона

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

Теорема. Интерполяционный полином в форме Ньютона записывается в виде:

Применение полиномиальной интерполяции в задаче о разделении секрета

Обратная интерполяция

В одном из предшествующих ☝ пунктов решалcя следующий

Интерполяционный полином Эрмита

interpol2 interpol3

Пример. Построить интерполяционный полином по таблице

Построить уравнение «горки»: найти полином из условий

Следующий результат не очень связан с содержанием настоящего пункта, но надо было куда-то поместить.

Рациональная интерполяция

Первое решение задачи было предложено Коши в 1821 г. [9].

Теорема [Коши]. Обозначим:

Другие примеры на применение теоремы Коши ☞ ЗДЕСЬ

Теорема Коши дает решение задачи в смысле «как правило». Дело в том, что задача рациональной интерполяции (в указанной постановке) не всегда разрешима.

Пример. Для таблицы

Альтернативный подход к решению задачи основывается на следующей теореме, развивающей результат К.Якоби [10,11]; он основан на идее из пункта ☝ о рекурсивном вычислении коэффициентов интерполяционного полинома.

Подробнее о методе Якоби (в том числе и об эффективном способе вычисления ганкелевых полиномов) ☞ ЗДЕСЬ.

Тригонометрическая интерполяция

Доказательство тривиально, если обратить внимание на аналогию с интерполяционным полиномом в форме Лагранжа. ♦

Теорема. Функция

Задача. Найти явные выражения для коэффициентов тригонометрического полинома из последней теоремы.

«Лобовое» решение аналогично решению задачи полиномиальной интерполяции — сведением ее к подходящей системе линейных уравнений.

Пример. Построить интерполяционный полином второго порядка по следующей таблице

Решение ☞ ЗДЕСЬ.

Для случая системы равноотстоящих узлов решение задачи значительно упрощается.

Подробное изложение теории тригонометрической интерполяции (и дискретного преобразования Фурье) ☞ ЗДЕСЬ

Интерполяция суммами экспонент

Материал настоящего пункта — сильная «выжимка» из [2]. Числовой пример — мой.

В отличие от рассмотренных выше задач алгебраической или тригонометрической интерполяции, поставленная задача является, во-первых, принципиально нелинейной относительно параметров, и, во-вторых, не всегда разрешимой.

Пример. Построить экспоненциальную функцию вида

Аппроксимация

Задача интерполяции является частным случаем более общей задачи аппроксимации функций, т.е. замены одной неизвестной или сложной для вычисления функции другой, более простой. Здесь существенно понятие «близости» функций, которое может быть различным в конкретных задачах.

Хотя определитель Гильберта и отличен от нуля, но очень близок к нему:

$$ \det <\mathfrak H>_3=\frac<1><2160>,\ \det <\mathfrak H>_4=\frac<1><6\,048\,000>,\ \det <\mathfrak H>_6=\frac<1> <186313420339200000>$$ поэтому при решении линейной системы надо внимательно следить за ошибками округлений [4],[5].

Аппроксимация в случае недостоверности данных

Предположим теперь, что данные исходной таблицы не являются достоверными: значения обеих переменных подвержены воздействию случайных погрешностей одинакового порядка. Как воспользоваться этими данными для задачи аппроксимации? Мы рассмотрим здесь только две подобные задачи.

Координаты точки, для которой величина

pearson2

Теорема 2 [3],[4]. Обозначим

$$ \begin x & 0.0 & 0.9 & 1.8 & 2.6 & 3.3 & 4.4 & 5.2 & 6.1 & 6.5 & 7.4 \\ \hline y & 5.9 & 5.4 & 4.4 & 4.6 & 3.5 & 3.7 & 2.8 & 2.8 & 2.4 & 1.5 \end $$

galton11

galton21

Метод наименьших квадратов

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

$$ \begin x & 0.5 & 1 & 1.5 & 2 & 2.5 & 3 \\ \hline y & 0.35 & 0.80 & 1.70 & 1.85 & 3.51 & 1.02 \end $$

Дальнейшее развитие идеологии МНК ☞ ЗДЕСЬ.

Многомерная интерполяция

Сложности: парадокс Крамера

Прямоугольная сетка

Задачи

Источники

[1]. Mycielski J. Polynomials with Preassigned Values at their Branching Points. The American Mathematical Monthly, 77 (8).1970, pp. 853-855

[2]. Henrici P. Applied and Computational Complex Analysis. V. 1. 1974. NY. Wiley

[4]. Hilbert D. Ein Beitrag zur Theorie des Legendreschen Polynoms. Acta Math. Bd.18, 1894, S.155-160

[5]. Форсайт Дж., Молер К. Численное решение систем линейных алгебраических уравнений. М. Мир. 1969

[6]. Линник Ю.В. Метод наименьших квадратов и основы математико-статистической теории обработки наблюдений. М.ГИФМЛ. 1958

[7]. Калинина Е.А., Утешев А.Ю. Теория исключения. Учеб. пособие. СПб.: НИИ Химии СПбГУ, 2002. 72 с.

[8]. Утешев А.Ю., Тамасян Г.Ш. К задаче полиномиального интерполирования с кратными узлами. Вестник СПбГУ. Серия 10. 2010. Вып. 3, С. 76-85. Текст (pdf) ☞ ЗДЕСЬ

[9]. Cauchy A.-L. Cours d’Analyse de l’École Royale Polytechnique: Part I: Analyse Algébrique. Paris, France: L’Imprimerie Royale, 1821, pt. 1.

[10]. Jacobi C.G.J. Űber die Darstellung einer Reihe gegebner Werthe durch eine gebrochne rationale Function. J.reine angew. Math. 1846. Bd. 30, S. 127-156

[11]. Утешев А.Ю., Боровой И.И. Решение задачи рациональной интерполяции с использованием ганкелевых полиномов. Вестник СПбГУ. Серия 10. 2016. Вып. 4, С. 31-43. Текст ☞ ЗДЕСЬ (pdf).

[12]. Pearson K. On lines and planes of closest fit to systems of points in space. Phil. Mag. 1901. V.2, pp. 559-572

Источник

Интерполяция данных: соединяем точки так, чтобы было красиво

Как построить график по n точкам? Самое простое — отметить их маркерами на координатной сетке. Однако для наглядности их хочется соединить, чтобы получить легко читаемую линию. Соединять точки проще всего отрезками прямых. Но график-ломаная читается довольно тяжело: взгляд цепляется за углы, а не скользит вдоль линии. Да и выглядят изломы не очень красиво. Получается, что кроме ломаных нужно уметь строить и кривые. Однако тут нужно быть осторожным, чтобы не получилось вот такого:
image loader

Немного матчасти

Восстановление промежуточных значений функции, которая в данном случае задана таблично в виде точек P1&nbsp. &nbspPn, называется интерполяцией. Есть множество способов интерполяции, но все они могут быть сведены к тому, что надо найти n&nbsp–&nbsp1 функцию для расчёта промежуточных точек на соответствующих сегментах. При этом заданные точки обязательно должны быть вычислимы через соответствующие функции. На основе этого и может быть построен график:
image loader

Функции fi могут быть самыми разными, но чаще всего используют полиномы некоторой степени. В этом случае итоговая интерполирующая функция (кусочно заданная на промежутках, ограниченных точками Pi) называется сплайном.

В разных инструментах для построения графиков — редакторах и библиотеках — задача «красивой интерполяции» решена по-разному. В конце статьи будет небольшой обзор существующих вариантов. Почему в конце? Чтобы после ряда приведённых выкладок и размышлений можно было поугадывать, кто из «серьёзных ребят» какие методы использует.

Ставим опыты

Самый простой пример — линейная интерполяция, в которой используются полиномы первой степени, а в итоге получается ломаная, соединяющая заданные точки.
Давайте добавим немного конкретики. Вот набор точек (взяты почти с потолка):

Результат линейной интерполяции этих точек выглядит так:
image loader

Однако, как отмечалось выше, иногда хочется получить в итоге гладкую кривую.

Что есть гладкость? Бытовой ответ: отсутствие острых углов. Математический: непрерывность производных. При этом в математике гладкость имеет порядок, равный номеру последней непрерывной производной, и область, на которой эта непрерывность сохраняется. То есть, если функция имеет гладкость порядка 1 на отрезке [a;&nbspb], это означает, что на [a;&nbspb] она имеет непрерывную первую производную, а вот вторая производная уже терпит разрыв в каких-то точках.
У сплайна в контексте гладкости есть понятие дефекта. Дефект сплайна — это разность между его степенью и его гладкостью. Степень сплайна — это максимальная степень использованных в нём полиномов.
Важно отметить, что «опасными» точками у сплайна (в которых может нарушиться гладкость) являются как раз Pi, то есть точки сочленения сегментов, в которых происходит переход от одного полинома к другому. Все остальные точки «безопасны», ведь у полинома на области его определения нет проблем с непрерывностью производных.
Чтобы добиться гладкой интерполяции, нужно повысить степень полиномов и подобрать их коэффициенты так, чтобы в граничных точках сохранялась непрерывность производных.

Традиционно для решения такой задачи используют полиномы третьей степени и добиваются непрерывности первой и второй производной. То, что получается, называют кубическим сплайном дефекта 1. Вот как он выглядит для наших данных:
image loader

Кривая, действительно, гладкая. Но если предположить, что это график некоторого процесса или явления, который нужно показать заинтересованному лицу, то такой метод, скорее всего, не подходит. Проблема в ложных экстремумах. Появились они из-за слишком сильного искривления, которое было призвано обеспечить гладкость интерполяционной функции. Но зрителю такое поведение совсем не кстати, ведь он оказывается обманут относительно пиковых значений функции. А ради наглядной визуализации этих значений, собственно, всё и затевалось.
Так что надо искать другие решения.

Другое традиционное решение, кроме кубических сплайнов дефекта 1 — полиномы Лагранжа. Это полиномы степени n&nbsp–&nbsp1, принимающие заданные значения в заданных точках. То есть членения на сегменты здесь не происходит, вся последовательность описывается одним полиномом.
Но вот что получается:
image loader

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

В компьютерной графике очень широко применяются кривые Безье, представленные полиномами k-й степени.
Они не являются интерполирующими, так как из k&nbsp+&nbsp1 точек, участвующих в построении, итоговая кривая проходит лишь через первую и последнюю. Остальные k&nbsp–&nbsp1 точек играют роль своего рода «гравитационных центров», притягивающих к себе кривую.
Вот пример кубической кривой Безье:
image loader

Как это можно использовать для интерполяции? На основе этих кривых тоже можно построить сплайн. То есть на каждом сегменте сплайна будет своя кривая Безье k-й степени (кстати, k&nbsp=&nbsp1 даёт линейную интерполяцию). И вопрос только в том, какое k взять и как найти k&nbsp–&nbsp1 промежуточную точку.
Здесь бесконечно много вариантов (поскольку k ничем не ограничено), однако мы рассмотрим классический: k&nbsp=&nbsp3.
Чтобы итоговая кривая была гладкой, нужно добиться дефекта 1 для составляемого сплайна, то есть сохранения непрерывности первой и второй производных в точках сочленения сегментов (Pi), как это делается в классическом варианте кубического сплайна.
Решение этой задачи подробно (с исходным кодом) рассмотрено здесь.
Вот что получится на нашем тестовом наборе:
image loader

Стало лучше: ложные экстремумы всё ещё есть, но хотя бы не так сильно отличаются от реальных.

Думаем и экспериментируем

Можно попробовать ослабить условие гладкости: потребовать дефект 2, а не 1, то есть сохранить непрерывность одной только первой производной.
Достаточное условие достижения дефекта 2 в том, что промежуточные контрольные точки кубической кривой Безье, смежные с заданной точкой интерполируемой последовательности, лежат с этой точкой на одной прямой и на одинаковом расстоянии:
image loader

Методом проб и ошибок эвристика для расчёта расстояния от точки интерполируемой последовательности до промежуточной контрольной получилась такой:

image loader

Первая и последняя промежуточные контрольные точки равны первой и последней точке графика соответственно (точки C1 (1) и Cn&nbsp–&nbsp1 (2) совпадают с точками P1 и Pn соответственно).
В этом случае получается вот такая кривая:
image loader

Как видно, ложных экстремумов уже нет. Однако если сравнивать с линейной интерполяцией, местами ошибка очень большая. Можно сделать её ещё меньше, но тут в ход пойдут ещё более хитрые эвристики.

Эвристика для вычисления расстояний будет такой:

Результат получается такой:
image loader

В результате на шестом сегменте ошибка уменьшилась, а на седьмом — увеличилась: кривизна у Безье на нём оказалась больше, чем хотелось бы. Исправить ситуацию можно, принудительно уменьшив кривизну и тем самым «прижав» Безье ближе к отрезку прямой, которая соединяет граничные точки сегмента. Для этого используется следующая эвристика:

Результат следующий:
image loader

На этом было принято решение признать цель достигнутой.
Может быть, кому-то пригодится код.

А как люди-то делают?

Обещанный обзор. Конечно, перед решением задачи мы посмотрели, кто чем может похвастаться, а уже потом начали разбираться, как сделать самим и по возможности лучше. Но вот как только сделали, не без удовольствия ещё раз прошлись по доступным инструментам и сравнили их результаты с плодами наших экспериментов. Итак, поехали.

MS Excel

image loader

Это очень похоже на рассмотренный выше сплайн дефекта 1, основанный на кривых Безье. Правда, в отличие от него в чистом виде, тут всего два ложных экстремума — первый и второй сегменты (у нас было четыре). Видимо, к классическому поиску промежуточных контрольных точек тут добавляются ещё какие-то эвристики. Но ото всех ложных экстремумов они не спасли.

LibreOffice Calc

image loader

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

Есть там ещё один тип интерполяции, который мы тут не рассматривали: B-сплайн. Но для нашей задачи он явно не подходит, так как даёт вот такой результат 🙂
image loader

Highcharts, одна из самых популярных JS-библиотек для построения диаграмм

image loader

Тут налицо «метод касательных» в варианте равенства расстояний от точки интерполируемой последовательности до промежуточных контрольных. Ложных экстремумов нет, зато есть сравнительно большая ошибка относительно линейной интерполяции (седьмой сегмент).

amCharts, ещё одна популярная JS-библиотека

image loader

Картина очень похожа на экселевскую, те же два ложных экстремума в тех же местах.

Coreplot, самая популярная библиотека построения графиков для iOS и OS X

image loader

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

aChartEngine, вроде как самая популярная библиотека построения графиков для Android

image loader

Больше всего похоже на кривую Безье степени n&nbsp–&nbsp1, хотя в самой библиотеке график называется «cubic line». Странно! Как бы то ни было, тут не только присутствуют ложные экстремумы, но и в принципе не выполняются условия интерполяции.

Источник

Комфорт
Adblock
detector