Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Лабораторна робота №4
Тема:
«Дослідження похибки інтерполяції функцій многочленом Ньютона»
Завдання:
Для функції заданої на рівномірній сітці в точках на інтервалі
знайти аналітичний вираз залишкового члена інтерполяційного многочлена;
обчислити його максимальне значення і значення в точках ;
побудувати інтерполяційний многочлен Ньютона через розділені різниці;
обчислити похибки інтерполяції у точках і порівняти їх із значеннями залишкового члена.
N
18
3
0
2
Короткі теоретичні відомості
Замінюючи функцію інтерполяційним многочленом , ми припускаємо похибку , яка називається похибкою інтерполяції або, що те ж саме, залишковим членом інтерполяційної формули. Ясно, що у вузлах інтерполяції ця похибка дорівнює нулю.
Похибку інтерполяції можна подати у вигляді
,
де і залежить від x.
Звідси випливає оцінка
,
де ,
.
1. і 2. Знаходження аналітичного виразу залишкового члена інтерполяційного многочлена і обчислення його максимального значення і значення в точках за допомогою пакету Maple 12.
> /
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
/
> /
3. і 4. Побудова інтерполяційного многочлена Ньютона і обчислення похибок інтерполяції в точках за допомогою мови програмування С++.
Код програми:
#include <iostream.h>
#include <math.h>
#define k 4
const double X[k] = {0.000, 0.666, 1.333, 2.0};
const double x1 = 0.233,
x2 = 1.109,
x3 = 1.894;
double Rozd_Rizn[k];
double F[k];
void Calc_Rozd_Rizn();
double Calc_Func(double);
double f(double);
void main()
{
for(int i = 0; i < k; i++)
F[i] = f(X[i]);
cout<<" x\t F(x)\n";
for(i = 0; i < k; i++)
cout<<X[i]<<"\t"<<F[i]<<endl;
cout<<"\nx1 = "<<x1<<endl
<<"x2 = "<<x2<<endl
<<"x3 = "<<x3<<endl;
Calc_Rozd_Rizn();
//for(i = 0; i < k; i++)
// cout<<Rozd_Rizn[i]<<endl;
cout<<endl;
cout<<"Rn(x1) = "<<fabs(f(x1) - Calc_Func(x1))<<endl
<<"Rn(x2) = "<<fabs(f(x2) - Calc_Func(x2))<<endl
<<"Rn(x3) = "<<fabs(f(x3) - Calc_Func(x3))<<endl;
}
void Calc_Rozd_Rizn()
{
for(int i = 0; i < k; i++)
{
Rozd_Rizn[i] = 0;
for(int j = 0; j < i + 1; j++)
{
double temp = 1;
for(int l = 0; l < i + 1; l++)
if(l != j) temp = temp * (X[j] - X[l]);
Rozd_Rizn[i] += F[j] / temp;
}
}
}
double Calc_Func(double x)
{
double Ln = 0;
for(int i = 1; i < k + 1; i++)
Ln = (x - X[k - i]) * Ln + Rozd_Rizn[k - i];
return Ln;
}
double f(double x)
{
double func = 2 * log(x + 2);
return func;
}
Результат виконання програми:
/
Висновок:
В процесі виконання даної лабораторної роботи я дослідив похибки інтерполяції функції многочленом Ньютона. Їх значення і значення залишкового члена у точках дещо відрізняються, проте похибки все-одно менші за максимальне значення залишкового члена обчислене в Maple.