МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
ДЕРЖАВНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Звіт
до лабораторної роботи №3
з курсу "Чисельні методи"
на тему:
«Інтерполяція функцій»
Лабораторна робота №3
Мета: побудувати інтерполяційний многочлен Ньютона через розділені різниці (3.2) і обчислити її значення у точках , , .
Варіант №3
Постановка задачі:
Для функції, заданої таблично, побудувати інтерполяційний многочлен Ньютона через розділені різниці (3.2) і обчислити її значення у точках , , .
Функція А
0,0
0,00000
0,5
0,47942
0,1
0,09983
0,6
0,56464
0,2
0,19866
0,7
0,64421
0,3
0,29552
0,8
0,71735
0,4
0,38941
0,9
0,78332
Точки інтерполяції
№
3
0,115
0,256
0,669
Теоретичні відомості:
За означенням розділена різниця нульового порядку від функції по одному вузлу збігається з значенням функції . Розділені різниці першого порядку визначаються рівністю:
,
різниці другого порядку рівністю:
і т.д. Розділені різниці -го порядку визначаються через різниці порядку за формулою:
.
Якщо інтерполяційний многочлен для функції , то його значення у вузлах збігається із значенням функції , а отже, збігаються і розділені різниці, тому інтерполяційний многочлен для функції можна записати у вигляді:
Такий запис інтерполяційного многочлена називають інтерполяційним многочленом у формі Ньютона, а формулу (1) – інтерполяційною формулою Ньютона.
Текст програми:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
#include <math.h>
#define n 10
#define m 3
main (void)
{int i, j;
double x[n], F[n], in[m], FR[n];
ifstream f("file1.txt");//Vidkruvajem fail dja zchutyvannja
while(!f.eof()) //Zchutyje dani z faily
{ for(i=0;i<n;i++)
{f>>x[i];
f>>F[i]; }
for(i=0;i<m;i++)
f>>in[i]; }
cout<<"\n Vxidni dani:\nx f(x)\n";
for(i=0;i<n;i++)
{cout<<x[i]<<" ";
cout<<F[i]<<"\n"; }
cout<<"\nx' x'' x'''\n";
for(i=0;i<m;i++)
cout<<in[i]<<" ";
cout<<"\n";
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<<"\nRozvjazok:";
for(j=0; j<m; j++)
{for(i=n-2, sav1=FR[n-1]; i>=0; i--)
sav1 = sav1*(in[j]-x[i])+FR[i]; //Rahyjem znachennja fynkzii v tochkah
cout<<"\nf("<<in[j]<<")="<<sav1;}
cout<<"\n\n";
retur0;}Приклад:
Висновок: На цій лабораторній роботі я навчилася будувати інтерполяційний многочлен Ньютона через розділені різниці (3.2) і обчислити її значення у точках , , , для функції, заданої таблично. WWW.not321.com(nl)