Лабы / _labs / var13chisleniemetodi / laba 3 Аппроксимация / 3
.docМосковский Технический Университет Связи и Информатики
Численные методы.
Лабораторная работа №3
Аппроксимация функции.
Аппроксимация функции
Задание: выполнить линейную, квадратичную и кубическую интерполяцию таблично заданной функции y=f(x).
|
X |
0.45 |
0.5 |
0.6 |
0.65 |
0.75 |
0.8 |
|
Y=f(x) |
-3.489 |
-3.325 |
-2.928 |
-2.692 |
-2.1375 |
-1.816 |
Выяснить значения интерполирующей функции в точках a=0.26 b=0.64 .Вычислить оценку погрешности интерполяции.
Значение функции f(x) известны в точках X0,X1,…,Xn, называемых узлами интерполяции.
Требуется построить некоторую функцию g(x,A0,A1,…,An) такую что
g(x,A0,A1,…,An)=f(x) - Условие интерполяции.
В случае параболической интерполяции функция g(x,A0,A1,…,An) есть многочлен (полином) степени не выше n
g(x,A0,A1,…,An)=A0+A1x+A2x^2+…+Anx^n
Тогда условие интерполяции имеет вид:
F(xi)= A0+A1xi+A2xi^2+…+Anxi^n , I=0,n
В нашем случае можно построить интерполяционный многочлен Лагранжа по формуле
(X-X0)*(X-X1)…(X-Xi-1)*(X-Xi+1)…(X-Xn) *F(Xi)
(Xi-X0)*(Xi-X1)…(Xi-Xi-1)*(Xi-Xi+1)…(Xi-Xn)
Степень многочлена не выше n. Из условия интерполяции следует Ln(Xi)=F(Xi);
Убедимся что многочлен первой степени:
L1(X)=(X-X1) *Y0 + (X-X0) *Y1
X0-X1 X1-X0
удовлетворяет условию: L1(X0)=Y0, L1(x1)=Y1
Для обеспечения большей точности интерполяции переименуем узлы интерполяции: в порядке ближайших к b = 0.64
|
I |
0 |
1 |
2 |
3 |
4 |
5 |
|
Xi |
0.65 |
0.6 |
0.75 |
0.5 |
0.8 |
0.45 |
|
Yi |
-2.692 |
-2.928 |
-2.137 |
-3.325 |
-1.816 |
-3.489 |
Многочлен Лагранжа при n=1
L1(x0)=-2.692
Многочлен Лагранжа при n=2

L2(x1)=
-2.928 Многочлен Лагранжа при n=3

L3(x2)= -2.138
Погрешности:
Погрешность для линейной интерполяции: E2=2.2*10^-3
Погрешность для квадратичной интерполяции: E3=8.8*10^-5
Интерполяционные формулы Ньютона
Требуется построить интерполяционные многочлены Ньютона 1, 2 и 3 степени и вычислить значение интерполирующего многочлена в точке x=0.64
Для этого проведем исследование задания и рассмотрим интерполяционный многочлен Ньютона.
Если
интерполируемая функция f(x)
задана в (n+1)
равностоящих узлах, т.е.
,
то для ее интерполяции удобнее использовать
формулы Ньютона.
Будем искать интерполирующий полином степени n в виде:
(*)
Определим конечные разности:

В общем случае справедлива рекуррентная формула:
![]()
=1,
2, … - порядок конечной разности.
Для
определения коэффициентов
воспользуемся
условием интерполяции:
,
![]()
![]()
Подставляя
в (*)
,
получим
:
Пусть
,
тогда:
![]()
![]()
Пусть x=x2, тогда:
![]()
![]()
Для
коэффициентов справедлива формула:
![]()
Подставляя в формулу (*) значения коэффициентов получим первую формулу Ньютона:
![]()
или
![]()
,
– ближайший к точке
узел слева.
Для
решения требуемой задачи примем
.
Тогда
![]()

Получим таблицу конечных разностей:
Таблица 2
|
|
|
|
|
|
|
|
0.6 |
-2.928 |
0.236 |
0.027 |
0.0015 |
0 |
|
0.65 |
-2.692 |
0.263 |
0.0285 |
0.0015 |
|
|
0.7 |
-2.429 |
0.2915 |
0.03 |
|
|
|
0.75 |
-2.1375 |
0.3215 |
|
|
|
|
0.8 |
-1.816 |
|
|
|
|
Построим
и вычислим
:
![]()
Построим
и вычислим
:
![]()
![]()
Построим
и вычислим
:
![]()
![]()
Определим погрешность для линейной интерполяции:
![]()
Определим погрешность для квадратичной интерполяции:
![]()
Определим погрешность для кубической интерполяции:
![]()
Анализируя погрешности, можно сделать вывод, что интерполируемая функция близка к кубической, так как R3(x)<R2(x)
Результаты интерполяций сведены в таблице 3:
Таблица 3
|
Число узлов n+1 |
Pn(a) |
Ln(b) |
Оценка погрешности |
|
|
|
|
Метод Ньютона |Rn(a)| |
Метод Лагранжа Rn(b)| |
|
|
2 |
-2.7392 |
-2,739 |
0.0021599 |
0,0022 |
|
3 |
-2.74136 |
-2,741 |
0.000048 |
0,000088 |
|
4 |
-2.74131 |
-2,741 |
3.2*10^(-14) |
|
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;
Write('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('X=');
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:=1 To N Do
Begin
Write('P(',I-1,')=',L[I]:0:9,' ');
If I<>N Then
WriteLn('R(',I-1,')=',R[I]);
End;
ReadLn;
End.
