Інтерполяція функцій

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Інші

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Лабораторна робота №3 Тема: «Інтерполяція функцій» Завдання: Для функції, заданої таблично, побудувати інтерполяційний многочлен Ньютона через розділені різниці і обчислити її значення у точках , , . Функція С      0,0 0,00000 0,5 1,71828  0,1 0,22140 0,6 2,32011  0,2 0,49182 0,7 3,05519  0,3 0,82211 0,8 3,95303  0,4 1,22554 0,9 5,04964   Точки інтерполяції №     8 0,087 0,441 0,777   Короткі теоретичні відомості: Найпростіша задача наближення функції полягає у наступному. В дискретні моменти часу  спостерігаються (відомі) значення функції ; необхідно знайти її значення при інших . За означенням розділена різниця нульового порядку  від функції  по одному вузлу  збігається з значенням функції . Розділені різниці першого порядку визначаються рівністю: , різниці другого порядку рівністю:  і т.д. Розділені різниці -го порядку  визначаються через різниці  порядку за формулою: . Лема. Справджується рівність . Якщо  інтерполяційний многочлен для функції , то його значення у вузлах  збігається із значенням функції , а отже, збігаються і розділені різниці, тому інтерполяційний многочлен для функції  можна записати у вигляді:  (1) Такий запис інтерполяційного многочлена називають інтерполяційним многочленом у формі Ньютона, а формулу (1) – інтерполяційною формулою Ньютона. Якщо відомі розділені різниці (таблиця розділених різниць), то многочлен Ньютона зручно обчислювати за схемою Горнера:  (2) Неважко помітити, що коли покласти  , то . Це рекурентне співвідношення легко програмується. Код програми: #include <iostream.h> #define k 10 const double X[k] = {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9}; const double F[k] = {0.00000, 0.22140, 0.49182, 0.82211, 1.22554, 1.71828, 2.32011, 3.05519, 3.95303, 5.04964}; const double x1 = 0.087, x2 = 0.441, x3 = 0.777; double Rozd_Rizn[k]; void Calc_Rozd_Rizn(); double Calc_Func(double); void main() { cout<<" x\t F(x)\n"; for(int i = 0; i < k; i++) cout<<X[i]<<"\t"<<F[i]<<endl; cout<<"x1 = "<<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<<"f(x1) = "<<Calc_Func(x1)<<endl <<"f(x2) = "<<Calc_Func(x2)<<endl <<"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; } Результат виконання програми: / Висновок: В процесі виконання даної лабораторної роботи я побудував інтерполяційний многочлен Ньютона через розділені різниці для функції, заданої таблично. Так чином побудувавши многочлен Ньютона я мав змогу приблизно обчислювати значення функції в будь-якій точці на інтервалі, і обчислив значення функції в точках , , .
Антиботан аватар за замовчуванням

2015

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!