ИНТЕРПОЛЯЦИЯ ФУНКЦИЙ
Лабораторная работа №4
Пляшкевич А.К.
Руководитель:
Окишев А. С.
Омск 2019
Лабораторная работа №4
ИНТЕРПОЛЯЦИЙ ФУНКЦИЙ
Вариант № 12
Выполнение работы:
Задание:
а) определите значения функции в промежуточных точках (правая
часть таблицы) по формуле квадратичной интерполяции «вправо», то есть
для вычисления значения на отрезке [xi, xi+1] используйте три точки: xi, xi+1,
xi+2 (кроме последнего интервала). На последнем интервале [xn-1, xn]
используйте квадратичную интерполяцию «влево» по трём точкам xn-2, xn-1,
xn. В точках, выходящих за границы интервала [x0, xn], вычислять значения
функции не нужно;
б) для каждого интервала получите значения коэффициентов
квадратичной функции, решив СЛАУ, составленную по значениям функции
в трех точках;
в) постройте график кусочно-квадратичной аппроксимации. Для
обеспечения гладкости графика на каждом интервале сформируйте массив из
10 равноудаленных значений параболической функции на этом интервале.
Далее объедините все массивы в общий массив и передайте функции plot ( )
i = 1;
j = 1;
while(i <= m)
min = i;
while(j <= m)
if(X(j) < X(min))
min = j;
end
j = j +1;
end
tempX = X(i);
tempY = Y(i);
X(i) = X(min);
Y(i) = Y(min);
X(min) = tempX;
Y(min) = tempY;
i=i+1;
j = i;
end
i = 1;
Y1 = zeros(1,length(X1));
while(i <= length(X1))
if(X1(i)<X(1)) || (X1(i)>X(length(X)))
Y1(i) = NaN(1);
end
i = i+1;
end
A = zeros(1,m-1);
B = zeros(1,m-1);
C = zeros(1,m-1);
i = 1;
while(i < m)
xx = zeros(3,1);
b = zeros(3,1);
if(i ~= m-1)
xx(1) = X(i);
xx(2) = X(i+1);
xx(3) = X(i+2);
b(1) = Y(i);
b(2) = Y(i+1);
b(3) = Y(i+2);
else
xx(1) = X(m-2);
xx(2) = X(m-1);
xx(3) = X(m);
b(1) = Y(m-2);
b(2) = Y(m-1);
b(3) = Y(m);
end
mtx = [xx(1)^2,xx(1),1;
xx(2)^2,xx(2),1;
xx(3)^2,xx(3),1;];
M = [mtx,b];
abc = newgauss(M);
A(i)=abc(1);
B(i)=abc(2);
C(i)=abc(3);
i = i+1;
end
i = 1;
j = 1;
while(i <= length(X1))
if(X1(i) >= X(j)) && (X1(i) <= X(j+1))
Y1(i) = A(j)*X1(i)^2 + B(j)*X1(i) + C(j);
else
if(isnan(Y1(i)) == 0)
j = j+1;
i = i-1;
end
end
i = i+1;
end
disp(Y1);
x = X(1):0.1:X(m);
y = zeros(size(x));
i = 1;
j = 1;
while(i <= length(x))
if(x(i) >= X(j)) && (x(i) <= X(j+1))
y(i) = A(j)*x(i)^2 + B(j)*x(i) + C(j);
else
j = j+1;
i = i-1;
end
i = i+1;
end
plot(x,y,X,Y);
grid on;
Вывод:
Метод квадратичной интерполяции основан на последовательном
применении процедуры оценивания с использованием квадратичной
аппроксимации. Достоинство метода заключается в том, что метод сам по
себе является универсальным и решение происходит достаточно быстро.
Недостатком данного метода является то, что его реализация требует
пристального внимания ко всем деталям для того чтобы добиться
правильного результата, так как даже один неправильно выбранный интервал
может испортить результат.