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

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

Что такое интерполяция?

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

Для примера предположим, что значение функции $y=f(x)$ задано в виде набора из пяти (5) различных значений x, как показано на графике ниже.
На этом графике показан входной набор данных, состоящий из пяти различных значений x.

Теперь мы хотим оценить (т.е. интерполировать) значение функции при $x=5$, используя заданные пять (5) точек данных.

Для целей интерполяции желаемое значение x должно находиться в диапазоне исходного набора данных (например, $2\le x\le 12$).

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

  1. А как насчет экстраполяции? Чем она отличается?
    Экстраполяция - это процесс оценки значения функции для величины x, которая выходит за пределы диапазона заданного набора данных.
  2. Поддерживает ли NumXL экстраполяцию?
    Да, та же функция NxINTRPL(.) можно использовать для экстраполяции. Обязательно передайте "true" или 1 в аргумент "extrapolate".
  3. Являются ли подгонка кривых (например, регрессия) и интерполяция одним и тем же?
    Подгонка кривых и интерполяция часто используются как взаимозаменяемые понятия, но между ними есть тонкая разница: интерполяция должна точно соответствовать точкам данных, в то время как подгонка кривых должна быть как можно более близкой.
  4. Следует ли использовать интерполяцию или подгонку кривых?
    Это зависит от обстоятельств. Интерполяция предполагает, что точки данных известны идеально (или, по крайней мере, с очень высокой точностью), в то время как подгонка кривых предполагает некоторую степень шума в точках данных.

Подготовка данных

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

  • Отсортируйте точки данных в порядке возрастания (по X).
  • Беззвучно отбрасывайте точки данных с отсутствующими значениями.
  • Замените несколько показаний для одного и того же значения X их средним значением.

ВОПРОСЫ И ОТВЕТЫ:

Q: Должны ли точки данных быть равномерно разделены?

A: Нет, длина интервала между точками данных не обязательно должна быть одинаковой, но мы рекомендуем распределять точки данных по диапазону x, чтобы повысить точность интерполяции и минимизировать влияние провалов.

Методы интерполяции

  1. Ступенчатая интерполяция 1: плоская интерполяция вперед:

    Методы ступенчатой интерполяции моделируют неизвестную функцию плоской/постоянной между известными точками данных, используя последнее известное значение.
    На этом графике изображен метод интерполяции 'Forward Flat'.

  2. Ступенчатая интерполяция 2: Обратная плоская интерполяция:

    В случае обратного плоского метода неизвестная функция также моделируется как плоская/постоянная между известными точками данных, но при этом используется уровень непосредственно следующей точки данных.
    На этом графике изображен метод интерполяции 'Backward Flat'.

  3. Ступенчатая интерполяция 3: интерполяция ближайших соседей:

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

  4. Линейная интерполяция:

    При линейной интерполяции мы соединяем каждую точку данных с соседними с помощью прямых линий.
    На этом графике изображен метод 'Линейной' интерполяции.

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

  5. Кубический сплайн: Натуральный сплайн:

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

    Результирующая кривая гладкая, но не "локальная", то есть если функции сильно изменяются (например, x=4), кривая вокруг окружающих точек "шатается" (например, проскакивает в промежуточных точках).

  6. Кубический сплайн: AKIMA Сплайн:

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

    Как показано на рисунке выше, кривая вокруг точек данных непрерывная, но не гладкая.

  7. Кубический сплайн: Штеффен Сплайн:

    Сплайн Стеффена добавляет новое ограничение: сегмент кубического сплайна монотонен между точками данных. Никаких колебаний, точка.
    На этом графике изображен метод интерполяции 'сплайн Штеффена'.

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

    Сплайн Стеффена и его первая производная гарантированно непрерывны, но вторая производная может быть прерывистой.

  8. Кубический сплайн: Ограниченный (Крюгер) сплайн:

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

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

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

Вопросы и ответы:

Q: Какой тип кубического сплайна следует использовать?

A: Это зависит от характера ваших данных, а также от важности плавной кривой и/или побочного эффекта проскакивания. Во многих случаях мы рекомендуем выбирать ограниченный (Крюгера) кубический сплайн.

Q: Я вижу две функции интерполяции в NumXL: INTERPOLATE(.) и NxINTRPL(.). Какой из них мне следует использовать?

A: Функция INTERPOLATE(.) была нашей ранней функцией реализации, но теперь она устарела. Все вышеупомянутые методы интерполяции доступны только в NxINTRPL(.), поэтому следует использовать только эту функцию.

Q: Функция NxINTRPL(.) принимает в качестве целевого аргумента как одиночное значение, так и массив. Почему?

A: Функция NxINTRPL(.) работает быстрее, если интерполировать сразу для нескольких значений, а не вызывать отдельно для каждого значения. Мы рекомендуем передавать все значения x в нескольких вызовах функции.

  Вложения

Комментарии

Войдите в службу, чтобы оставить комментарий.

Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 0 из 0