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