Интерполяция сплайнами
Повысить качество аппроксимации экспериментальных данных можно с помощью сплайнов. Сплайн – это непрерывная гладкая функция, которая на отрезках области определения равна полиномам определённой степени. Иными словами, при таком способе интерполяции экспериментальные точки попарно соединяются отрезками полиномов. Обычно используют полиномы третьей степени, поэтому данный метод и получил название интерполяция кубическими сплайнами.
Интерполяцию кубическими сплайнами можно выполнить с помощью функции spline. Если к этой функции обратиться в форме
уу=spline(x,y,xx)
она выполнит интерполяцию значений вектора у, заданного для значений аргумента, представленного вектором х, и вернёт вектор уу, содержащий значения интерполирующей функции для значений аргумента, заданных вектором хх.
Для примера выполним интерполяцию кубическими сплайнами для значений, заданных векторами х и у, и отобразим полученный результат на графике (рис. 3.20):
>> x=[1 2 3 4 5 6 7 8 9 10];
>> y=[3 4 6 6.5 7 7.5 9 11 10 9];
>> xx=0.5:0.05:12;
>> yy=spline(x,y,xx);
>> title('Интерполяция кубическими сплайнами');
>> xlabel('x'); ylabel('y');
>> plot(x,y,'ko',xx,yy,'k-'),grid on
>> legend('табличные данные','сплайн')
Рис. 3.20. Аппроксимация кубическими сплайнами
Для одномерной интерполяции табличных данных в MATLAB имеется функция interpl:
yy=interpl(х,у,хх,method)
В её четвёртом аргументе в виде строки символов задаётся метод интерполяции. Можно задать один из следующих методов:
‘nearest’ – ступенчатая интерполяция (когда значение в каждой промежуточной точке принимается равным ближайшему табличному значению);
‘linear’ – линейная интерполяция (соединение соседних точек отрезками прямых в соответствии с табличными данными);
‘spline’ – интерполяция кубическими сплайнами;
‘pchip’ – интерполяция кусочными полиномами Эрмита 3-й степени;
‘cubic’–тоже, что и ‘pchip’.
Если метод не указан, по умолчанию используется ‘linear’.
В следующем примере сравниваются различные способы интерполяции, реализованные функцией interpl (графики соответствующих функций представлены на рис. 3.21).
>> x=[1 2 3 4 5 6 7 8 9 10];
>> y=[3 4 6 6.5 7 7.5 9 11 10 9];
>> plot(x,y,'ko')
>> xx=0.5:0.05:12;
>> yy1=interp1(x,y,xx,'nearest');
>> yy2=interp1(x,y,xx,'linear');
>> yy3=interp1(x,y,xx,'spline');
>> hold on
>> plot(xx,yy1,'k:',xx,yy2,'k-',xx,yy3,'k--'),grid on
>> title('Различные методы интерполяции')
>> xlabel('x'); ylabel('y');
>> legend('табличные данные','ступенчатая','линейная','сплайн')
Рис. 3.21. Различные методы интерполяции
В MATLAB можно интерполировать не только одномерные данные. Для интерполирования двухмерных данных предназначена функция interpl, трёхмерных – функция interp2, а многомерных – функция intern.
Достарыңызбен бөлісу: |