27. Одномерная табличная интерполяция

 

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

В ряде случаев очень удобна сплайновая интерполяция и аппроксимация таблично заданных функций. При ней промежуточные точки ищутся по отрезкам полиномов третьей степени — это кубическая сплайновая интерполяция. При этом обычно такие полиномы вычисляются так, чтобы не только их значения совпадали с координатами узловых точек, но также чтобы в узловых точках были непрерывны производные первого и второго порядков. Такое поведение характерно для гибкой линейки, закрепленной в узловых точках, откуда и происходит название spline (сплайн) для этого вида интерполяции (аппроксимации). Для одномерной табличной интерполяции используется функция interpl:

  • yi = Interpl(x.Y.xi) — возвращает вектор yi, содержащий элементы, соответствующие элементам xi и полученные интерполяцией векторов х и Y. Вектор х определяет точки, в которых задано значение Y. Если Y — матрица, то интерполяция выполняется для каждого столбца Y и у1 имеет длину length (xi) - by- size (Y. 2);

  • yi = interpl (x.Y.xi .method) — позволяет с помощью параметра method задать метод интерполяции:

    • 'nearest' — ступенчатая интерполяция;

    • 'linear' — линейная интерполяция (принята по умолчанию);

    • 'spline' — кубическая сплайн-интерполяция;

    • 'cubic' или 'pchip' — интерполяция многочленами Эрмита;

    • 'v5cubic' — кубическая интерполяция MATLAB 5.

  •  yi = interpl (x.Y.xi .method, значение величин вне пределов изменения х) позволяет отобразить особенные точки на графике;

  • yi = i nterpl(х, Y, xi.method.' сообщение') — позволяет изменить сообщение об особенных точках на графике.

Все методы интерполяции требуют, чтобы значения х изменялись монотонно. Когда х — вектор равномерно распределенных точек, для более быстрой интерполяции лучше использовать методы '*1inear', '*cubic', '*nearest' или '*spline'. Обратите внимание, что в данном случае наименованию метода предшествует знак звездочки.

Пример (интерполяция функции косинуса):

» x=0:10:y=cos(x);

» xi=0:0.1:10;

» yi=interpl(x,y,xi);

» plot(x,y,'x',xi,yi,'g'),hold on

» yi=interpl(x,y,xi.'spline'): 

» plot(x,y,'o ' ,xi,yi,'m').grid,hold off

Узловые точки на рис. 17.17 обозначены кружками с наклонными крестиками. Одна из кривых соответствует линейной интерполяции, другая — сплайн-интерполяции. Нетрудно заметить, что сплайн-интерполяция в данном случае дает гораздо лучшие результаты, чем линейная интерполяция. При последней точки просто соединяются друг с другом отрезками прямых, так что график интерполирующей кривой при линейной интерполяции получается негладким.