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

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

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

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

Рік:
2012
Тип роботи:
Лабораторна робота
Предмет:
Комп’ютерні методи дослідження інформаційних процесів та систем
Варіант:
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:05-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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