Автор: Пользователь скрыл имя, 17 Сентября 2013 в 23:31, курсовая работа
Мета дослідження.
Метою роботи є дослідження можливості використання інтерполяційного многочлена Лагранжа для інтерполювання функцій.
Задача дослідження:
проаналізувати існуючі методи інтерполювання функції та обґрунтувати переваги використання інтерполяційного многочлена Лагранжа по відношенню до існуючих;
розробити алгоритм інтерполювання функції та здійснити вибір най-оптимальнішого з них;
розробити програму інтерполюванням функції з використанням інтерполяцій-ного многочлена Лагранжа та провести її тестування.
АНОТАЦІЯ…………………………………………………………………………...
4
ВСТУП………………………………………………………………………………...
5
1 АНАЛІЗ ТЕОРЕТИЧНОЇ БАЗИ МЕТОДІВ
ІНТЕРПОЛЮВАННЯ ФУНКЦІЇ………………………………………………….
6
2 РОЗРОБКА АЛГОРИТМІВ ТА ВИБІР ОПТИМАЛЬНОГО
АЛГОРИТМУ……………………………………………………………………...
17
3 ПРИКЛАД ПРОГРАМИ ІНТЕРПОЛЮВАННЯ ФУНКЦІЇ ЗА ДОПОМОГОЮ . ІНТЕРПОЛЯЦІЙНОГО МНОГОЧЛЕНА ЛАГРАНЖА……………………….
21
3.1 Інструкція користувача……………………………………………………....
21
3.2 Лістинг програми……………………………………………………………
22
3.3 Опис програми……………………………………………………………....
24
3.4 Тестування програми……………………………………………………......
25
ВИСНОВКИ………………………………………………………………………......
26
ПЕРЕЛІК ПОСИЛАНЬ……………………………………………
1. Відкриття меню здійснюється
натисненням миші. Щоб вибрати
будь-яку команду меню, досить
установити курсор на імені
команди і натиснути ліву
2. Текст програми міститься в одному файлі: файл основної програми з іменем Kyrsova. Для відкриття його необхідно вибрати у меню Файл команду Відкрити, що відкриває діалогове вікно з переліком файлів поточної папки.
3. Вибір необхідного файлу з цього списку і наступне натискання кнопки OK приводить до появи вікна Редактора/Налагодження, який дає змогу не тільки коректувати програму, але і проводити її відладку. Запуск програми здійснюється вибором в меню Виконати команди виконати, або натисненням клавіші F9.
4. В результаті
запуску програми з’явиться
3.2 Лістинг програми
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
float y[11]={0.16667,0.08334,0.
0.02778,0.01852,0.01316,0.
0.007576,0.006024,0.004902,0.
float x[11]={1,2,3,4,5,6,7,8,9,10,
float L(float xp,int n,int i)
{
float Chesl; float Znam;
Chesl=1; Znam=1; int k;
for (k=0; k!=n; k++)
{
if (k==i) continue;
Chesl *=xp-x[k]; //Обчислення чисельника многочлена Лагранжа
}
for(k=0; k!=n; k++)
{
if (x[i]==x[k]) continue;
Znam *=x[i]-x[k]; // Обчислення знаменника многочлена Лагранжа
}
return Chesl/Znam;
}
int main()
{
system("chcp 1251");
system("cls");
int n,a,b;float px;
cout<<"Введіть проміжок:"<<endl; //Введення даних
cout<<" Введіть а:"<<endl;
cin>>a;
cout<<endl;
cout<<" Введіть b:"<<endl;
cin>>b;
cout<<endl;
cout<<" Введіть значення x: ";
cin>>px;
cout<<endl;
float S=0;
n=b-a+1; //обчислення кількості вузлів
for (int i=0; i!=n; i++)
S+=y[i]*L(px,n,i); //Обчислення многочлена Лагранжа в даній точці
printf("Ваш результат: %f ",S); //Результат обчислення
getch();
}
3.3 Опис програми
В даному файлі описані всі змінні та присвоєні їм певні значення, необхідні для обчислення інтерполювання з використанням інтерполяційного многочленна Лагранжа, а також власний процес обчислення методу. З метою ефективного використання пам’яті для збереження початкових значень системи, вони зберігаються в динамічній пам’яті, що дозволяє відводити під них місце динамічного розміру в залежності від кількості заданих даних.
Файл Kyrsova-Lagranzh.PAS. містить описи структури методу та функцій, що використовуються основною програмою, та описи внутрішніх операторів. Нижче наведено список загальних операторів, їх призначення та основні властивості.
Команда int описує цілий тип змінних.
Команда float описує дійсний тип змінних.
Команда cout призначена для виведення значень на екран і має такий загальний вигляд:
cout < список >.
Команда cin призначена для введення даних і має такий загальний вигляд:
cin (< список змінних >).
Оператор циклу for призначений для повторного виконання операцій, число яких заздалегідь відоме. Оператор циклу for ще називають оператор циклу з параметром. Загальний вигляд оператор циклу for:
for (< початок масиву>кінець масиву < крок проходу по масиву >).
Оператор умови if використовується для виразів результат яких має стандартний булевский тип. Неповне розгалуження реалізується за допомогою оператора if і має такий загальний вигляд:
if < логічний вираз { < команда >}.
Оператор continue призначений до поверненння дії назад і має такий загальний вигляд:
<умова> continue.
Команда getch зупиняє роботу програми.
3.4 Тестування програми
На рис.3.1 подано екранне зображення результатів обчислення програми, розробленої в середовищі системи C++.
Рисунок 3.1 ─ Результати обчислення програми, розробленої
в середовищі системи C++
ВИСНОВКИ
1. Проаналізовано існуючі методи інтерполювання функції та обґрунтовано переваги інтерполювання функції з використанням інтерполяційного многочленна Лагранжа по відношенню до існуючих, які полягають у тому, що даний метод досить простий для розуміння та точний, що і було підтверджено математично. Проте при великій кількості вузлів інтерполювання, обчислення стають досить складними і громісткими, тому в таких умовах для знаходження значення функції зручніше використовувати схему Ейткіна.
2. Запропоновано два алгоритми обчислення інтерполювання функції. Проведено аналіз ефективності розроблених алгоритмів за комплексним критерієм ефективності, що враховує час виконання та розмір алгоритму. Комплексний коефіцієнт ефективності описаних вище алгоритмів складає 0,8.
3. Розроблено програму інтерполювання функції з використанням інтерполяційного многочлена Лагранжа та проведено її тестування, яке підтвердило її правильну та коректну роботу.
ПЕРЕЛІК ПОСИЛАНЬ