МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра БІТ
З В І Т
до лабораторної роботи №5
з курсу: «Комп’ютерні методи дослідження інформаційних процесів та систем»
на тему: «МЕТОД НЬЮТОНА ДЛЯ РОЗВ’ЯЗУВАННЯ СИСТЕМ НЕЛІНІЙНИХ РІВНЯНЬ»
Мета роботи - ознайомлення з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона.
1.Короткі теоретичні відомості
Стандартний метод Ньютона
Метод Ньютона базується на лінеаризації задачі і заміні розв'язування нелінійної системи (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 – факторизації та ін.) , знаходимо . Значення визначаємо із виразу
(11)
Завдання до лабораторної роботи
Розв’яжіть систему нелінійних рівнянь одним із методів, вказаних викладачем, вибираючи за початкові наближення . Ітерації проводити до збігу двох послідовних наближень з похибкою .
3.Блок-схема алгоритму програми
4. Текст програми
using System;
namespace dimka
{
class Program
{
static void Main()
{
Metod M = new Metod();
M.Obrach();
}
}
class Metod
{
public double f1(double x10, double x20)
{
return x10-0.25*Math.Pow((x10*x10-x20*x20),2.0)-x10*x10*x20*x20+0.5;
}
public double f2(double x10, double x20)
{
return x20 - x10 * x20 * (x10 * x10 - x20 * x20) - 0.5;
}
public double df1dx1(double x10, double x20)
{
return 1 - x10 * (x10 * x10 - x20 * x20)-2*x10*x20*x20;
}
public double df1dx2(double x10, double x20)
{
return x20 * (x10 * x10 - x20 * x20) - 2 * x10 * x10 * x20;
}
public double df2dx1(double x10, double x20)
{
return x20 * x20 * x20 - 3 * x10 * x10 * x20;
}
public double df2dx2(double x10, double x20)
{
return 1 - x10 * x10 * x10 + 3 * x20 * x20 * x10;
}
public void Obrach()
{
double x10 = 0.5, x20 = -0.5, h = 0.00001;
double delX1, delX2, poh;
Console.WriteLine("Початковi наближення \n x10= "+x10+"\n x20= "+x20+" \nПохибка= "+h);
if ((df1dx1(x10, x20)*df2dx2(x10, x20) - df1dx2(x10, x20)*df2dx1(x10, x20)) != 0)
do
{
delX1=df1dx2(x10,x20)*f2(x10,x20)-df2dx2(x10,x20)*f1(x10,x20);
delX2=df2dx1(x10,x20)*f1(x10,x20)-df1dx1(x10,x20)*f2(x10,x20);
poh=delX1/x10;
x10+=delX1;
x20+=delX2;
}
while (Math.Abs(poh)>h);
else Console.WriteLine("Визначник Якобiана=0");
Console.WriteLine("Результат :\n x1="+x10+"\n x2="+x20);
Console.ReadKey();
}
}
}
5. Результати роботи програми
/
6. Висновки
На даній лабораторній роботі я навчився розв’язувати системи нелінійних
алгебраїчних рівнянь за допомогою комп’ютерних програм . Я розв’язував
системи за допомогою методу Ньютона. Використовуючи алгоритм ми суттєво скорочуєм час на обчислення нелінійних алгебраїчних рівнянь.