Лабы / _labs / va4chisleniemetodi / Лаба 3 / Аппроксимация функций
.doc
Численные методы
Лабораторная работа №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)

