Численные методы, Горбунов Миша, КН-401
Решить систему линейных уравнений вида Ax = b
, используя точные и итерационные
методы:
- Метод Гаусса;
- Метод Гаусса с выбором главного элемента по всей матрице;
- Метод Якоби;
- Метод Гаусса-Зейделя.
В отчете:
- В методах 1,2 сравнить результаты решения;
- Для методов 3, 4 проверить сходимость метода; в случае сходимости найти решение с точностью 0.5 · 10−4 ; сравнить количество итераций.
Мой вариант - 20
Мои A и B:
Перед тем, как искать решения другими методами, посчитаем по-старинке - чтобы понять правильный ответ.
x1 = 1
x2 = 2
x3 = 3
Выкладки в
papers/PAPERS.md
x1 = 1.00062344
x2 = 2.00023379
x3 = 2.99968828
Выкладки в
papers/PAPERS.md
x1 = 0.99940636
x2 = 2.00281625
x3 = 2.99646643
Оба метода дают результат очень близкий к реальному - x1 = 1, x2 = 2, x3 = 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
Домножим обе части уравнения на А* (матрицу, сопряженную 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
Метод Зейделя сработал с меньшим количеством итераций. 15 против 27.
node index.js