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

Московский Технический Университет Связи и Информатики

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

Лабораторная работа №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.

Соседние файлы в папке laba 3 Аппроксимация
  • #
    30.04.2013214.53 Кб313.doc
  • #
    30.04.20139.51 Кб283.mcd