МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
<<ЛЬВІВСЬКА ПОЛІТЕХНІКА>>
Інститут ІКНІ
Кафедра автоматизовані системи управління
ЗВІТ
Лабораторна робота №5
З курсу “Чисельні методи”
«Метод ітерацій»
Лабораторна робота № 5
Розв’язування системи нелінійних рівнянь методом простої ітерації (методом Ньютона)
Мета роботи: вивчити і засвоїти метод Ньютона.
Порядок роботи:
Попереднє опрацювання теоретичного матеріалу.
Отримання допуску до виконання лабораторної роботи.
Опрацювання типового навчального завдання (прикладів).
Створення проекту для виконання індивідуального завдання.
Оформити звіт для захисту лабораторної роботи за зразком:
назва роботи;
мета роботи;
короткі теоретичні відомості;
алгоритм розв’язування задачі;
тексти відповідних модулів проекту;
аналіз отриманих результатів та висновки.
Захист лабораторної роботи.
1.Короткі теоретичні відомості
1.1 Метод Ньютона для системи двох рівнянь.
Нехай потрібно знайти розв’язок системи двох нелінійних рівнянь
F(x,y)=0
(1)
G(x,y)=0
де F,G:Rn→Rn
Послідовні наближення обчислюємо за формулами
xn+1=xn-
(2)
n=0,1,2…
Якобіан
повинен бути відмінним від нуля. Початкове наближення x0,y0 визначають наближено (графічно). Але зауважимо, що метод ефективний лише при достатній близькості початкового наближення в (2) до розв’язку системи (1).
1.2 Метод простої ітерації для системи двох нелінійних рівнянь.
Нехай потрібно з заданою точністю ε знайти дійсні корені системи двох нелінійних рівнянь.
F1(x,y)=0
(3)
F2(x,y)=0
Кількість і наближення коренів системи (3) знаходимо графічно. Нехай система має тільки ізольовані дійсні корені. При використанні методу ітерацій систему (3) зводимо до еквівалентної системи наступного вигляду:
(4)
де , – так звані інтегруючі функції. На основі системи (4) будуємо ітерації
(5)
Згідно з теоремою [3, с. 79] для збіжності процесу (5) до кореня системи (4) необхідно, щоб виконувалася умова на неперервнодиференційовні функції ,
(6)
Оцінка похибки n-го наближення дається формулою
(7)
де M=max{q1,q2}
Збіжність методу ітерацій є доброю, якщо М<1/2, при цьому М/(1-М)<1.
Побудуємо ітеруючі функції для системи (4)
(8)
Коефіцієнти α,β,γ,δ знаходимо з системи
(9)
За такого підбору параметрів α,β,γ,δ умова (6) виконується, якщо часткові похідні функцій , змінюється мало в околі точки
Приклад.. Нехай маємо систему
Записуємо еквівалентну систему
В квадраті будуть виконуватися умови
0<φ1<1, 0<φ2<1
Тоді умови (6) матимуть вигляд
1.3 Метод Ньютона для системи n рівнянь.
Нехай задано систему
(10)
Систему (10) можна записати в компактному вигляді (векторна форма запису)
(11)
де , .
Для розв’язування (11) користуємося методом послідовних наближень Ньютона. Розв’язок системи представимо у вигляді
p=0,1,2…. (12)
Вводимо матрицю Якобі для системи функцій
Якщо ця матриця не особлива, то Тоді поправку обчислюємо за формулою
p=0,1,2… (13) де -обернена матриця Якобі.
Отже, послідовні наближення знаходять за формулою
p=0,1,2… (14)
За нульове наближення можна взяти наближене значення вектор-кореня. Для отримання кожного наближення потрібно знаходити обернену матрицю .
Умови збіжності методу Ньютона досліджені Л.В.Канторовичем та А.М.Островським.
1.4 Метод ітерацій для системи n рівнянь.
Нехай
(15)
де дійсні, визначені в околі ω ізольованого кореня системи (15). Запишемо її в векторній формі
де (16)
Для знаходження вектор-кореня системи (16) можна використати метод ітерацій
p=0,1,2… (17)
Для цього систему n лінійних рівнянь загального вигляду (11) як і в (16) запишемо в еквівалентному вигляді
де – ітеруюча вектор-функція, що має вигляд
(18)
При цьому матриця Λ у методі ітерацій вибирається так:
(19)
причому матриця має бути неособливою.
Підставляючи з (18) в (16), отримуємо ітераційну формулу
p=0,1,2… (20)
яку використовуємо у методі ітерацій. Вона дещо простіша для обчислень, ніж ітераційна формула методу Ньютона (14).
2. Індивідуальне завдання
Використовуючи метод простої ітерації, розв’язати з точністю від ε = 10до ε = 10 такі нелінійні системи рівнянь. Початкове наближення знайти графічно. Дослідити залежність кількості ітерацій від точності. Подати відповідні таблиці та графіки.
Номер завдання для кожного cтудента відповідає його порядковому номеру в списку групи.
Варіант 27
3. Виконання завдання
3.1 Текст програми
#include <iostream>
#include <math.h>
#include < iomanip>
using namespace std;
#define eps 0.001
double function1(double x, double y) {
return sin(27 * x - y) - x * y + 1;
}
double function2(double x, double y) {
return x * x - 2.7 * y * y - 2.75;
}
double func11(double x, double y) {
return 27 * cos(27 * x - y) - y;
}
double func12(double x, double y)
{
return -x - cos(27 * x - y);
}
double func21(double x, double y) {
return 2*x;
}
double func22(double x, double y) {
return -((27 * y) / 5);
}
void ober_matr(double a[2][2])
{
double det, aa;
det = a[0][0] * a[1][1] - a[0][1] * a[1][0];
aa = a[0][0];
a[0][0] = a[1][1] / det;
a[1][1] = aa / det;
aa = a[0][1];
a[0][1] = -a[0][1] / det;
a[1][0] = -a[1][0] / det;
}
void iter(double x, double y)
{
int i = 1;
double a[2][2], dx, dy, b[2], norm;
do
{
a[0][0] = func11(x, y);
a[0][1] = func12(x, y);
a[1][0] = func21(x, y);
a[1][1] = func22(x, y);
ober_matr(a);
dx = -a[0][0] * function1(x, y) + -a[0][1] * function2(x, y);
dy = -a[1][0] * function1(x, y) + -a[1][1] * function2(x, y);
x = x + dx;
y = y + dy;
b[0] = function1(x, y);
b[1] = function2(x, y);
norm = sqrt(b[0] * b[0] + b[1] * b[1]);
cout << i << " | " << "x - " << setprecision(10) << x << " y - " << y << endl;
i++;
} while (norm >= eps);
cout << x << endl << y << endl;
}
int main()
{
system("chcp 1251");
system("cls");
cout << "Чисельні методи" << endl << "Лабораторна робота №5" << endl<< "Виконав студент групи КН-203 - Фурдас Андрій" << endl;
double x, y;
cout << "x = ";
cin >> x;
cout << "y = ";
cin >> y;
cout << "eps = " << eps << endl;
iter(x, y);
cout << endl;
return 0; }
3.2 Результати виконання програми
/
3.3 Графік функції /
Графік побудовано на сайті desmos.com
3.4 залежність кількості ітерацій від точності
Eps
0.1
0.01
0.001
10^-4
10^-5
10^-6
10^-7
10^-8
10^-9
10^-10
Iter
39
40
40
41
41
41
41
42
42
42
/
3.5 Пояснення до коду
double function1 – верхня функія системи
double function2 – нижня функія системи
double func11,12,21,22 – похідні по x та y функцій
void ober_matr – функція, яка обертає матрицю
void iter – функція, яка ітерує, знаходить точки та виводить результат
4. Висновок
В результаті виконання цієї лабораторної роботи я вивчив та засвоїв метод Ньютона, написав програму, яка реалізовує метод Ньютона, після чого ввів дані декілька раз та перевірив точки на графіку і переконався, що моя програма працює корректно.