Звіт до лабораторної роботи №1 з курсу: "Комп’ютерні методи дослідження інформаційних процесів та систем" на тему: «Методи уточнення коренів нелінійних рівнянь»
Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
"ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Звіт
до лабораторної роботи №1
з курсу: "Комп’ютерні методи дослідження інформаційних процесів та систем"
на тему: «Методи уточнення коренів нелінійних рівнянь»
Мета роботи – ознайомлення з методами уточнення коренів нелінійних рівнянь з одним невідомим.
Завдання
Знайти корінь рівняння з граничною абсолютною похибкою Е = 10–4, відокремлений на відрізку [a, b]. Методи чисельного розв’язування задаються викладачем.
2
ех + lnx = 0
[0.1;2]
Короткі теоретичні відомості
Метод забезпечує швидшу збіжність, ніж метод поділу навпіл. Ідея методу в тому, що на проміжку дугу кривої заміняють хордою, яка її стягує. За наближене значення кореня приймають точку перетину хорди з віссю абсцис (точка А на Рис.2)
Рис.2
Рівняння прямої, яка проходить через точки і :
Точка А є наближеним коренем , яка була знайдена з рівняння прямої, якщо покласти , :
Далі застосовуємо метод хорд до відрізку :
Таким чином, ітераційна формула методу хорд має вигляд:
(4)
За наведеними формулами обчислюють корені також і тоді, коли ; ; ; . Тобто коли - застосовують (4).
У випадку, коли перша і друга похідні мають різні знаки, тобто , ітераційна формула має інший вигляд:
(5)
Метод хорд – це метод одностороннього наближення. Один край відрізку фіксується, а інший змінюється. Зауважимо, що формули (4) та (5) тотожні. Узагальнити їх можна так. Якщо виконується співвідношення (6):
, (6)
фіксується точка а: . В іншому випадку фіксується точка b: . При цьому ітераційна формула методу хорд має вигляд:
, (7)
де початкове значення - край відрізка , протилежний до обраного
Обчислення виконуються доти, доки різниця між черговими i не стане меншою за задану граничну абсолютну похибку Е:
Блок-схема алгоритму
Текст програми
using System; class Program { static void Main(string[] args) { double x_prew=0.1; double x_curr=2; double E=0.0001; double x_next=0; double tmp; if (Math.Abs(x_next-x_curr)>E) { tmp=x_next; x_next=x_curr-f(x_curr)*(x_prew-x_curr)/(f(x_prew)-f(x_curr)); x_prew=x_curr; x_curr=tmp; } Console.WriteLine(x_next); Console.ReadLine(); } public static double f(double x) { return Math.Pow(Math.E, x) + Math.Log(x); } }
Результат роботи
/