МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА, кафедра “Захист інформації”
ЗВІТ
З ЛАБОРАТОРНОЇ РОБОТИ № 5
З КУРСУ “ КОМП’ЮТЕРНІ МЕТОДИ ДОСЛІДЖЕННЯ ІНФОРМАЦІЙНИХ ПРОЦЕСІВ ТА СИСТЕМ ”
НА ТЕМУ: “ МЕТОД НЬЮТОНА ДЛЯ РОЗВ’ЯЗУВАННЯ СИСТЕМ НЕЛІНІЙНИХ РІВНЯНЬ“
Варіант 19
Львів – 2007
Мета роботи-ознайомлення з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Стандартний метод Ньютона
Метод Ньютона базується на лінеаризації задачі і заміні розв'язування нелінійної системи (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)
ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
Розв’яжіть систему нелінійних рівнянь одним із методів, вказаних викладачем, вибираючи за початкові наближення . Ітерації проводити до збігу двох послідовних наближень з похибкою .
ТАБЛИЦЯ ІДЕНТИФІКАТОРІВ КОНСТАНТ, ЗМІННИХ, ФУНКЦІЙ, ВИКОРИСТАНИХ У ПРОГРАМІ, ТА ЇХ ПОЯСНЕННЯ:
Xo
Початкове значення інтегралу
Yo
Кінцеве значення інтегралу
h
Коефіцієнти, які використовуються за методом Гауса
delX
Коефіцієнти, які використовуються за методом Гауса
delY
Змінна, для обчислення суми за методом Гауса
poh
Змінна, для обчислення інтегралу
f1()
Функція яка задає перше рівняння
f1()
Функція яка задає друге рівняння
df1dx
Функція яка задає
df1dy
Функція яка задає
df2dx
Функція яка задає
df2dy
Функція яка задає
main()
Основна функція
clrscr()
Функція очищення екрану
scanf()
Функція вводу елементів
printf()
Функція виводу елементів
Текст програми мовою С
#include<stdio.h>
#include<math.h>
#include<conio.h>
double f1(double x, double y) // persha funkcia
{
return x-cos(y)-1;
}
double f2(double x, double y) // druga funkcia
{
return y-sin(y)-1;
}
///Znachenia chastkovyh pohydnyh////
double df1dx(double x, double y)
{
return 1;
}
double df1dy(double x, double y)
{
return sin(y);
}
double df2dx(double x, double y)
{
return 0;
}
double df2dy(double x, double y)
{
return 1-cos(y);
}
double Xo,Yo,h,delX,delY,poh;
////////Osnovna programa/////////
void main(void)
{
clrscr();
printf("pochatkove nablyghennya Xo="); scanf("%lf",&Xo);
printf("pochatkove nablyghennya Yo="); scanf("%lf",&Yo);
printf("h="); scanf("%lf",&h);
if ((df1dx(Xo,Yo)*df2dy(Xo,Yo)-df1dy(Xo,Yo)*df2dx(Xo,Yo))!=0)
{
do
{
delX=df1dy(Xo,Yo)*f2(Xo,Yo)-df2dy(Xo,Yo)*f1(Xo,Yo);
delY=df2dx(Xo,Yo)*f1(Xo,Yo)-df1dx(Xo,Yo)*f2(Xo,Yo);
poh=delX/Xo;
Xo+=delX;
Yo+=delY;
}
while (fabs(poh)>h);
}
else printf("Vyznachnyk Jakobiana = 0");
printf("X=%4.4lf\nY=%4.4lf",Xo,Yo);
getch();
}
Результат роботи програми:
pochatkove nablyghennya Xo=-0.9
pochatkove nablyghennya Yo=-1.4
h=0.00001
X=0.6442
Y=1.9346
Висновок: на цій лабораторній роботі я ознайомився з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона