Доброго времени суток! Сегодня поговорим о работе с данными полученными «экспериментально». Подразумевается, что даны значения по двум или более координатам (точки), с которыми в задаче нас просят выполнить то или иное действие. В этой статье мы с вами узнаем, что такое интерполяция в Matlab, и какие действия она позволяет выполнять.
Интерполяция
Задав такой вопрос поисковику, вы получите весьма развёрнутый ответ от Wikipedia. Но в двух словах, интерполяция (интерполирование) — процесс нахождения промежуточных значений по ряду данных, для восполнения пробелов между точными значениями приближенными. Точные значения так же называют узловыми точками.
Линейная интерполяция Matlab
Не будем вдаваться в математические определения и термины, перейдём сразу к сути:
Алгоритм интерполяции определяется способом вычисления приближенных значений между точными. Наиболее простым и очевидным вариантом является построение прямой между двумя узловыми точками. Этот метод называется методом линейной интерполяции.
В Matlab такой способ реализован с помощью команды
interp1(x,y, xi, 'linear')
или просто interp1(x,y, xi)
, где x и y массивы из табличных данных (координаты точек), xi — массив промежуточных точек, координаты которых требуется найти.
Интерполяционные полиномы
Есть разные интерполяционные полиномы — функции, определяющие как будут изменяться приближенные значения между узловыми точками:
- Канонический полином
- Полином Лагранжа
- Полином Ньютона
Разберём для самого часто встречающегося полинома реализацию в Matlab. Вот пример использования:
Проинтерполировать функцию sin x на отрезке [1, 9] с шагом 2 и построим графики sin x и полученного интерполяционного полинома.
Для начала необходимо создать функцию, по которой Matlab будет считать. Создайте файл с именем «lagrange» и скопируйте в него:
function yy=lagrange(x,y,xx) % вычисление интерполяционного полинома в форме Лагранжа % x - массив координат узлов % y - массив значений интерполируемой функции % xx - массив значений аргумента, для которых надо вычислить значения полинома % yy - массив значений полинома в точках xx % узнаем число узлов интерполяции (N=n+1) N=length(x); % создаем нулевой массив значений интерполяционного полинома yy=zeros(size(xx)); % в цикле считаем сумму по узлам for k=1:N % вычисляем произведения, т.е. функции Psi_k t=ones(size(xx)); for j=[1:k-1, k+1:N] t=t.*(xx-x(j))/(x(k)-x(j)); end % накапливаем сумму yy = yy + y(k)*t; end
Теперь создайте ещё один файл и запишем в него само решение поставленной задачи:
% задание узлов интерполяции x=1:2:9; y=sin(x); % задание точек, в которых требуется найти значения интерполяционного полинома xx=linspace(1,9,1000); % нахождение значений интерполяционного полинома yy=lagrange(x,y,xx); % построение графиков figure('Color','w') % вывод графика sin(x) fplot(@sin,[1 9]) hold on % вывод графика полинома plot(xx,yy,'r') % вывод узлов интерполяции plot(x,y,'bo') % размещение легенды legend('sin\itx','{\itL_n (интерполяция)}','узлы',-1)
Ссылки на файлы — исходники сможете найти в конце статьи. Более подробную информацию о полиноме Лагранжа вы сможете найти на официальном сайте Matlab.
Интерполяция сплайнами
Ещё один часто встречающийся метод интерполяции. Происхождение термина “сплайны” связано с гибкой чертежной линейкой, которой пользовались для рисования гладких кривых, проходящих через заданные точки. Сплайн — это группа кубических многочленов, которые также называют кубическими сплайнами.
Вычисление сплайн интерполяции в Matlab осуществляется с помощью команды spline(x, y, xx)
, где х и у — массивы табличных данных, а хх — промежуточные значения по оси абцисс (Х). Вот небольшой пример:
Построить интерполяцию сплайнами функции Рунге.
% Введём функцию Рунге f = inline('1./(1+25*x.^2)'); % Вычислим таблицу значений x = linspace(-1, 1, 10); y = f(x); % Вычислим сплайн-интерполяцию xx = linspace(-1, 1, 100); yy = spline(x, y, xx); % Начертим графики axes('NextPlot','Add'); plot(x, y,'LineWidth', 2); % Красным на графике - аппроксимация, жирным - исходная функция plot(xx, yy,'Color','r');
Вывод:
interp1
Большинство задач в Matlab реализуются с помощью этой команды. yi = interp1 (x,y,xi, metod), где х – массив абсцисс экспериментальных точек, у – массив ординат экспериментальных точек, xi — точки, в которых необходимо вычислить значения с помощью сплайна, metod – определяет метод построения сплайна. Этот параметр может принимать следующие значения:
- ‘nearest’ – интерполяция по соседним точкам – этот метод построения кусочной функции, при котором значение в любой точке равно значению в ближайшей узловой точке – интерполяция полиномами 0-ой степени;
- ‘linear’ – линейная сплайн-интерполяция — интерполяция полиномами 1-ой степени (применяется по умолчанию, если способ интерполирования не задан);
- ‘cubic’ – интерполяция кубическим полиномом;
- ‘spline’ – интерполяция кубическим сплайном;
- ‘pchip’ — интерполяция кубическим эрмитовым сплайном.
Вот и вся основная информация по интерполяции в Matlab, если остались вопросы, задавайте их в комментариях.
Скачать исходник — lagrange
Скачать исходник — Полином Лагранжа
Скачать исходник — Сплайном функцию Рунге
Будьте первым, кто оставит комментарий