Логотип Автор24реферат
Задать вопрос
%
уникальность
не проверялась
Решение задач на тему:

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

уникальность
не проверялась
Аа
8138 символов
Категория
Высшая математика
Решение задач
Интерполирование аппроксимация и сглаживание эксперимент данных .pdf

Зарегистрируйся в 2 клика в Кампус и получи неограниченный доступ к материалам с подпиской Кампус+ 🔥

Условие

Интерполирование, аппроксимация и сглаживание эксперимент данных Найти приближенное значение функции y, заданной таблицей данных, при указанном значении аргумента, используя: 1. Интерполяционный полином Лагранжа (или любой подходящий для табличной функции). 2. Метод наименьших квадратов 2-го порядка. 3. Сплайн 3-го порядка. Сделать выводы по работе (наиболее приемлемый способ аппроксимации заданной табличной функции, рациональный порядок функции отклика с учетом наличия/отсутствия эффекта Рунге на краях области определения аргумента).

Нужно полное решение этой работы?

Решение

Потяни, чтобы посмотреть
Полученная табличная функция:
i
0 1 2 3 4
xi
0,131 0,136 0,141 0,146 0,151
yi
1,35207 1,36773 1,38357 1,39959 1,41579
1. Полином Лагранжа
Px=y0L0+y1L1+y2L2+y3L3+y4L4
Lj=i=04x-xixj-xi, i≠j
Многочлены Lj как и сам многочлен Лагранжа имеет 4-ю степень.
В Matlab создаём m-функцию, которая возвращает значения интерполяционного многочлена Лагранжа в промежуточных точках отрезка по заданным узлам интерполирования:
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
% вычисляем произведения, т.е. функции L_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
2. Метод сплайнов.
Рассмотрим кубический сплайн.
На каждом i–м отрезке [xi–1, xi], i=1, 2,…, N, (N=3) будем искать полином третьей степени по формуле:
Six=ai+bix-xi+cix-xi22+dix-xi36 (2)
Требуется построить интерполянту — функцию f(x), совпадающую с функцией y(x) в узлах сетки:
fxi=yi
Накладываются также условия непрерывности первой и второй производной в узлах:
f'xi-0=f'xi+0, f''xi-0=f''xi+0, i=1,…,n-1
На границе при x0 и xn=x7.
f''x0=f''xn=0
В итоге необходимо решить СЛАУ вида относительно неизвестных в (2) ci:
hici+2hi+hi+1ci+1+hi+1ci+2=3yi+1-yihi+1-yi-yi-1hi, i=1,…,n-1
hi=xi-xi-1
С краевыми условиями
c1=0, cn+1=0
Данную систему можно решить методом прогонки. Соответственно для приведения к виду Aixi-1+Cixi+Bixi+1=Fi примем:
Ai=hi, i=2,…,n,
Bi=hi+1, i=1,…,n-1
Ci=2hi+hi+1, i=1,…,n-1
Fi=3yi+1-yihi+1-yi-yi-1hi, i=1,…,n-1
Таким образом, мы получим значения ci, i=1,…,n . После чего находим последовательно:
ai=yi-1;
di=ci+1-ci3hi
bi=yi-1;
Реализуем данный алгоритм в MATLAB (отметим, что в MATLAB индексы массива начинаются от 1, а не от нуля, поэтому в данных формулах в тексте программы индексы при xi и yi будут на 1 больше).
% вычисление кубического сплайна
% x - массив координат узлов
% y - массив значений интерполируемой функции
% xx - массив значений аргумента, для которых надо вычислить значения
% yy - массив значений полинома в точках xx
function yy = Spline3(x,y,xx)
n = length(x)-1;
A(1)=0; B(n)=0;

for i=1:n
h(i)=x(i+1)-x(i);
end

for i=2:n
A(i)=h(i);
end

for i=1:(n-1)
B(i)=h(i+1);
end

for i=1:(n-1)
C(i)=2*(h(i)+h(i+1));
F(i)=3*((y(i+2)-y(i+1))/h(i+1)-(y(i+1)-y(i))/h(i));
end
c = zeros(n+1,1);
c(2:n) = Progonka(A,C,B,F);
for k=1:n
a(k)=y(k);
d(k)=(c(k+1)-c(k))/(3*h(k));
b(k)= (y(k+1)-y(k))/h(k)-h(k)*(c(k+1)+2*c(k))/3;
end
% создаем нулевой вектор для записи значений сплайна
yy = zeros(size(xx));
% вычисляем значения сплайна
% в цикле проходим по отрезкам между узлами интерполирования
for k = 1:n
% находим индексы элементов массива xx, значения которых
% лежат между x(k) и x(k+1)
ind = find((xx >= x(k)) & (xx<= x(k+1)));
% вычисляем значения соответствующего полинома
yy(ind) = a(k) + b(k)*(xx(ind)-x(k)) + ...
c(k)*(xx(ind)-x(k)).^2 + d(k)*(xx(ind)-x(k)).^3;
end
end
Метод прогонки задан отдельной функцией:
function [ X ] = Progonka(A,C,B,F)
n = length(C);
%Определяем прогоночные коэффициенты:
alpha(2)= -B(1)/C(1);
beta(2)= F(1)/C(1);
%Остальные коэффициенты определяются по рекуррентным формулам:
for i=2:(n-1)
alpha(i+1)=-B(i)/(A(i)*alpha(i)+C(i));
beta(i+1)=(F(i)-A(i)*beta(i))/(A(i)*alpha(i)+C(i));
end
%находим X(n):
X(n)=(F(n)-A(n)*beta(n))/(A(n)*alpha(n)+C(n));
%Остальные значения определяем по рекуррентной формуле
for j=(n-1):-1:1
X(j)=alpha(j+1)*X(j+1)+beta(j+1);
end
X=X';%ответ в виде вектор-столбца
end
3
50% задачи недоступно для прочтения
Переходи в Кампус, регистрируйся и получай полное решение
Получить задачу
Больше решений задач по высшей математике:

Найдите трёхзначное натуральное число которое при делении и на 4

713 символов
Высшая математика
Решение задач

Для функции заданной картой Карно z\xy x⋁y

278 символов
Высшая математика
Решение задач
Все Решенные задачи по высшей математике
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач