Лабы / 4
.docМИНИСТЕРСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ ПО СВЯЗИ И ИНФОРМАТИЗАЦИИ Московский технический университет связи и информатики
Кафедра вычислительной математики и программирования
Численные методы и оптимизация Лабораторная работа №4 по теме: ”Интерполяция функций”
Выполнил: Востропятов Н. А.
Группа: УИ0301
Вариант: №9
Проверил: Митихин В. Г.
1. Условие.
Точки для многочленов:
Ньютона: x=0.06;
Лагранжа: x=0.48.
Заданы следующие узлы:
|
№ узла |
0 |
1 |
2 |
3 |
4 |
5 |
|
x |
0.35 |
0.45 |
0.50 |
0.55 |
0.65 |
0.75 |
|
y=f(x) |
-3.7555 |
-3.4890 |
-3.3250 |
-3.1385 |
-2.2690 |
-2.1375 |
2. Составим интерполяционный многочлен Ньютона второй степени.
Для интерполирования воспользуемся первой формулой Ньютона, т. к. будет необходимо провести интерполирование вперёд.
![]()
Для квадратичной интерполяции (n=2) многочлен будет выглядеть так:
![]()
Выберем удобные для интерполирования узлы и составим таблицу конечных разностей:
|
x |
y |
∆y |
∆2y |
|
0.05 |
-4.1710 |
0.0380 |
0.0105 |
|
0.10 |
-4.1330 |
0.0485 |
|
|
0.15 |
-4.0845 |
|
|
Подставим в формулу:

Посчитаем значение функции в заданной точке x=0.06:
![]()
Таблица значений построенных вручную интерполяционных многочленов второй степени в выбранных узлах:
|
xi |
0.05 |
0.10 |
0.15 |
|
P2(xi) |
-4.1710 |
-4.1330 |
-4.0855 |
|
Y=f(xi) |
-4.1710 |
-4.1330 |
-4.0845 |
3. Программа. Язык – Паскаль.
uses crt;
type
knot=record
x,y:real;
end;
knottp=array[0..20] of knot;
var
xl,E,E1,A,B: real;
iores,n,i,k: byte;
knots: knottp;
L: array[1..10] of real;
function Lx(knots: knottp; xl: real; k:byte): real;
var
L,l1:real;
i,j:byte;
begin
L:=0;
for i:=0 to k do
begin
l1:=1;
for j:=0 to k do
if i<>j then l1:=(xl-knots[j].x)/(knots[i].x-knots[j].x)*l1;
L:=L+l1*knots[i].y;
end;
Lx:=L;
end;
begin
clrscr;
{$I-}
repeat
write('Введите аpгумент искомого узла xl: '); read(xl);
iores:=ioresult;
if iores<>0 then writeln('Ошибка! Еще pазок...',#10#13) else break;
until iores=0;
repeat
write('Введите наибольшую степень многочлена n: '); read(n);
iores:=ioresult;
if iores<>0 then writeln('Ошибка! Еще pазок...',#10#13) else break;
until iores=0;
repeat
write('Введите точность вычисления E: '); read(E);
iores:=ioresult;
if iores<>0 then writeln('Ошибка! Еще pазок...',#10#13) else break;
until iores=0;
writeln;
for i:=0 to n do
begin
repeat
write('Введите x',i,', y',i,': '); readln(knots[i].x,knots[i].y);
iores:=ioresult;
if iores<>0 then writeln('Ошибка! Еще pазок...',#10#13) else break;
until iores=0;
end;
{$I+}
k:=1;
B:=Lx(knots,xl,k);
L[k]:=B;
repeat
A:=B;
k:=k+1;
B:=Lx(knots,xl,k);
L[k]:=B;
E1:=abs(B-A);
until (E1<=E)or(k>=n);
writeln;
writeln('Значения многочленов Лагpанжа:');
for i:=1 to k do writeln('L',i,'=',L[i]:6:6);
writeln('Нажмите любую клавишу...');
repeat until keypressed;
end.
Результаты выполнения:
Введите аpгумент искомого узла xl:0 .48
Введите наибольшую степень многочлена n: 4
Введите точность вычисления E: 0.00001
Введите x0, y0: 0.35 -3.7555
Введите x1, y1: 0.45 -3.489
Введите x2, y2: 0.50 -3.325
Введите x3, y3: 0.55 -3.1385
Введите x4, y4: 0.65 -2.692
Значения многочленов Лагpанжа:
L1=-3.409050
L2=-3.393060
L3=-3.393216
L4=-3.393216
Нажмите любую клавишу...
Таблица результатов полученных программой:
|
Число узлов (n+1) |
Ln(b) |
Оценка погрешности |
|
2 |
-3.409050 |
0.01599 |
|
3 |
-3.393060 |
0.000156 |
|
4 |
-3.393216 |
0 |
4. График зависимости погрешности от количества узлов:

5. Решение задачи с помощью программного математического пакета MathCAD 12.

