Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
/
ЛАБОРАТОРНА РОБОТА № 5
з дисципліни:
"Чисельні методи"
на тему:
«Розв’язування системи нелінійних рівнянь методом простої ітерації (методом Ньютона)»
Львів – 2018
ЛАБОРАТОРНА РОБОТА № 5
Тема роботи:
Розв’язування системи нелінійних рівнянь методом простої ітерації (методом Ньютона).
Мета роботи:
Вивчити і засвоїти метод Ньютона.
Теоретичні відомості:
Метод Ньютона
Нехай потрібно знайти розв’язок системи двох нелінійних рівнянь
F(x,y)=0
G(x,y)=0
де F,G:Rn→Rn
Послідовні наближення обчислюємо за формулами
xn+1=xn-
n=0,1,2…
Якобіан повинен бути відмінним від нуля. Початкове наближення x0,y0 визначають наближено (графічно). Але зауважимо, що метод ефективний лише при достатній близькості початкового наближення в (2) до розв’язку системи (1).
Метод простих ітерацій
Нехай потрібно з заданою точністю ε знайти дійсні корені системи двох нелінійних рівнянь.
F1(x,y)=0
F2(x,y)=0
Кількість і наближення коренів системи (3) знаходимо графічно. Нехай система має тільки ізольовані дійсні корені. При використанні методу ітерацій систему (3) зводимо до еквівалентної системи наступного вигляду:
де , – так звані інтегруючі функції. На основі системи (4) будуємо ітерації
Варіант 24:
Використовуючи метод простої ітерації, розв’язати з точністю від ε = 10до ε = 10 такі нелінійні системи рівнянь. Початкове наближення знайти графічно. Дослідити залежність кількості ітерацій від точності.
Код програми:
#include <iostream>
#include <cmath>
#include <Windows.h>
using namespace std;
double F_1(double x, double y) {
return cos(2*y) + 0.85;
}
double F_2(double x, double y) {
return sin(2*x) - 1.32;
}
int main() {
SetConsoleOutputCP(1251);
cout << "ЛАБОРАТОРНА РОБОТА №5" << endl;
int count = 0;
double X, Y, x_1, y_1,y_0,x_0;
double eps;
cout << "--------Введіть початкове наближення:" << endl;
cout << "--------x0 = "; cin >> X;
cout << "--------y0 = "; cin >> Y;
cout << "Точність\t Значення X\t Значення Y\t Кількість ітерацій" << endl;
for (eps = 0.1; eps > 1e-10; eps /= 10) {
count = 0;
x_0 = X; y_0 = Y;
do {
count++;
x_1 = x_0; y_1 = y_0;
x_0 = F_1(x_1, y_1);
y_0 = F_2(x_1, y_1);
} while ((fabs(x_1 - x_0) >= eps) && (fabs(y_1 - x_0) >= eps));
cout << eps << "\t\t" << x_0 << "\t\t" << y_0 << "\t\t" << count << endl;
}
system("pause>>void");
return 0;
}
Результат:
/
Графік:
/
/
Висновок:
В результаті виконання цієї лабораторної роботи, я вивчила методи розв’язування систем нелінійних рівнянь. Застосовуваний метод – метод простих ітерацій. Привела залежність кількості ітерацій від точності обчислень. З графіка видно, що кількість ітерацій досить швидко спадає при зменшенні точності обчислень, наприклад при точності 10-3 кількість ітерацій 10, а при більшій точності 10-6 – 22 ітерації. В результаті виконання роботи, я знайшла розв’язок системи рівнянь, який дорівнює:
х = -0.14697; у = -1.60973