"Математика и алгоритмы". Выпуск 2.
Сегодняшний выпуск посвящен методам решения систем линейных алгебраических уравнений,
или сокращенно СЛАУ. С одной стороны, эта задача кажется настолько тривиальной,
что возникают сомнения в необходимости рассматривать ее, но с другой - великое
множество задач из самых разных разделов науки, которые сводятся к решению СЛАУ.
Существует достаточно много методов решения этих систем, среди которых можно
выделить точные методы и приближенные. Метод решения задачи относится кклассу
точных, если в предположении отсутствия округлений он дает точное решение
задачи после конечного числа арифметических и логических операций. К этой
группе относится широко известный метод Гаусса (и его модификация, известная
как метод Жордана-Гаусса).
К классу приближенных относится семейство итерационных методов, имеющих асимптотическую
сходимость к решению системы.
Рассмотрим систему n линейных уравнений с n неизвестными:
а_{11}х_1 + а_{12}х_2 + ... + а_{1n}х_n = d_1
а_{21}х_1 + а_{22}х_2 + ... + а_{2n}х_n = d_2
............................................. (1)
а_{n1}х_1 + а_{n2}х_2 + ... + а_{nn}х_n = d_n
где коэффициенты a_{ij} - действительные числа.
Система уравнений (1) называется совместной, если она имеет решение. Если же
решения нет, то система называется несовместной, или противоречивой. Если
система имеет одно решение, то она называется определенной, и неопределенной
-
если она имеет более одного решения.
Для существования единственного решения должно выполнятся условие det[А]<>0.
Метод Гаусса и Холецкого.
Реализация метода Гаусса по схеме единственного деления требует
выполнения n(4n^2-3n-4)/6 арифметических операций. Рассмотрим решение СЛАУ
методом Гаусса по схеме Халецкого, для реализации которой необходимо
n(2n-1) арифметических операции.
Матрица коэффициентов А представляется в виде произведения двух треугольных
матриц, т.е.
А=СВ. (2)
Матрица С - нижняя; матрица В - верхняя, причем диагональные коэффициенты
матрицы В равны единице.
Подставим (2) в (1)
СВх = d (3)
Обозначим
Вх = y
и перепишем (3) в виде
Сy = d. (4)
Таким образом, первым шагом при решении поставленной задачи является
разбиение матрицы А на две треугольные матрицы С и В.
Коэффициенты матриц С и В вычисляются последовательно. Сначала вычисляется
первый столбец матрицы С, затем вычисляется первая строка матрицы В,
и
элемент y1=d1/a11; затем - элементы второго столбца матрицы С, после этого
-
элементы второй строки матрицы В, затем элемент y2 и т.д.
После того как будут вычислены элементы матриц С и В, а так же вектор
y
находятся искомые неизвестные x_i:
x_{n-i} = y_{n-i} + \summ_{j=n-i+1}^{x_n = y_n}{b_{n-i,j} x_j}
Рассмотрим подробнее способ разложения матрицы на верхнюю и нижнюю треугольные.
LU-разложение
Триангуляризация или LU-разложение - это, видимо, самый быстрый алгоритм для
произвольных действительных матриц.
Разложение имеет вид: A = LU, где L - нижняя треугольная матрица, U - верхняя
треугольная.
Проблема в том, что диагональный элемент может стать нулевым или очень близким
к нулю. В первом случае вообще не удастся вычислить, во втором случае страдает
точность. Поэтому используют так называемый "выбор ведущего (главного) элемента".
Просто выбираем максимальный по модулю элемент вниз по столбцу, а затем переставляем
строки. Получается разложение
PA = LU,
где P - перестановочная матрица.
Метод получается достаточно точный, если только матрица не слишком "плохая".
Можно вправо по строке выбирать и переставлять столбцы.
Можно еще модифицировать для удобства:
PA = LDU,
где D - диагональная матрица, L и U имеют по диагонали единицы.
При этом матрицу можно раскладывать на том же месте, где была матрица A. Внизу
(слева) хранится L, вверху (справа) - U, а по диагонали - D. Единицы не сохраняются.
Из этого разложения имеем:
1) Определитель - произведение диагональных элементов D, домноженное на определитель
матрицы P. Определитель матрицы P либо 1, либо -1 в зависимости от того, какие
были перестановки.
2) Обратную матрицу inv(A) = inv(U)inv(D)inv(L)P.
3) Решение системы уравнений Ax = b.
inv(P)LDUx = b.
Сначала решаем Ly = Pb находим y.
Потом решаем Ux = inv(D)y и находим x.
Это, по сути, и есть всем известный метод Гаусса.
Если матрица симметричная, то используют разложение
Холецкого:
A = T'T,
где матрица T нижняя или верхняя треугольная. Опять же, это разложение подправляют
выбором главного элемента. Кроме того, если разложить как A = T'DT, где D - диагональная
матрица, а у T по диагонали единицы, то не нужно извлекать корни.
Метод простой итерации.
Приведем определения основных норм в пространствах векторов и матриц. Если в
пространстве векторов введена норма ||х||, то согласованно с ней нормой в
пространстве матриц называют норму
||А|| = \sup ||Ax|| / ||х||
Простейшим итерационным методом решения СЛАУ является метод простой итерации.
Система приводится к виду
х = Вх + е.
А итерационный процесс записывается в виде
x^{k+1} = Bx^k + e, k = 0,1,2,...
Для сходимости метода при любом начальном приближении необходимо и
достаточно, чтобы все собственные значения матрицы В были по модулю меньше 1.