Skip to content

Интерполяция в Matlab

Доброго времени суток! Сегодня поговорим о работе с данными полученными «экспериментально». Подразумевается, что даны значения по двум или более координатам (точки), с которыми в задаче нас просят выполнить то или иное действие. В этой статье мы с вами узнаем, что такое интерполяция в Matlab, и какие действия она позволяет выполнять.

Интерполяция

Задав такой вопрос поисковику, вы получите весьма развёрнутый ответ от Wikipedia. Но в двух словах, интерполяция (интерполирование) — процесс нахождения промежуточных значений по ряду данных, для восполнения пробелов между точными значениями приближенными. Точные значения так же называют узловыми точками.

Линейная интерполяция Matlab

Не будем вдаваться в математические определения и термины, перейдём сразу к сути:

Алгоритм интерполяции определяется способом вычисления приближенных значений между точными. Наиболее простым и очевидным вариантом является построение прямой между двумя узловыми точками. Этот метод называется методом линейной интерполяции.
line interpolation
В 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
Скачать исходник — Полином Лагранжа
Скачать исходник — Сплайном функцию Рунге

Опубликовано вMatlab

Один комментарий

  1. Skidaddler Skidaddler

    Спасибо, очень качественная, годная статья. Коротко и по сути, да ещё и с исходниками в придачу .

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *