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

Метод Ньютона для розвязування СНЛАР

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

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

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

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
Комп’ютерні методи дослідження інформаційних процесів та систем
Варіант:
9

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра ЗІ ЗВІТ До лабораторної роботи №5 з курсу: «Комп’ютерні методи дослідження інформаційних процесів та систем» на тему: «Метод Ньютона для розв’язування систем нелінійних алгебраїчних рівнянь (СНЛАР)» Варіант №9 МЕТА РОБОТИ Ознайомлення з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона. КОРОСТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ Модифікований метод Ньютона. При використанні стандартного методу Ньютона на кожній ітерації доводиться обчислювати новий якобіан , хоч зрозуміло, що при закінченні ітерацій він повинен прийняти стабільне значення , де  –розв'язок. У модифікованому або спрощеному методі Ньютона якобіан  заміняють правильно підібраною матрицею А. Звичайно, найкращим, але практично недосяжним варіантом була б заміна , де  - розв'язок. Але на практиці користуються компромісним рішенням: – вибирають за А якобіан в початковій точці , a ітерації проводять за наступною формулою  – зберігають А протягом певного числа ітерацій; – на певній r-й ітерації змінюють А, прирівнюючи її якобіану  і з новим значенням знову виконують певне число ітерацій і т.д. Отже, якобіан обчислюється тільки час від часу, за рахунок чого досягається економія машинного часу. Однак, збіжність методу при цьому близька до лінійної. ЗАВДАННЯ   БЛОК-СХЕМА АЛГОРИТМУ СПИСОК ІДЕНТИФІКАТОРІВ КОНСТАНТ, ЗМІННИХ, ФУНКЦІЙ, ВИКОРИСТАНИХ У ПРОГРАМІ, ТА ЇХ ПОЯСНЕННЯ Main() – головний метод; input() – метод зчитування введених даних; class Program – клас, який містить тільки головну функцію Main(); class Main – клас, у якому відбуваються усі дії; Console.ReadLine() та Console.ReadKey() – функція зчитування з клавіатури; Console.WriteLine() та Console.Write() – функції виведення на екран; Convert.ToDouble() – функція конвертування у тип Double; try {} catch (Exception) {} – функція перехоплення винятку; goto – оператор переходу виконання коду до відповідної мітки; for() – оператор циклі з передумовою; if {} else {} – оператор умови; ТЕКСТ ПРОГРАМИ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace kmd_lab5 { class Program { static void Main(string[] args) { Main p = new Main(); p.input(); p.iterations(); p.output(); p.verify(); Console.Write("\nPress <Enter> to exit..."); Console.ReadKey(); } } class Main { double[,] A = new double[2, 2]; double[,] A1 = new double[2, 2]; double[] X = new double[2]; double[] X1 = new double[2]; double[] D = new double[2]; double[] F = new double[2]; double det, x1, x2, d, e; int h, n = 0; public void input() { Console.WriteLine(" --- Введiть початковi наближення, похибку та крок:"); for (int i = 0; i < 2; i++) { Console.Write(" x{0} = ", i + 1); X[i] = Convert.ToDouble(Console.ReadLine()); } Console.Write(" e = "); e = Convert.ToDouble(Console.ReadLine()); Console.Write(" h = "); h = Convert.ToInt32(Console.ReadLine()); } public void prJakob(double[] J) { // якобіан A[0, 0] = 1.0 - 2 * J[0]; A[0, 1] = -2.0 * J[1]; A[1, 0] = -2.0 * J[1]; A[1, 1] = 1.0 - 2.0 * J[0]; det = A[0, 0] * A[1, 1] - A[0, 1] * A[1, 0]; A1[0, 0] = A[1, 1] / det; A1[0, 1] = -A[0, 1] / det; A1[1, 0] = -A[1, 0] / det; A1[1, 1] = A[0, 0] / det; } public void prFunk(double[] R) { F[0] = R[0] - R[0] * R[0] + R[1] * R[1] - 0.1; F[1] = R[1] - 2.0 * R[0] * R[1] - 0.1; } public void prDob(double[,] J, double[] G) { D[0] = 0.0; D[1] = 0.0; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { D[i] += J[i, j] * G[j]; } } } public void prX1() { for (int i = 0; i < 2; i++) { X1[i] = X[i] - D[i]; } } public void prod() { prFunk(X); prDob(A1, F); prX1(); } public void iterations() { do { if (n % h == 0) prJakob(X); prod(); x1 = Math.Abs(F[1] + F[0]) / 2.0; prFunk(X1); x2 = Math.Abs(F[1] + F[0]) / 2.0; d = Math.Abs(x1 - x2); X = X1; n++; } while (d > e); } public void output() { Console.WriteLine("\n --- Коренi: "); for (int i = 0; i < 2; i++) { Console.Write(" X[{0}] = {1:0.#####}\n", i + 1, X1[i]); } } public void verify() { Console.WriteLine("\n --- Перевiрка:"); Console.WriteLine(" Рiвняння 1:\t " + (X1[0] - Math.Pow(X1[0], 2) + Math.Pow(X1[1], 2) - 0.1) + " = 0"); Console.WriteLine(" Рiвняння 2:\t " + (X1[1] - 2 * X1[0] * X1[1] - 0.1) + " = 0"); } } } РЕЗУЛЬТАТ РОБОТИ ПРОГРАМИ  ВИСНОВОК Отже, під час лабораторної роботи я ознайомився з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона. За допомогою методу Ньютона склав алгоритм розв’язування СНЛАР.
Антиботан аватар за замовчуванням

28.05.2013 18:23

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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