/numeth-2

Численные методы, Матмех УрФУ, 2021

Primary LanguageJavaScript

Лабораторная работа 3

Численные методы, Горбунов Миша, КН-401

Задача:

Решить систему линейных уравнений вида Ax = b, используя точные и итерационные методы:

  1. Метод Гаусса;
  2. Метод Гаусса с выбором главного элемента по всей матрице;
  3. Метод Якоби;
  4. Метод Гаусса-Зейделя.

В отчете:

  • В методах 1,2 сравнить результаты решения;
  • Для методов 3, 4 проверить сходимость метода; в случае сходимости найти решение с точностью 0.5 · 10−4 ; сравнить количество итераций.

Мой вариант - 20

Мои A и B:

img.png

Решение

Перед тем, как искать решения другими методами, посчитаем по-старинке - чтобы понять правильный ответ.

x1 = 1
x2 = 2
x3 = 3

1. Метод Гаусса:

Выкладки в papers/PAPERS.md

x1 = 1.00062344
x2 = 2.00023379
x3 = 2.99968828

2. Метод Гаусса с выбором главного элемента

Выкладки в papers/PAPERS.md

x1 = 0.99940636
x2 = 2.00281625
x3 = 2.99646643

Сравнение результатов решения 1 и 2

Оба метода дают результат очень близкий к реальному - x1 = 1, x2 = 2, x3 = 3

3. Метод Якоби

Переставим строки исходной матрицы таким образом, чтобы наибольшие по модулю элементы стояли на главной диалгонали.

 1.70  0.01  0.20 |  2.32
-0.10  0.80  0.40 |  2.70
-0.10 -0.40 -0.50 | -2.40

На такой матрице выполняется условие диалгонального преобладания, это достаточно для того, чтобы метод Якоби сходился.

Напишем скрипт...

> node index.js

Jacobi Method:
result: 1.0000026340820203, 2.0000109978239924, 3.0000024740602385, iterations 27

4. Метод Гаусса-Зейделя

Домножим обе части уравнения на А* (матрицу, сопряженную A) и получив систему вида A'x = b', где A' = AA, а b' = Ab,

В случае не-комплексной матрицы, матрица A* будет равна транспонированной матрице A

A' = 
	[2.91, -103/1000, 27/50],
	[-103/1000, 8001/1000, -319/500],
	[27/50, -319/500, 149/25]
	
B' = [1957/500, 1529/1250, 913/125]

Корни этой системы сопадают со старой, но матрица A' будет являться положительно-определенной, что будет гарантировать сходимость метода на любых x0.

Хотя в нашем конкретном случае метод сходится и на неизмененных A и b

Напишем скрипт...

> node index.js
 
Seidel Method:
result: 1.0000018268076136, 2.000008481765478, 2.9999928492260945, iterations 15

Сравнение количества итераций 3 и 4

Метод Зейделя сработал с меньшим количеством итераций. 15 против 27.

Запуск кода

node index.js