Міністерство науки і освіти України
Національний університет “Львівська політехніка”
кафедра прикладної математики
Звіт
Лабораторна робота № 4з курсу "Чисельні методи"
на тему: " Дослідження похибки інтерполяції функції многочленом Ньютона"
Лабораторна робота №4
Тема. Дослідження похибки інтерполяції функції многочленом Ньютона.
Мета. Оволодіти методами чисельного розв’язування нелінійних рівнянь та дослідження оцінки залишкового члена інтерполяційного многочлена, а також набути практичних навиків у їх реалізації на ЕОМ.
Постановка задачі: Для функції , заданої на рівномірній сітці в точках на інтервалі :
знайти аналітичний вираз залишкового члена інтерполяційного многочлена;
обчислити його максимальне значення і значення в точках ;
побудувати інтерполяційний многочлен Ньютона через розділені різниці;
обчислити похибки інтерполяції у точках і порівняти їх із значеннями залишкового члена.
Функція , значення 4, а=0, в=2.
Опис алгоритму оцінки залишкового члена інтерполяційного многочлена
Проведемо дослідження похибки, яка виникає при заміні функції інтерполяційним многочленом. Нехай функція визначена в вузлі інтерполяції , а - інтерполяційний многочлен. Залишковий член (похибка) інтерполяційного многочлена має вигляд: .
Очевидно, що у вузлахінтерполяції цей залишковий член дорівнює нулю. Припустимо, що функція має неперервну похідну на відрізку , тобто .
Похибку інтерполяції можна подати у вигляді
,
де і залежить від x.
Звідси випливає оцінка
,
де , .
Знайдемо аналітичний вираз залишкового члена інтерполяційного многочленна та обчислимо його максимальне значення і значення в точках за допомогою пакету прикладних програм Maple:
Побудуємо інтерполяційний многочлен Ньютона через розділені різниці та обчислимо похибки інтерполяції у точках і порівняємо їх із значеннями залишкового члена. Наведемо текст програми, на мові С++, яка реалізує перераховані вище завдання:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{int i, j, n, k=0;
double x[10], xx[10], F[10], in[10], FR[10], a, b, h, x1, F1[10], P;
a=0; b=2; n=4;
h=(b-a)/n;
i=0;
x1=a;
cout<<"Vchidni dani:\nx f(x)\n";
while (x1<=b)
{
F1[i]=3*exp(0.5*x1);
cout<<x1<<" "<<F1[i]<<"\n";
x[i]=x1;
F[i]=F1[i];
i++;
x1=a+i*h;
}
double sav1;
FR[0]=F[0];
for(j=1; j<=n; j++)
{
for(i=j; i<=n; i++) FR[i]=(F[i]-F[i-1])/(x[i]-x[i-j]);
for(i=j; i<=n; i++) F[i]=FR[i];
}
cout<<"\n\n";
xx[0]=0.114;
xx[1]=0.357;
xx[2]=0.802;
for(j=0; j<3; j++)
{
for(i=n-1, sav1=FR[n]; i>=0; i--)
sav1 = sav1*(xx[j]-x[i])+FR[i];
cout<<"L("<<xx[j]<<") = "<<sav1;
x1=3*exp(0.5*xx[j]);
cout<<"\n f = "<<x1<<"";//Znachennja mnogochlena
cout<<"\n L-f = "<<x1-sav1<<"\n\n";//Pohubka
}
cout<<"\n\n";
return 0;
}
Результат виконання:
Висновок: На цій лабораторній роботі я оволодів методами чисельного розв’язування нелінійних рівнянь та дослідження оцінки залишкового члена інтерполяційного многочлена, а також набути практичних навиків у їх реалізації на ЕОМ.