
- •Лабораторна робота № 1. Розробка матричних моделей
- •Лабораторна робота №2. Методи чисельного розв’язання нелінійних рівнянь
- •3.1. Відділення коренів
- •3.2 Уточнення коренів
- •3.2.1 Метод простих ітерацій
- •3.2.2. Метод половинного ділення
- •Лабораторна робота №3. Обробка результатів експериментів
- •2.1. Інтерполяція поліномом
- •2.2 Апроксимація
- •Лабораторна робота №4. Методи чисельного розрахунку визначеного інтегралу
- •4.1 Метод прямокутників
- •4.2 Метод трапецій
- •Лабораторна робота №5. Чисельне розв’язання диференційних рівнянь
- •5.1. Чисельні методи вирішення задачі Коші
- •5.2 Метод Ейлера
- •5.3 Метод Эйлера із проміжним виведенням результатів
- •З проміжним виведенням результатів
- •5 Рисунок 5.7 Схема алгоритму методу Ейлера для системи здр .4 Метод Рунге-Кутта
- •Лабораторна робота № 6. Метод золотого перетину в задачах однопараметричної оптимізації
- •Лабораторна робота №7. Метод монте-карло в задачах оптимізації
- •Лабораторна робота №8. Двовимірна оптимізація методами покоординатного та градієнтного спусків
- •Лабораторна робота №9. Визначення шляху мінімальної вартості методом динамічного програмування
3.2 Уточнення коренів
Розглянемо два чисельних методи уточнення коренів рівнянь: метод простих ітерацій та метод половинного ділення (вихідні дані – результат методу відділення).
3.2.1 Метод простих ітерацій
Маємо рівняння вигляду
.
(3.2)
Беремо
із інтервалу, отриманого на попередньому
етапі, деяке
.
Розглянемо числову послідовність
..., що
задається рекурентною формулою
,
(3.3)
Якщо така послідовність має кінцеву границю, то ця границя буде коренем рівняння (3.2). Із вищої математики (за визначенням неперервної функції) відомо, що границя неперервної функції (при відповідному прямуванні аргументу) дорівнює значенню функції в точці:
.
(3.4)
Доведено,
що послідовність
збігається, якщо виконується так звана
умова
стискання:
,
(3.5),
при
будь-яких
,
,
що належать області визначення функції
,
– коефіцієнт
стискання.
Приклад 3.4.
Функція
,
задовольняє умову стискання. Справді,
,
тобто
.
Таким чином, на основі вищенаведеного може бути побудований алгоритмічний метод, що дозволяє визначити корінь рівняння (3.2) з будь-якою наперед заданою точністю. Такий алгоритм відомий як метод простих ітерацій (рисунок 3.3).
Рисунок 3.3 – Алгоритм методу простих ітерацій
Фрагмент Basic-програми (Процедура - підпрограма методу ітерацій)
Вхідні параметри: x0 – початкове наближення розв’язку,
eps- точність обчислення розв’язання.
Результат роботи: c – значення кореня рівняння.
SUB Simpleiteration (c AS DOUBLE)
DIM x AS DOUBLE
DIM a AS DOUBLE
a …
eps = …
x = a
WHILE (ABS(x - f(x)) >= eps)
x = f(x)
WEND
c = x
END SUB
‘Процедура - функція f(x) для методу ітерацій
FUNCTION f (x)
f = (1 / 2) * SIN(x)
END FUNCTION
3.2.2. Метод половинного ділення
Нагадаємо,
що вихідні дані для цього методу є
результат методу відділення коренів.
Тоді функція
має один (і лише один) корінь на деякому
сегменті
(Рисунок 3.4,а).
а) б) в)
Рисунок 3.4
Р
озділимо
цей сегмент
навпіл і отримаємо два сегменти. Далі
розглянемо той із отриманих сегментів,
на якому лежить корінь функції
(рисунок 3.4,б), та розділимо знову цей
сегмент навпіл – отримаємо два сегменти.
Після чого встановимо, на якому з останніх
сегментів лежить корінь (рисунок 3.4,в).
Будемо продовжувати цю процедуру ділення
сегментів до тих пір, поки довжина
чергового сегмента, на якому лежить
корінь, не стане менше заданої точності
.
Рисунок
3.6
– Схема
алгоритму методу половинного
ділення
Алгоритм методу:
Нехай
відомо, що функція на кінцях інтервалу
має значення різних знаків.
1) розділимо
на дві рівні частини та визначимо
значення функції у точці
;
2) якщо f(t) = 0, то t — корінь рівняння; виведемо його значення (рисунок 3.5, вид 3). Інакше перейти до підп. 3;
3) аналізуємо знак добутку f(a) * f(t);
4) якщо цей добуток має від’ємне значення, то вважаємо b = t. Корінь буде на ділянці [a, t] (рисунок 3.5, вид 1);
5) якщо цей добуток має додатне значення, то вважаємо а = t. Корінь буде на ділянці [t, b] (рисунок 3.5, вид 2);
6) аналізуємо виконання умови b-a < E, де E — точність уточнення кореня, і якщо вона виконується , то закінчуємо алгоритм, у протилежному випадку повертаємось до підп.1.
Схема алгоритму методу половинного ділення наведена на рисунку 3.6.
Фрагмент Basic-програми (Процедура - підпрограма методу половинного ділення)
Вхідні параметри: a, b – початкове та кінцеве значення інтервалу пошуку розв’язку, eps – точність обчислення розв’язку.
Результат роботи: c – значення кореня рівняння.
SUB Dihotom (c AS DOUBLE)
DIM t AS DOUBLE, a AS DOUBLE, b AS DOUBLE
a = …
b = …
eps = …
DO
t = (a + b) / 2
IF g(a) * g(t) > 0 THEN
a = t
ELSE
b = t
END IF
LOOP UNTIL b - a < eps
c = (a + b) / 2
END SUB
‘Процедура - функція f(x) для методу половинного ділення
FUNCTION g (x AS DOUBLE)
g = x-(1 / 2) * SIN(x)
END FUNCTION