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

Лабы / _labs / va4chisleniemetodi / Лаба 3 / Аппроксимация функций

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

Численные методы

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

Аппроксимация функций

Задание:

Выполнить линейную, квадратичную и кубическую интерполяцию таблично заданной функции .

Таблица 1

0.4

0.45

0.55

0.6

0.7

0.8

-3.632

-3.489

-3.1385

-2.928

-2.429

-1.816

Вычислить значение интерполирующей функции в точках и . Вычислить оценку погрешности интерполяции.

Исследование задания:

Требуется построить интерполяционные многочлены Ньютона 1, 2 и 3 степени и вычислить значение интерполирующего многочлена в точке .

Для этого проведем исследование задания и рассмотрим интерполяционный многочлен Ньютона.

Если интерполируемая функция f(x) задана в (n+1) равностоящих узлах, т.е. , то для ее интерполяции удобнее использовать формулы Ньютона.

Будем искать интерполирующий полином степени n в виде:

(*)

Определим конечные разности:

В общем случае справедлива рекуррентная формула:

=1, 2, … - порядок конечной разности.

Для определения коэффициентов воспользуемся условием интерполяции:

,

Подставляя в (*) , получим :

Пусть , тогда:

Пусть x=x2, тогда:

Для коэффициентов справедлива формула:

Подставляя в формулу (*) значения коэффициентов получим первую формулу Ньютона:

или

, – ближайший к точке узел слева.

Для решения требуемой задачи примем . Тогда

Получим таблицу конечных разностей:

Таблица 2

1.35

4.1295

0.7985

0.0495

0.0015

0

1.40

4.9280

0.8480

0.0510

0.0015

1.45

5.7760

0.8990

0.0525

1.50

6.6750

0.9515

1.55

7.6265

Построим и вычислим :

Построим и вычислим :

Построим и вычислим :

Определим погрешность для линейной интерполяции:

Определим погрешность для квадратичной интерполяции:

Определим погрешность для кубической интерполяции:

Анализируя погрешности, можно сделать вывод, что интерполируемая функция близка к кубической, так как .

Для данной таблицы (см. табл. 1) можно построить интерполяционный многочлен Лагранжа, т.к. формула Лагранжа универсальна:

Оценку погрешности определяют по формуле:

Для обеспечения большей точности интерполяции перенумеруем узлы интерполяции:

Определим погрешности:

Результаты интерполяций сведены в таблице 3:

Таблица 3

Число узлов

Оценка погрешности

Метод Ньютона

Метод Лагранжа

2

5.0877

-3.0122

0.00594

0.00312

3

5.09364

-3.01532

0.000048

0.000144

4

5.093592

-3.015176

0

Для явного построения многочлена Лагранжа воспользуемся формулой:

Коэффициенты многочлена – решение системы уравнения относительно неизвестных

Решим систему методом Гаусса, используя подпрограмму из лабораторной работы №1:

Интерполяционный многочлен Лагранжа второй степени в явном виде:

Текст программы

Program NewtonInterpolation;

Uses CRT;

Var

L,R:array[1..10] Of Real;

t:array[1..10,1..10] Of Real;

a,b,n,i,j:Byte;

h,q,x0,m:Real;

Begin

CLRSCR;

Writeln('Vvedite 4islo yzlov N');

Readln(N);

For i:=1 To N Do

Begin

Write('x[',i,']=');

Readln(t[1,I]);

End;

For i:=1 To N Do

Begin

Write('y[',i,']=');

ReadLn(t[2,I]);

End;

Write('x0=');

Readln(x0);

If N>1 Then

q:=(x0-t[1,1])/(t[1,2]-t[1,1]);

a:=N+1;

For i:=3 To a Do

Begin

For j:=1 To N Do

Begin

If i+j-3<N Then

t[i,j]:=t[i-1,j+1]-T[i-1,j];

End;

End;

For i:=1 To N Do

Begin

Writeln;

For j:=1 To N+1 Do

If i+j-3<N Then

Write(t[j,i]:0:5,' ');

End;

Writeln;

Writeln;

For i:=1 To N Do

Begin

L[i]:=t[2,1];

m:=1;

For j:=2 To i Do

Begin

m:=m*(q+2-j)/(j-1);

If j=i then

R[j-1]:=m*t[j+1,1];

L[i]:=L[i]+m*t[j+1,1];

End;

End;

For i:=2 To N Do

Begin

Write('P(',I-1,')=',L[I]:0:6,' ');

If i<>N Then

Writeln('R(',I-1,')=',R[I]:2:6);

End;

Readln;

End.

q=(x0-t[1,1])/(t[1,2]-t[1,1])

t[i,j]=t[i-1,j+1]-t[i-1,j]

L[i]=t[2,1]

m=1

m=m*(q+2-j)/(j-1)

R[j-1]=m*t[j+1,1]

L[i]=L[i]+m*t[j+1,1]

Построим наглядный график интерполяционных многочленов в пакете MatLab:

>> x1=[1.35 1.4];

>> y1=[4.1295 4.9280];

>> p1=polyfit(x1,y1,1);

>> x2=[1.35 1.4 1.45];

>> y2=[4.1295 1.9280 5.7760];

>> p2=polyfit(x2,y2,2);

>> x3=[1.35 1.4 1.45 1.5];

>> y3=[4.1295 4.9280 5.7760 6.6750];

>> p3=polyfit(x3,y3,3);

>> stem(x3,y3)

>> hold on

>> h=1.2:0.05:1.6;

>> y1=polyval(p1,h);

>> y2=polyval(p2,h);

>> y3=polyval(p3,h);

>> plot(h,y1,h,y2,h,y3)

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