Вы находитесь на странице: 1из 5

Министерство транспорта Российской Федерации

Федеральное агентство железнодорожного транспорта


Государственное образовательное учреждение высшего образования

Омский государственный университет путей сообщения (ОмГУПС)

Институт автоматики, телекоммуникаций и информационных технологий


(ИАТИТ)

Кафедра «Автоматика и системы управления»

ИНТЕРПОЛЯЦИЯ ФУНКЦИЙ

Лабораторная работа №4

по дисциплине «Численные методы»

студента группы 28З

Пляшкевич А.К.

Руководитель:

доцент кафедры АиСУ

Окишев А. С.

Омск 2019
Лабораторная работа №4
ИНТЕРПОЛЯЦИЙ ФУНКЦИЙ

Вариант № 12

Выполнение работы:
Задание:
а) определите значения функции в промежуточных точках (правая
часть таблицы) по формуле квадратичной интерполяции «вправо», то есть
для вычисления значения на отрезке [xi, xi+1] используйте три точки: xi, xi+1,
xi+2 (кроме последнего интервала). На последнем интервале [xn-1, xn]
используйте квадратичную интерполяцию «влево» по трём точкам xn-2, xn-1,
xn. В точках, выходящих за границы интервала [x0, xn], вычислять значения
функции не нужно;
б) для каждого интервала получите значения коэффициентов
квадратичной функции, решив СЛАУ, составленную по значениям функции
в трех точках;
в) постройте график кусочно-квадратичной аппроксимации. Для
обеспечения гладкости графика на каждом интервале сформируйте массив из
10 равноудаленных значений параболической функции на этом интервале.
Далее объедините все массивы в общий массив и передайте функции plot ( )

Рисунок 1 – таблица вариант 12


Рисунок 2 – график

Рисунок 3 – результат работы программы


Кусочно-квадратичная интерполяция
Листинг программы
X=[-9 -8 -6 -3.5 -2.5 0 2 4.5 6 9];
Y=[6.5 3.5 3 6.25 5 2.5 3.5 7 8.5 5];
X1=[-8.5 -7 -4.5 -1.5 1 3 7.5 8.5];
m = length(X);

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;

Вывод:
Метод квадратичной интерполяции основан на последовательном
применении процедуры оценивания с использованием квадратичной
аппроксимации. Достоинство метода заключается в том, что метод сам по
себе является универсальным и решение происходит достаточно быстро.
Недостатком данного метода является то, что его реализация требует
пристального внимания ко всем деталям для того чтобы добиться
правильного результата, так как даже один неправильно выбранный интервал
может испортить результат.

Оценить