МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Кафедра ЗІ
ЗВІТ
До лабораторної роботи №5
Мета роботи - ознайомлення з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона.
ТЕОРНТИЧНІ ВІДОМОСТІ
Метод Ньютона базується на лінеаризації задачі і заміні розв'язування нелінійної системи (2) на послідовність розв'язувань лінійних систем (найчастіше прямими методами).
Будемо вважати, що система рівнянь (2) має розв'язок; позначимо його через вектор і розкладемо кожну функцію в ряд Тейлора в околі розв'язку
(2)
де - члени другого і вищих порядків.
Вважаючи, що дуже близьке до , знехтуємо членами вищих порядків і запишемо систему рівнянь в лінеаризованій формі:
(3)
або в іншому вигляді
(4)
де – матриця Якобі (якобіан) системи (1)
Враховуючи, що є розв'язком системи, згідно з (2) можемо записати:
Звідси випливає, що і праву частину (4) також можна прирівняти до нуля:
(5)
Розв'язком системи (5) є нове значення вектора X, яке не точно дорівнює значенню вектора (оскільки знехтували членами другого і вищих порядків). Використовуючи верхні індекси для позначення послідовності ітерацій, можна записати
(6)
Звідси
(7)
де - обернена матриця Якобі; .
У достатньо широкому околі розв'язку ітераційний процес (7) збігається, якщо .
Ітераційний процес закінчується при виконанні умови
(8)
де Σ - задана гранична похибка уточнень коренів системи (1).
Таким чином, алгоритм стандартного методу Ньютона можна розбити на декілька кроків.
Крок 1. Вибір вектора початкових уточнень
.
Крок 2. Обчислення елементів матриці Якобі.
Крок 3. Обчислення елементів оберненої матриці Якобі.
Крок 4. Перемноження значень функції (див. формулу (7))
Крок 5. Одержаний на кроці 4 вектор віднімається від вектора , у результаті чого одержується покращений вектор розв'язку .
Крок 6. Перевірка умови закінчення ітерацій (8). Якщо вона не виконується, то за вектор початкових уточнень приймається вектор і проводиться наступна ітерація, починаючи з кроку 2.
При використанні стандартного методу Ньютона слід мати на увазі наступне.
1. Стандартний метод Ньютона надзвичайно ефективний.
2. Збіжність на початку ітераційного процесу, як правило, лінійна.
3. Починаючи з деякого кроку ( уточнити його попередньо неможливо), збіжність різко прискорюється і стає квадратичною.
4. Бувають випадки, коли метод розбігається або спостерігається зациклювання ітерацій. Тому необхідно обмежувати максимальну кількість ітерацій деяким попередньо заданим числом.
Основний недолік методу полягає в повторних обчисленнях на кожному кроці вектора , матриці Якобі , оберненої матриці Якобі . Тому на практиці досить часто з метою зменшення витрат машинного часу використовують стандартний метод Ньютона без обертання матриці Якобі.
Позначаючи
(9)
перепишемо (6) у вигляді
(10)
Таким чином, задача зводиться до пошуку вектора поправок (приростів) із системи лінійних алгебраїчних рівнянь (10), у якій матрицею коефіцієнтів при невідомих є матриця Якобі , а вектором-стовпцем вільних членів служить вектор значень функції – . Розв'язуючи цю систему одним із відомих методів (як правило, це представники групи прямих методів – метод Гаусса з вибором головних елементів, метод LU – факторизації та ін.) , знаходимо . Значення визначаємо із виразу
Метод Ньютона базується на лінеаризації задачі і заміні розв'язування нелінійної системи (2) на послідовність розв'язувань лінійних систем (найчастіше прямими методами).
Будемо вважати, що система рівнянь (2) має розв'язок; позначимо його через вектор і розкладемо кожну функцію в ряд Тейлора в околі розв'язку
(2)
де - члени другого і вищих порядків.
Вважаючи, що дуже близьке до , знехтуємо членами вищих порядків і запишемо систему рівнянь в лінеаризованій формі:
(3)
або в іншому вигляді
(4)
де – матриця Якобі (якобіан) системи (1)
Враховуючи, що є розв'язком системи, згідно з (2) можемо записати:
Звідси випливає, що і праву частину (4) також можна прирівняти до нуля:
(5)
Розв'язком системи (5) є нове значення вектора X, яке не точно дорівнює значенню вектора (оскільки знехтували членами другого і вищих порядків). Використовуючи верхні індекси для позначення послідовності ітерацій, можна записати
(6)
Звідси
(7)
де - обернена матриця Якобі; .
У достатньо широкому околі розв'язку ітераційний процес (7) збігається, якщо .
Ітераційний процес закінчується при виконанні умови
(8)
де Σ - задана гранична похибка уточнень коренів системи (1).
Таким чином, алгоритм стандартного методу Ньютона можна розбити на декілька кроків.
Крок 1. Вибір вектора початкових уточнень
.
Крок 2. Обчислення елементів матриці Якобі.
Крок 3. Обчислення елементів оберненої матриці Якобі.
Крок 4. Перемноження значень функції (див. формулу (7))
Крок 5. Одержаний на кроці 4 вектор віднімається від вектора , у результаті чого одержується покращений вектор розв'язку .
Крок 6. Перевірка умови закінчення ітерацій (8). Якщо вона не виконується, то за вектор початкових уточнень приймається вектор і проводиться наступна ітерація, починаючи з кроку 2.
При використанні стандартного методу Ньютона слід мати на увазі наступне.
1. Стандартний метод Ньютона надзвичайно ефективний.
2. Збіжність на початку ітераційного процесу, як правило, лінійна.
3. Починаючи з деякого кроку ( уточнити його попередньо неможливо), збіжність різко прискорюється і стає квадратичною.
4. Бувають випадки, коли метод розбігається або спостерігається зациклювання ітерацій. Тому необхідно обмежувати максимальну кількість ітерацій деяким попередньо заданим числом.
Основний недолік методу полягає в повторних обчисленнях на кожному кроці вектора , матриці Якобі , оберненої матриці Якобі . Тому на практиці досить часто з метою зменшення витрат машинного часу використовують стандартний метод Ньютона без обертання матриці Якобі.
Позначаючи
(9)
перепишемо (6) у вигляді
(10)
Таким чином, задача зводиться до пошуку вектора поправок (приростів) із системи лінійних алгебраїчних рівнянь (10), у якій матрицею коефіцієнтів при невідомих є матриця Якобі , а вектором-стовпцем вільних членів служить вектор значень функції – . Розв'язуючи цю систему одним із відомих методів (як правило, це представники групи прямих методів – метод Гаусса з вибором головних елементів, метод LU – факторизації та ін.) , знаходимо . Значення визначаємо із виразу
ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
Розв’язати систему нелінійних рівнянь методом Ньютона з якобіаном із кінцевих різниць, вибираючи за початкові наближення . Ітерації проводити до збігу двох послідовних наближень з похибкою .
ТЕКСТ ПРОГРАМИ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
public static void Main()
{
Nuton nt = new Nuton(1, 1);
nt.solve();
}
}
class Nuton
{
public double x1, x2;
public double dx1, dx2, d, x, y, del, f1, f2;
double h = 0.00001;
int n = 4;
public Nuton(double x, double y)
{
x1 = x;
x2 = y;
}
double f(double x1, double x2, int i)
{
if (i == 0 || i == 1)
return x1 - x1 * x1 - x2 * x2 - 0.1;
return x2 - 2 * x1 * x2 - 0.1;
}
double[] Poxidna()
{
double[] df = new double[n];
for (int i = 0; i < n; i++)
{
if (i % 2 == 0)
df[i] = (f(x1 + h, x2, i) - f(x1, x2, i)) / h;
else
df[i] = (f(x1, x2 + h, i) - f(x1, x2, i)) / h;
}
return df;
}
public void solve()
{
do
{
double[] a;
a = Poxidna();
d = a[0] * a[3] - a[1] * a[2];
dx1 = (-f(x1, x2, 1) * a[3] - (-f(x1, x2, 2) * a[1])) / d;
dx2 = (-f(x1, x2, 2) * a[0] - (-f(x1, x2, 1) * a[2])) / d;
x = x1; y = x2;
x1 += dx1;
x2 += dx2;
del = (x1 - x) / x;
} while (Math.Abs(del) > h);
Console.WriteLine("Коренi системи:\nx1=" + x + "\nx2=" + y);
f1 = x - (Math.Pow(Math.Pow(x, 2) - Math.Pow(y, 2), 2)) / 4 - Math.Pow(x, 2) * Math.Pow(y, 2) + 0.5;
f2 = y - x * y * (Math.Pow(x, 2) - Math.Pow(y, 2)) + 0.5;
Console.WriteLine("\nf1=" + f1);
Console.WriteLine("f2=" + f2);
Console.WriteLine("\nPress any key to exit...");
Console.Read();
}
}
}
РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ