DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Розв’язування системи нелінійних рівнянь методом простої ітерації (методом Ньютона)

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКНІ
Факультет:
КН
Кафедра:
Автоматизовані Системи Управління

Інформація про роботу

Рік:
2021
Тип роботи:
Лабораторна робота
Предмет:
Чисельні методи аналізу автоматичних систем

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ <<ЛЬВІВСЬКА ПОЛІТЕХНІКА>> Інститут ІКНІ Кафедра автоматизовані системи управління ЗВІТ Лабораторна робота №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. Висновок В результаті виконання цієї лабораторної роботи я вивчив та засвоїв метод Ньютона, написав програму, яка реалізовує метод Ньютона, після чого ввів дані декілька раз та перевірив точки на графіку і переконався, що моя програма працює корректно.
Антиботан аватар за замовчуванням

03.06.2021 15:36

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!