Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / 4

.doc
Скачиваний:
22
Добавлен:
30.04.2013
Размер:
81.92 Кб
Скачать

МИНИСТЕРСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ ПО СВЯЗИ И ИНФОРМАТИЗАЦИИ Московский технический университет связи и информатики

Кафедра вычислительной математики и программирования

Численные методы и оптимизация Лабораторная работа №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.

6

Соседние файлы в папке Лабы