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