Иллюстрированный самоучитель по MatLab

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

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.