Одномерная табличная интерполяция
Одномерная табличная интерполяция
В ряде случаев очень удобна сплайновая интерполяция и аппроксимация таблично заданных функций. При ней промежуточные точки ищутся по отрезкам полиномов третьей степени — это кубическая сплайновая интерполяция. При этом обычно такие полиномы вычисляются так, чтобы не только их значения совпадали с координатами узловых точек, но также чтобы в узловых точках были непрерывны производные первого и второго порядков. Такое поведение характерно для гибкой линейки, закрепленной в узловых точках, откуда и происходит название 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 обозначены кружками с наклонными крестиками. Одна из кривых соответствует линейной интерполяции, другая — сплайн-интерполяции. Нетрудно заметить, что сплайн-интерполяция в данном случае дает гораздо лучшие результаты, чем линейная интерполяция. При последней точки просто соединяются друг с другом отрезками прямых, так что график интерполирующей кривой при линейной интерполяции получается негладким.