МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний Університет „Львівська Політехніка”
Звіт до лабораторної роботи №3
на тему:
„Інтерполяція функцій”
Варіант В10.
Завдання:
Для функції, заданої таблично, побудувати інтерполяційний многочлен Ньютона через розділені різниці і обчислити її значення у точках x΄, x΄΄, x΄΄΄.
Функція B
x
f(x)
0.0
2.00000
0.1
1.95533
0.2
1.82533
0.3
1.62160
0.4
1.36235
0.5
1.07073
0.6
0.77279
0.7
0.49515
0.8
0.26260
0.9
0.09592
Точки інтерполяції
№
x΄
x΄΄
x΄΄΄
10
0.188
0.258
0.691
Розв’язання:
1. Використовуючи формули для розділених різниць:
f(x0;...;xk)= (f(x1;...;xk)-f(x0;...;xk-1))/(xk-x0), k=1,2,...,n,
знаходимо всі різниці до 9 порядку включно.
2. Будуємо таблицю розділених різниць:
f(x0) f(x0;x1) f(x0;x1;x2) ..... f(x0;x1;...;xn)
f(x1) f(x1;x2) f(x1;x2;x3) .....
.................................................
f(xn) f(xn-1;xn) f(xn-2;xn-1;xn).
3. Записуємо інтерполяційний многочлен Ньютона за схемою Горнера (оскільки розділені різниці вже відомі):
Ln(x) = f(x0) + (x – x0)(f(x0;x1) + (x – x1)(f(x0;x1;x2) + ... + (x – xn-1)f(x0;x1;...;xn))...).
4. Обчислюємо значення многочлена в точках інтерполяції.
Код програми на мові С++:
#include <fstream.h>
int i, j;
char m;
double s, a [10][11]={{0.0, 2.0}, {0.1, 1.95533}, {0.2, 1.82533}, {0.3, 1.62160},\
{0.4, 1.36235}, {0.5, 1.07073}, {0.6, 0.77279}, {0.7, 0.49515}, {0.8, 0.26260}, {0.9, 0.09592}};
double polinom (double Matrix [10][11], double x);
double polinom (double Matrix [10][11], double x) // функція для обчислення ІМН
{ // за схемою Горнера
double roz;
roz=Matrix[0][10];
for(int l=9;l>=1;l--)
roz=roz*(x-Matrix[l-1][0])+Matrix[0][l];
return roz;
}
void main ()
{
for (j=2;j<=10;j++) // обчислення різниць
for(i=0;i<=10-j;i++)
a[i][j]=(a[i+1][j-1]-a[i][j-1])/(a[i+j-1][0]-a[i][0]);
cout<<"Interpolacijnyj polinom Newtona:"<<'\n'<<"L[9](x)="<<a[0][1]; // вивід ІМН
for(i = 0;i<=8;i++)
cout<<"+(x-"<<a[i][0]<<")("<<a[0][i+2];
cout<<")))))))))."<<'\n';
do
{
cout<<"Vvedit tochku x"<<'\n'; // обчислення значення ІМН
cin>>s; // в точках інтерполяції
cout<<"Znachennja polinoma:"<<'\n';
s=polinom(a,s);
cout<<s<<'\n';
cout<<"She tochku? (y/n)"<<'\n';
cin>>m;
}
while (m=='y');
}
Контрольний приклад:
Висновок: під час лабораторної роботи я ознайомився зі способом наближення функцій методом побудови інтерполяційного многочлена Ньютона. Для реалізації цього методу на ПК використав побудову таблиці розділених різниць, а також схему Горнера.
СПИСОК ЛІТЕРАТУРИ
Бахвалов Н.С., Жидков Н.П., Кобельков Г.М.. Численные методы.-М.:Наука, 1987.
Гаврилюк І.П., Макаров В.Л. Методи обчислень. –К.:Вища школа, 1995, ч.1, ч.2.
Данилович В., Кутнів М. Чисельні методи.-Львів:Кальварія, 1998.
Калиткин Н.Н. Численные методы.-М.:Наука, 1978.
Самарский А.А., Гулин А.В. Численные методы. - М.:Наука, 1989.
Трифонов Н.П., Пасхин Е.Н. Практикум работы на ЭВМ.-М.: Наука, 1982.