INFONKO.RU

Интерполяции и аппроксимации данных

Для анализа экспериментальных данных, которые представлены в виде таблиц и задают зависимость одних физических величин от других, применяют такие средства, как интерполяция, сглаживание и аппроксимация.

Если имеются некоторые табличные данные, возникает задача – найти непрерывную кривую, которая наилучшим образом соответствовала бы заданной экспериментальной зависимости. Обычно такие данные удобно интерпретировать в виде полиномиальной функции или сплайна.

Программа MATLAB содержит встроенные функции для аппроксимации и интерполяции экспериментальных данных.

Полиномиальная аппроксимация

Построить аппроксимирующий полином заданной степени, который приближает функцию одной переменной, заданную таблицей значений, позволяет функция polyfit. Эта функция реализует так называемый метод наименьших квадратов. Она имеет следующий синтаксис:

р=polyfit(x,y,n),

где у – это вектор значений функции; х – вектор значений аргумента, n – порядок аппроксимирующего полинома; а р – полученный в результате вектор коэффициентов аппроксимирующего полинома длиной n+1.

Допустим, имеется массив значений аргумента:

х=[1 2 3 4 5 6 7 8 9 10]

и массив соответствующих им значений измеряемой величины:

у=[3 4 6 6.5 7 7.5 9 11 10 9]

Применим к этим данным функцию polyfit при n = 1, n = 2 и n = 3:

>> x=[1 2 3 4 5 6 7 8 9 10];

>> y=[3 4 6 6.5 7 7.5 9 11 10 9];

>> p1=polyfit(x,y,1)

p1 =

0.7818 3.0000

>> p2=polyfit(x,y,2)

p2 =

-0.0814 1.6777 1.2083

>> p3=polyfit(x,y,3)

p3 =

-0.0176 0.2086 0.3398 2.7167.

В результате мы получили три вектора p1, р2 и p3, первый из которых содержит коэффициенты аппроксимирующей прямой 0,7818х + 3, второй – коэффициенты аппроксимирующей квадратной параболы –0,0814х2 – 1,6777x + 1,2083, а третий – коэффициенты аппроксимирующей кубической параболы –0,0176х3 + 0,2086x2 + 0,3398x +2,7167.

Аналогичным образом можно аппроксимировать данные полиномами четвёртой степени, пятой, шестой и т.д.

Для наглядности построим график исходной зависимости и графики аппроксимирующих полиномов (рис. 3.19). Для вычисления значений полиномов воспользуемся функцией polyval:

>> x=[1 2 3 4 5 6 7 8 9 10];

>> y=[3 4 6 6.5 7 7.5 9 11 10 9];

>> title('Полиномиальная аппроксимация')

>> xlabel('x'); ylabel('y'); hold on

>> plot(x,y,'ko')

>> p1=polyfit(x,y,1);

>> p2=polyfit(x,y,2);

>> p3=polyfit(x,y,3);

>> t=0.5:0.05:12;

>> y1=polyval(p1,t);

>> y2=polyval(p2,t);

>> y3=polyval(p3,t);

>> plot(t,y1,'k-',t,y2,'k--',t,y3,'k:'),grid on

>> legend('табличные данные','прямая','парабола','кубическая парабола')

Рис. 3.19. Пример аппроксимации полиномами

Выполнение приближения методом наименьших квадратов не всегда дает хороший результат. При увеличении степени полинома качество приближения может ухудшаться.

Интерполяция сплайнами

Повысить качество аппроксимации экспериментальных данных можно с помощью сплайнов. Сплайн – это непрерывная гладкая функция, которая на отрезках области определения равна полиномам определённой степени. Иными словами, при таком способе интерполяции экспериментальные точки попарно соединяются отрезками полиномов. Обычно используют полиномы третьей степени, поэтому данный метод и получил название интерполяция кубическими сплайнами.



Интерполяцию кубическими сплайнами можно выполнить с помощью функции 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.



infonko.ru/glava-pyataya-patristika-blazhennij-avgustin.html infonko.ru/glava-pyataya-silovaya-podgotovka.html infonko.ru/glava-pyataya-vezhlivost-otnosis-k-okruzhayushim-kak-k-druzyam.html infonko.ru/glava-pyataya-vremya-obrasheniya.html infonko.ru/glava-pyatnadcataya-pravovie-otnosheniya.html infonko.ru/glava-pyatnadcataya-svetlyachki.html infonko.ru/glava-pyatnadcataya-vliyanie-vremeni-oborota-na-velichinu-avansiruemogo-kapitala.html infonko.ru/glava-pyatnadcataya-vliyanie-vremeni-oborota-na-velichinu-avansiruemogo-kapitala-prodolzhenie-1.html infonko.ru/glava-sedmaya-kak-vliyayut-pristupi-zlobi-na-koefficient-razdrazhimosti.html infonko.ru/glava-sedmaya-krasivie-teksti.html infonko.ru/glava-sedmaya-nezhdannij-gost.html infonko.ru/glava-sedmaya-o-vliyanii-vospitaniya.html infonko.ru/glava-sedmaya-rannij-brak-rannie-deti.html infonko.ru/glava-sedmaya-shedrost-dari-sebya-okruzhayushim.html infonko.ru/glava-sedmaya-son-i-snovideniya.html infonko.ru/glava-semnadcataya-obrashenie-pribavochnoj-stoimosti.html infonko.ru/glava-semnadcataya-obrashenie-pribavochnoj-stoimosti-prodolzhenie-1.html infonko.ru/glava-semnadcataya-ssori-i-primireniya.html infonko.ru/glava-shestaya-antirinochnaya-etika-praksiologicheskij-analiz.html infonko.ru/glava-shestaya-dieta-i-vitamini.html