Пример 6.3.6-5. Найти многочлен Лагранжа степени n, такой, что значения функции и многочлена в точках таблицы совпадают.
По таблице построим интерполяционный многочлен:
X
-1
y(x)
= .
Пример 6.3.6-5
% Построить интерполяционный многочлен Лагранжа
% Введём табличную функцию x = [-1 0 1 2]; y = [4 2 0 1];
% Построим интерполяционный многочлен (аппроксимация третьей степени) p = polyfit(x, y, 4);
% Коэффициенты интерполяции \sum_{i=0}^n p(i) x^i p
1.2500
-2.0000
-1.2500
2.0000
Пример 6.3.6-6.. Использование остаточного члена интерполяции.
Пусть требуется составить таблицу функции y=lnx на отрезке [1;10]. Какой величины должен быть шаг h, чтобы при линейной интерполяции значение функции восстанавливалось с погрешностью не меньшей ?
Запишем остаточный член интерполяции при линейной интерполяции
Так как , то Тогда . Следовательно,
Пример 6.3.6-6
% Интерполяция функции Рунге % Введём функцию Рунге f = inline('1./(1+25*x.^2)');
% Вычислим таблицу значений x = linspace(-1, 1, 10); y = f(x);
% Проинтерполируем функцию Рунге многочленами Лагранжа p = polyfit(x, y, 10); xx = linspace(-1, 1, 100); yy = polyval(p, xx); axes('NextPlot', 'Add');
% Покажем, что глобальная аппроксимация плохо работает для функции Рунге plot(x, y); plot(xx, yy, 'Color', 'r');
Пример 6.3.6-6
% С увеличением узлов сетки, ситуация только ухудщается
% Вычислим таблицу значений. 20 узлов сетки x = linspace(-1, 1, 20); y = f(x);
% Проинтерполируем функцию Рунге многочленами Лагранжа p = polyfit(x, y, 20); xx = linspace(-1, 1, 100); yy = polyval(p, xx); figure axes('NextPlot', 'Add');
% Покажем, что глобальная аппроксимация плохо работает для функции Рунге plot(x, y); plot(xx, yy, 'Color', 'r');
Пример 6.3.6-6
% Кусочно-линейная интерполяция функции Рунге % Введём функцию Рунге f = inline('1./(1+25*x.^2)');
% Вычислим таблицу значений x = linspace(-1, 1, 10); y = f(x);
% Начертим график кусочно-линейной аппроксимации plot(x, y);
Пример 6.3.6-6
% Построить интерполяцию сплайнами функции Рунге % Введём функцию Рунге 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');
6.3.7. Тестовые задания по теме «Интерполяция функций»
1. Задача замены таблично заданной функции y = f(x) другой функцией g(x), такой, что g(xi) = f(xi) (i = 0, 1, 2, … n),это