Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
/
ЛАБОРАТОРНА РОБОТА № 6
з дисципліни:
"Чисельні методи"
на тему:
«Інтерполяційна схема Ейткена»
Львів – 2018
ЛАБОРАТОРНА РОБОТА № 6
Тема роботи:
Інтерполяційна схема Ейткена.
Мета роботи:
Засвоїти теоретичний матеріалі методи апроксимації функцій, набути практичні навики знаходження наближених значень функцій.
Теоретичні відомості:
Схема Ейткена
На практиці зустрічаються випадки, коли потрібно мати значення інтерполяційного багаточлена Лагранжа в деякій точці х, а не загальний його вигляд. Тоді зручно користуватись інтерполяційною схемою Ейткена.
Обчислювальний алгоритм має такий вигляд:
причому
– інтерполяційний багаточлен Лагранжа за вузлами хо,х,...,хп. Кожен із отримують з та шляхом перехресного множення та ділення. Із застосуванням схеми Ейткена поступово можна залучати щораз нові значення вузлів хк доти, поки обчислення не засвідчать, що точність уже не зростає.
Варіант 24:
Користуючись таблицею значень cos(x), xє[0.75k, 0.8k] з певним кроком. Знайти наближене значення cos(x) при x=0.775, де k-списковий номер студента. Результати обчислень подати таблично. Похибку обчислити порівнянням з стандартним значенням косинуса. Порівняти з похибкою методу. Дослідити залежність кількості точок у схемі Ейткена (кроку обчислень) та точності результату. Провести не менше 8 реалізацій.
Код програми:
#include <Windows.h>
#include <cmath>
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
double sta, fin, x, h;
cout << "ЛАБОРАТОРНА РОБОТА №6" << endl;
cout << "Введіть початок інтервалу: ";
cin >> sta;
cout << "Введіть кінець інтервалу: ";
cin >> fin;
x = 0.775;
double val_cos = cos(x);
for (int l = 0; l < 11; l++) {
h = 0.01 + 0.003*l;
int n; // кількість елементів масиву
n = 1.5 + ((fin - sta) / h);
double* arr_x = new double[n], *arr_cos = new double[n], *arr_xk_x = new double[n];
double** arr_L; // матриця значень
arr_L = new double*[n - 1];
for (int i = 0; i < n - 1; i++)
arr_L[i] = new double[n - 1];
for (int i = 0; i < n; i++) { //ініціалізація початкових значень
arr_x[i] = sta + h*i;
arr_cos[i] = cos(arr_x[i]);
arr_xk_x[i] = arr_x[i] - x;
}
for (int j = 0; j < n - 1; j++) { //заповнення матриці Ейткена
int position = 0;
for (int i = j; i < n - 1; i++) {
if (j == 0) {
arr_L[i][j] = (arr_cos[i] * arr_xk_x[i + 1] - arr_cos[i + 1] * arr_xk_x[i]) / h;
}
else {
arr_L[i][j] = (arr_L[i - 1][j - 1] * arr_xk_x[i + 1] - arr_L[i][j - 1] * arr_xk_x[position]) / (arr_x[i + 1] - arr_x[position]);
position++;
}
}
}
cout<<endl<<"Крок : "<< h<<endl;
cout<<"Кількість елементів : "<< n<<endl;
cout<<"Обчислене значення : "<< arr_L[n - 2][n - 2] <<endl;
cout<<"Істинне значення : "<< val_cos <<endl;
cout<<"Похибка : "<<fabs(arr_L[n - 2][n - 2] - val_cos)<<endl;
}
system("pause>>void");
return 0;
}
Результат:
/ /
Графік:
/
Висновок:
В результаті виконання цієї лабораторної роботи я вивчила інтерполяційну схему Ейткена, провела залежність точності від кроку обчислення. З графіка видно, що чим менший крок, тим меншою є і абсолютна похибка обчислень. Також обчислила значення косинуса у точці 0,775 cos(0.775) = 0.7144210341.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!