Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Звіт до лабораторної роботи № 3
з курсу “Комп’ютерні методи дослідження систем керування”
МЕТОДИ УТОЧНЕННЯ КОРЕНІВ
НЕЛІНІЙНИХ РІВНЯНЬ
Варіант #3
Мета роботи: вивчити основні методи уточнення коренів нелінійних рівнянь з одним невідомим.
Теоретичні відомості:
Нехай нам дано відрізок на якому є локалізовано корінь , при цьому В якості початкового наближення кореня приймаємо середину цього відрізку
. (2.1)
Далі досліджуємо значення функції на кінцях відрізків та , тобто в крапках , , . Той з відрізків, на кінцях якого приймає значення різних знаків, містить шуканий корінь, і тому його приймаємо в якості нового відрізку . Другу половину відрізку , на якому знак не змінюється, відкидаємо. В якості першого наближення кореня приймаємо середину нового відрізку
(2.2)
і т.д. Таким чином, k-е наближення обчислюється так
. (2.3)
Після кожної ітерації відрізок, на якому розміщений корінь, зменшується вдвоє, а після k ітерацій він звужується в разів:
. (2.4)
Графічна ілюстрація методу зображена на рис. 3.
Якщо наближений розв’язок необхідно знайти з точністю до деякого заданого малого числа , тоді має виконуватися така умова
. (2.5)
Ітераційний процес можна завершити і тоді, коли значення функції після k-ї ітерації стане по модулю меншим , тобто
.
Завдання:
Метод поділу ділянки навпіл з пошуком ділянки локалізації
№3
Код програми:
//Метод поділу ділянки навпіл з пошуком
//ділянки локалізаціїї
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
double a = 0.0, b = 0, h = 0.001, x = 0;
double eps = 0.0001;
double fa = 0, fb = 0, fx = 0;
int i = 1;
void main()
{
setlocale(0, "");
//Пошук ділянки локалізації
b = a + h;
fa = sin(a / 4) - log(a);
fb = sin(b / 4) - log(b);
if ((fabs(fb) > fabs(fa)) && (fa*fb > 0))
h *= (-1);
b = a + h;
fb = sin(b / 4) - log(b);
while (fa*fb > 0)
{
a = b;
b = a + h;
fa = sin(a / 4) - log(a);
fb = sin(b / 4) - log(b);
}
cout << endl;
//Ітераційний процес
do
{
x = (a + b) / 2;
fa = sin(a / 4) - log(a);
fx = sin(x / 4) - log(x);
if (fx*fa > 0) a = x;
else b = x;
cout << "\t" << setw(4) << " X[" << i << "]= "
<< setw(8)<< x << "\t" << endl;
i += 1;
} while (fx < eps);
cout << endl;
//Перевірка
double part = sin(x / 4) - log(x);
int int_part = (int)part;
cout << endl;
if ((int_part) == 0)
cout <<"\t Вiдповiдь вiрна!" << endl;
else cout << "\t Вiдповiдь не вiрна!" << endl;
cout << "\t Значення виразу при пiдстановцi знайденого Х" << endl
<< "\t у задану функцiю: " << sin(x / 4) - log(x);
fgetchar();
}
Результат роботи програми:
/
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!