Решение задач аппроксимации и интерполяции в среде MatLAB. Интерполяция на неравномерной сетке

Аппроксимация

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

Решение задач аппроксимации и интерполяции в среде MatLAB. Интерполяция на неравномерной сетке - student2.ru

МНК (Метод Наименьших Квадратов)

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

Суть МНК заключается в следующем: для табличных данных, полученных в результате эксперимента, отыскать аналитическую зависимость, сумма квадратов уклонений которой от табличных данных во всех узловых точках была бы минимальной.

Аппроксимация в Matlab по МНК осуществляется с помощью функции polyfit. Функция p = polyfit(x, y, n) находит коэффициенты полинома p(x) степени n, который аппроксимирует функцию y(x) в смысле метода наименьших квадратов. Выходом является строка p длины n+1, содержащая коэффициенты аппроксимирующего полинома.

Пример (аппроксимация с помощью встроенных MATLAB функций):

Осуществить аппроксимацию в Matlab табличных данных x = [0, 0.1 , 0.2, 0.3, 0.5] и y = [3, 4.5, 1.7, 0.7, -1]. Применяя метод наименьших квадратов, приблизить ее многочленами 1-ой и 2-ой степени. Для каждого определить величину среднеквадратической ошибки. Построить (на одном листе) графики и заданной таблично функции (ломанная линия) и приближающих ее многочленов 1-ой и 2-ой степени.

x = [0, 0.1 , 0.2, 0.3, 0.5];

y = [3, 4.5, 1.7, 0.7, -1];

grid on

plot(x, y, '*r');

xi = min(x):0.1:max(x);

N = 1; % степень

coeff1 = polyfit(x, y, N);

y2 = 0;

for k=0:N

y2 = y2 + coeff1(N-k+1) * xi.^k;

end

hold on; plot(xi, y2, 'r');

N = 2;

coeff2 = polyfit(x, y, N);

y3 = 0;

for k=0:N

y3 = y3 + coeff2(N-k+1) * xi.^k;

end

hold on; plot(xi, y3, 'g');

std(y-(coeff1(1)*x+coeff1(2)))

std(y-(coeff2(1)*x.^2+coeff2(2)*x+coeff2(3)))

Решение задач аппроксимации и интерполяции в среде MatLAB. Интерполяция на неравномерной сетке - student2.ru

Вывод:

ans = 0.9253

ans = 0.8973

Пример (аппроксимации без использования специальных функций MATLAB):

Найти у(0.25) путём построения аппроксимирующего полинома методом наименьших квадратов согласно данным:

x: 0, 0.1, 0.2, 0.3, 0.5

y: 3, 4.5, 1.7, 0.7, -1

p: 0.5, 0.8, 1.6, 0.8, 0.1

Построить этот полином без учёта весовых коэффициентов с использованием определителя Вандермонда и стандартных операторов.

%Задаем массивы данных:

x = [0; 0.1; 0.2; 0.3; 0.5];

y = [3;4.5;1.7;0.7;-1];

%Строим матрицу W – матрицу Вандермонда с вырезанным первым столбцом:

W = vander(x);

W = W(1:5,2:5);

%Вычисляем элементы матрицы А как произведение транспонированной матрицы W и просто матрицы W

A = W'*W;

%Вычисляем элементы вектора b

b = W'*y;

%Решая систему уравнений Aa = b, находим значения вектор-столбца a:

a = inv(A)*b

%Это будут коэффициенты аппроксимирующего полинома.

%Проверяем, используя методы MATLAB = функцию polyfit:

qq = polyfit(x,y,3)

%Получаем аппроксимированные значения y:

x1 = [-0.2:0.001:0.7];

y1 = a(1)*x1.^3 + a(2)*x1.^2 + a(3)*x1 + a(4);

%Строим график функции

plot(x,y,'*');

hold on;

grid on;

plot(x1,y1,'Color','r');

%Находим значение в точке x = 0.25

x2 = 0.25;

y2 = a(1)*x2^3 + a(2)*x2^2 + a(3)*x2 + a(4)

Решение задач аппроксимации и интерполяции в среде MatLAB. Интерполяция на неравномерной сетке - student2.ru

Вывод:

a =

228.1447

-176.0984

22.7745

3.1590

qq = 228.1447 -176.0984 22.7745 3.1590

y2 = 1.4113

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

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

Наши рекомендации