15.1.2. Кубическая сплайн-интерполяция

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

  • interp(s,x,y,t) — функция, аппроксимирующая данные векторов х и у кубическими сплайнами;
    • s — вектор вторых производных, созданный одной из сопутствующих функций cspline, pspline или lspline;
    • х — вектор действительных данных аргумента, элементы которого расположены в порядке возрастания;
    • у — вектор действительных данных значений того же размера;
    • t — значение аргумента, при котором вычисляется интерполирующая функция.

Рис. 15.4. Сплайн-интерполяция (см. листинг 15.2)

Сплайн-интерполяция в Mathcad реализована чуть сложнее линейной. Перед применением функции interp необходимо предварительно определить первый из ее аргументов — векторную переменную s. Делается это при помощи одной из трех встроенных функций тех же аргументов (х,у).

  • lspline(x,y) — вектор значений коэффициентов линейного сплайна;
  • pspline(x,y) — вектор значений коэффициентов квадратичного сплайна;
  • cspline(x,y) — вектор значений коэффициентов кубического сплайна;
    • х, у — векторы данных.

Выбор конкретной функции сплайновых коэффициентов влияет на интерполяцию вблизи конечных точек интервала. Пример сплайн-интерполяции приведен в листинге 15.2.

Листинг 15.2. Кубическая сплайн-интерполяция

Смысл сплайн-интерполяции заключается в том, что в промежутках между точками осуществляется аппроксимация в виде зависимости A(t) = =а t3+bt2+ct+d. Коэффициенты а, b, с, d рассчитываются независимо для каждого промежутка, исходя из значений уг в соседних точках. Этот процесс скрыт от пользователя, поскольку смысл задачи интерполяции состоит в выдаче значения A(t) в любой точке t (рис. 15.4).

Рис. 15.5. Сплайн-интерполяция с выбором коэффициентов линейного сплайна lspline

Рис. 15.6. Ошибочное построение графика сплайн-интерполяции (см. листинг 15.2)

Чтобы подчеркнуть различия, соответствующие разным вспомогательным функциям cspline, pspline, Ispline, покажем результат действия листинга 15.2 при замене функции cspline в предпоследней строке на линейную ispiine (рис. 15.5). Как видно, выбор вспомогательных функций существенно влияет на поведение A(t) вблизи граничных точек рассматриваемого интервала (0, 6) и особенно разительно меняет результат экстраполяции данных за его пределами.

В заключение остановимся на уже упоминавшейся в предыдущем разделе распространенной ошибке при построении графиков интерполирующей функции (см. рис. 15.3). Если на графике, например являющемся продолжением листинга 15.2, задать построение функции А(Х) вместо A(t), то будет получено просто соединение исходных точек ломаной (рис. 15.6). Так происходит потому, что в промежутках между точками вычисления интерполирующей функции не производятся.