МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
З В І Т
до лабораторної роботи №1
з курсу: «Комп'ютерні методи дослідження інформаційних процесів і систем»
на тему: «Методи уточнення коренів нелінійних рівнянь»
Варіант № 1
1. Мета роботи – ознайомлення з методами уточнення коренів нелінійних рівнянь з одним невідомим.
2. Короткі теоретичні відомості
Нехай задане рівняння
, (1)
де – неперервна функція. Необхідно знайти всі або деякі корені рівняння (1).
Подібна задача розв’язується за два етапи.
Перший етап. На цьому етапі розв’язується задача відокремлення коренів нелінійного рівняння. Задача полягає у виокремленні достатньо малої області, що належить області допустимих значень функції , у якій існує один і тільки один корінь рівняння (1).
Відокремлення або ізоляція коренів рівняння (1) грунтується на теоремі Больцано-Коші: якщо неперервна функція на кінцях відрізка має різні за знаком значення, тобто , то на цьому відрізку рівняння (1) має хоча б один корінь. Якщо крім цього похідна існує і зберігає знак на відрізку , тобто , або , то корінь єдиний.
Задача ізоляції коренів нелінійного рівняння (1) вирішується шляхом табулювання функції або графічно - шляхом побудови графіку функції і визначення за графіком відрізків, на яких локалізовано корені рівняння (1). Графік функції як правило будують приблизно із застосуванням методів математичного аналізу.
Результати першого етапу є вихідними даними для задачі уточнення коренів нелінійного рівняння.
Другий етап. Уточнення наближеного розв’язку до заданої точності.
Вихідними даними для задачі уточнення кореня є рівняння (1) і відрізок . Відомо, що функція має різні знаки на кінцях цього проміжку, тобто виконується умова
(2)
Крім того, та – неперервні і зберігають знак на проміжку . Необхідно знайти корінь рівняння (1) із заданою граничною абсолютною похибкою Е.
Поширеними методами розв’язку цієї задачі є метод поділу проміжку навпіл, метод хорд, метод Ньютона (дотичних), комбінований метод хорд та дотичних, метод простої ітерації, метод Ейткена–Стефенсона і метод Стефенсона.
Метод поділу проміжку навпіл
Цей метод відомий також за назвами методу бісекцій або методу дихотомії. Це простий і надійний алгоритм уточнення коренів рівняння (1).
Суть методу полягає в тому, що відрізок ділиться навпіл, тобто вибирається перше наближення кореня (Рис.1):
(3)
Якщо , тоді є коренем рівняння (1).
Рис.1.
Якщо , то вибирають той з відрізків чи , на кінцях якого функція має різні знаки. Обраний відрізок знову ділять навпіл і т.д. Процес обчислень проводиться доти, доки величина відрізку не стане меншою від заданої похибки Е.
Метод досить стійкий до похибок заокруглень. Але й збігається теж повільно. При збільшенні точності значно зростає об’єм обчислень. Тому на практиці метод часто використовують для грубого визначення початкового наближення кореня, а далі застосовують швидко збіжний ітераційний метод.
Метод бісекцій збігається для будь-яких неперервних функцій. Кількість ітерацій, необхідних для досягнення точності E, оцінюють співвідношенням:
Алгоритм методу половинного ділення
3. Завдання
Знайти корінь рівняння з граничною абсолютною похибкою Е = 10–4, відокремлений на відрізку [a, b].
Варіант
Рівняння
Відрізок
1
ех + х = 0
[-1;0]
4.1 Блок-схема алгоритму. Метод Main( )
4.2 Блок-схема алгоритму. Метод Vvedennya( )
4.3 Блок-схема алгоритму. Метод Obchyslennya( )
5. Список ідентифікаторів констант, змінних, процедур і функцій, використаних в програмі
1) Vvedennya( ) – метод, який забезпечує ввід меж відрізку та граничної абсолютної похибки;
a, b – межі відрізку;
E – гранична абсолютна похибка;
2) Obchyslennya( ) – метод, який забезпечує знаходження кореня рівняння з граничною абсолютною похибкою;
6. Текст програми
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace markiv
{
class markiv
{
public double a, b, E, Fa, Fs, xs, riznytsya;
public void Vvedennya()
{
Console.Write("Vvedit' a: ");
a = Convert.ToDouble(Console.ReadLine());
Console.Write("Vvedit' b: ");
b = Convert.ToDouble(Console.ReadLine());
Console.Write("Vvedit' E: ");
E = Convert.ToDouble(Console.ReadLine());
}
public void Obchyslennya()
{
Fa = Math.Exp(a) + a;
do
{
xs= (a+b)/2;
Fs = (Math.Exp(xs) + xs);
if (Fs == 0)
Console.WriteLine("xs={0}\t", xs);
else if ((Fa * (Math.Exp(xs) + xs)) > 0)
a = xs;
else
b = xs;
riznytsya = Math.Abs(b - a);
Console.WriteLine("xs={0:f15}\t riznytsya={1:f15}\t ", xs, riznytsya);
}
while (Math.Abs(b - a) > E);
}
}
class Program
{
static void Main(string[] args)
{
markiv obj = new markiv();
obj.Vvedennya();
obj.Obchyslennya();
Console.Read();
}
}
}
7. Результати виконання програми
8. Висновки
На цій лабораторній роботі були складені та відлагодженні програми які дозволили реалізувати метод уточнення коренів нелінійних рівнянь з одним невідомим.