Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
/
ЛАБОРАТОРНА РОБОТА № 4
з дисципліни:
"Чисельні методи"
на тему:
«Метод хорд і дотичних»
ЛАБОРАТОРНА РОБОТА № 4
Тема роботи:
Метод хорд і дотичних.
Мета роботи:
Вивчити і засвоїти ітераційні методи розв’язування алгебраїчних і трансцендентних рівнянь.
Теоретичні відомості:
Метод хорд – метод лінійної інтерполяції (метод пропорційних частин, метод січних). Ідея методу полягає в тому, що на досить малому проміжку дугу кривої заміняють хордою, а за наближене значення кореня приймають точку перетину хорди з віссю ОХ.
Значення функції визначаються в точках, що розташовані на осі через рівні інтервали. Це робиться доти, поки кінці інтервалів , не будуть мати різні знаки. Тоді пряма, що проведена через ці дві точки, перетинає вісь абсцис у точці
/
У методі дотичних здійснюється екстраполяція за допомогою дотичної до кривої в даній точці :
/
Початкове наближення слід вибирати з умови
/
Однією з головних проблем при застосуванні методу Ньютона є необхідність аналітичного опису похідної. Якщо це складно чи неможливо, то можна застосувати її наближену оцінку. Тоді замість методу дотичних застосовується метод січних, за яким
/
де F′ () – наближена оцінка похідної, що розглядається як січна, а не як дотична, і може бути оцінена за формулою
/
Варіант 24:
Знайти один з коренів рівняння f(x)=0, використовуючи методи дотичних, хорд і простої ітерації. Провести дослідження кількості ітерацій для кожного з методів при зміні точності від до .
Код програми:
#include <iostream>
#include <Windows.h>
#include <cmath>
using namespace std;
double Function_Value(double x) { return x - cos(x); }
double Derivative_Value (double x) { return 1 + sin(x); }
double Derivative2_Value (double x) { return cos(x); }
int main() {
SetConsoleOutputCP(1251);
double X_n, X_m, X_mid;
double F_mid; double eps;
int count = 0;
cout << "ЛАБОРАТОРНА РОБОТА № 4" << endl;
for (int i = 0; i < 10; i++) {
X_n = Function_Value(i) > 0 ? 1 : -1;
X_m = Function_Value(i + 1) > 0 ? 1 : -1;
if (X_n != X_m) {
X_n = i;
X_m = i + 1;
break;
}
}
cout << "МЕТОД ХОРД:" << endl;
cout << "Точність\t Значення X\t Кількість ітерацій" << endl;
eps = 0.1;
for (int i = 0; i < 10; i++, eps /= 10) {
while (fabs(X_m - X_n) > eps) {
X_n = X_m - (X_m - X_n)*Function_Value(X_m) / (Function_Value(X_m) - Function_Value(X_n));
X_m = X_n - (X_n - X_m)*Function_Value(X_n) / (Function_Value(X_n) - Function_Value(X_m));
count++;
}
cout << eps << "\t\t" << X_m << "\t\t" << count << endl;
}
cout << "МЕТОД ДОТИЧНИХ:" << endl;
cout << "Точність\t Значення X\t Кількість ітерацій" << endl;
for (int i = 0; i < 10; i++) {
double k = Derivative2_Value(i)*Function_Value(i);
double squad = Derivative_Value(i)*Derivative_Value(i);
if (k > 0 && k < squad) {
X_n = i; break;
}
}
double X0 = X_n, X1 = X_n + 0.1;
eps = 0.1;
for (int i = 0; i < 10; i++, eps /= 10) {
count = 0;
do {
X_n = X_n - Function_Value(X_n) / Derivative_Value(X_n);
count++;
} while (fabs(Function_Value(X_n)) >= eps);
cout << eps << "\t\t" << X_n << "\t\t" << count << endl;
}
cout << "МЕТОД СІЧНИХ:" << endl;
cout << "Точність\t Значення X\t Кількість ітерацій" << endl;
for (eps = 0.1; eps > 1e-10; eps /= 10) {
count = 0;
double F_X0 = Function_Value(X0), F_X1 = Function_Value(X1);
while (1) {
count++;
X_mid = X0 - F_X0*(X1 - X0) / (F_X1 - F_X0);
F_mid = Function_Value(X_mid);
if (fabs(F_mid) < eps) break;
X0 = X1; F_X0 = F_X1;
X1 = X_mid; F_X1 = F_mid;
}
cout << eps << "\t\t" << X_mid << "\t\t" << count << endl;
}
system("pause>>void");
return 0;
}
Результат:
/
Графік:
/
/
/
/
Висновок:
В результаті виконання цієї лабораторної роботи, я вивчила ітераційні методи розв’язування алгебраїчних рівнянь, проаналізувала методи хорд, дотичних та січних. Привела залежності кількості ітерацій від точності обчислень. В результаті виконання обрахунків, за допомогою трьох методів, знайдено корінь рівняння, який дорівнює 0.739085.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!