Численные методы решение уравнений метод гаусса

Метода Гаусса: примеры решения СЛАУ

В данной статье мы:

  • дадим определение методу Гаусса,
  • разберем алгоритм действий при решении линейных уравнений, где количество уравнений совпадает c количеством неизвестных переменных, а определитель не равен нулю;
  • разберем алгоритм действий при решении СЛАУ с прямоугольной или вырожденной матрицей.

Метод Гаусса — что это такое?

Метод Гаусса — это метод, который применяется при решении систем линейных алгебраических уравнений и имеет следующие преимущества:

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

Основные определения и обозначения

Есть система из р линейных уравнений с n неизвестными ( p может быть равно n ):

a 11 x 1 + a 12 x 2 + . . . + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + . . . + a 2 n x n = b 2 ⋯ a p 1 x 1 + a p 2 x 2 + . . . + a p n x n = b p ,

где x 1 , x 2 , . . . . , x n — неизвестные переменные, a i j , i = 1 , 2 . . . , p , j = 1 , 2 . . . , n — числа (действительные или комплексные), b 1 , b 2 , . . . , b n — свободные члены.

Если b 1 = b 2 = . . . = b n = 0 , то такую систему линейных уравнений называют однородной, если наоборот — неоднородной.

Решение СЛАУ — совокупность значения неизвестных переменных x 1 = a 1 , x 2 = a 2 , . . . , x n = a n , при которых все уравнения системы становятся тождественными друг другу.

Совместная СЛАУ — система, для которой существует хотя бы один вариант решения. В противном случае она называется несовместной.

Определенная СЛАУ — это такая система, которая имеет единственное решение. В случае, если решений больше одного, то такая система будет называться неопределенной.

Координатный вид записи:

a 11 x 1 + a 12 x 2 + . . . + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + . . . + a 2 n x n = b 2 ⋯ a p 1 x 1 + a p 2 x 2 + . . . + a p n x n = b p

Матричный вид записи: A X = B , где

A = a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ ⋯ a p 1 a p 2 ⋯ a p n — основная матрица СЛАУ;

X = x 1 x 2 ⋮ x n — матрица-столбец неизвестных переменных;

B = b 1 b 2 ⋮ b n — матрица свободных членов.

Расширенная матрица — матрица, которая получается при добавлении в качестве ( n + 1 ) столбца матрицу-столбец свободных членов и имеет обозначение Т .

T = a 11 a 12 ⋮ a 1 n b 1 a 21 a 22 ⋮ a 2 n b 2 ⋮ ⋮ ⋮ ⋮ ⋮ a p 1 a p 2 ⋮ a p n b n

Вырожденная квадратная матрица А — матрица, определитель которой равняется нулю. Если определитель не равен нулю, то такая матрица, а потом называется невырожденной.

Описание алгоритма использования метода Гаусса для решения СЛАУ с равным количеством уравнений и неизвестных (обратный и прямой ход метода Гаусса)

Для начала разберемся с определениями прямого и обратного ходов метода Гаусса.

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

Обратный ход Гаусса — процесс последовательного нахождения неизвестных от последнего уравнения к первому.

Алгоритм метода Гаусса:

Решаем систему из n линейных уравнений с n неизвестными переменными:

a 11 x 1 + a 12 x 2 + a 13 x 3 + . . . + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + a 23 x 3 + . . . + a 2 n x n = b 2 a 31 x 1 + a 32 x 2 + a 33 x 3 + . . . + a 3 n x n = b 3 ⋯ a n 1 x 1 + a n 2 x 2 + a n 3 x 3 + . . . + a n n x n = b n

Определитель матрицы не равен нулю.

  1. a 11 не равен нулю — всегда можно добиться этого перестановкой уравнений системы;
  2. исключаем переменную x 1 из всех уравнений систему, начиная со второго;
  3. прибавим ко второму уравнению системы первое, которое умножено на — a 21 a 11 , прибавим к третьему уравнению первое умноженное на — a 21 a 11 и т.д.

После проведенных действий матрица примет вид:

a 11 x 1 + a 12 x 2 + a 13 x 3 + . . . + a 1 n x n = b 1 a ( 1 ) 22 x 2 + a ( 1 ) 23 x 3 + . . . + a ( 1 ) 2 n x n = b ( 1 ) 2 a ( 1 ) 32 x 2 + a ( 1 ) 33 x 3 + . . . + a ( 1 ) 3 n x n = b ( 1 ) 3 ⋯ a ( 1 ) n 2 x 2 + a ( 1 ) n 3 x 3 + . . . + a ( 1 ) n n x n = b ( 1 ) n ,

где a i j ( 1 ) = a i j + a 1 j ( — a i 1 a 11 ) , i = 2 , 3 , . . . , n , j = 2 , 3 , . . . , n , b i ( 1 ) = b i + b 1 ( — a i 1 a 11 ) , i = 2 , 3 , . . . , n .

Далее производим аналогичные действия с выделенной частью системы:

a 11 x 1 + a 12 x 2 + a 13 x 3 + . . . + a 1 n x n = b 1 a ( 1 ) 22 x 2 + a ( 1 ) 23 x 3 + . . . + a ( 1 ) 2 n x n = b ( 1 ) 2 a ( 1 ) 32 x 2 + a ( 1 ) 33 x 3 + . . . + a ( 1 ) 3 n x n = b ( 1 ) 3 ⋯ a ( 1 ) n 2 x 2 + a ( 1 ) n 3 x 3 + . . . + a ( 1 ) n n x n = b ( 1 ) n

Считается, что a 22 ( 1 ) не равна нулю. Таким образом, приступаем к исключению неизвестной переменной x 2 из всех уравнений, начиная с третьего:

  • к третьему уравнению систему прибавляем второе, которое умножено на — a ( 1 ) 42 a ( 1 ) 22 ;
  • к четвертому прибавляем второе, которое умножено на — a ( 1 ) 42 a ( 1 ) 22 и т.д.

После таких манипуляций СЛАУ имеет следующий вид:

a 11 x 1 + a 12 x 2 + a 13 x 3 + . . . + a 1 n x n = b 1 a ( 1 ) 22 x 2 + a ( 1 ) 23 x 3 + . . . + a ( 1 ) 2 n x n = b ( 1 ) 2 a ( 2 ) 33 x 3 + . . . + a ( 2 ) 3 n x n = b ( 2 ) 3 ⋯ a ( 2 ) n 3 x 3 + . . . + a ( 2 ) n n x n = b ( 2 ) n ,

где a i j ( 2 ) = a ( 1 ) i j + a 2 j ( — a ( 1 ) i 2 a ( 1 ) 22 ) , i = 3 , 4 , . . . , n , j = 3 , 4 , . . . , n , b i ( 2 ) = b ( 1 ) i + b ( 1 ) 2 ( — a ( 1 ) i 2 a ( 1 ) 22 ) , i = 3 , 4 , . . . , n . .

Таким образом, переменная x 2 исключена из всех уравнений, начиная с третьего.

Далее приступаем к исключению неизвестной x 3 , действуя по аналоги с предыдущим образцом:

a 11 x 1 + a 12 x 2 + a 13 x 3 + . . . + a 1 n x n = b 1 a ( 1 ) 22 x 2 + a ( 1 ) 23 x 3 + . . . + a ( 1 ) 2 n x n = b ( 1 ) 2 a ( 2 ) 33 x 3 + . . . + a ( 2 ) 3 n x n = b ( 2 ) 3 ⋯ a ( n — 1 ) n n x n = b ( n — 1 ) n

После того как система приняла такой вид, можно начать обратный ход метода Гаусса:

  • вычисляем x n из последнего уравнения как x n = b n ( n — 1 ) a n n ( n — 1 ) ;
  • с помощью полученного x n находим x n — 1 из предпоследнего уравнения и т.д., находим x 1 из первого уравнения.

Найти решение системы уравнений методом Гаусса:

3 x 1 + 2 x 2 + x 3 + x 4 = — 2 x 1 — x 2 + 4 x 3 — x 4 = — 1 — 2 x 1 — 2 x 2 — 3 x 3 + x 4 = 9 x 1 + 5 x 2 — x 3 + 2 x 4 = 4

Коэффициент a 11 отличен от нуля, поэтому приступаем к прямому ходу решения, т.е. к исключению переменной x 11 из всех уравнений системы, кроме первого. Для того, чтобы это сделать, прибавляем к левой и правой частям 2-го, 3-го и 4-го уравнений левую и правую часть первого, которая умножена на — a 21 a 11 :

— 1 3 , — а 31 а 11 = — — 2 3 = 2 3 и — а 41 а 11 = — 1 3 .

3 x 1 + 2 x 2 + x 3 + x 4 = — 2 x 1 — x 2 + 4 x 3 — x 4 = — 1 — 2 x 1 — 2 x 2 — 3 x 3 + x 4 = 9 x 1 + 5 x 2 — x 3 + 2 x 4 = 4 ⇔

⇔ 3 x 1 + 2 x 2 + x 3 + x 4 = — 2 x 1 — x 2 + 4 x 3 — x 4 + ( — 1 3 ) ( 3 x 1 + 2 x 2 + x 3 + x 4 ) = — 1 + ( — 1 3 ) ( — 2 ) — 2 x 1 — 2 x 2 — 3 x 3 + x 4 + 2 3 ( 3 x 1 + 2 x 2 + x 3 + x 4 ) = 9 + 2 3 ( — 2 ) x 1 + 5 x 2 — x 3 + 2 x 4 + ( — 1 3 ) ( 3 x 1 + 2 x 2 + x 3 + x 4 ) = 4 + ( — 1 3 ) ( — 2 ) ⇔

⇔ 3 x 1 + 2 x 2 + x 3 + x 4 = — 2 — 5 3 x 2 + 11 3 x 3 — 4 3 x 4 = — 1 3 — 2 3 x 2 — 7 3 x 3 + 5 3 x 4 = 23 3 13 3 x 2 — 4 3 x 3 + 5 3 x 4 = 14 3

Мы исключили неизвестную переменную x 1 , теперь приступаем к исключению переменной x 2 :

— a 32 ( 1 ) a 22 ( 1 ) = — — 2 3 — 5 3 = — 2 5 и а 42 ( 1 ) а 22 ( 1 ) = — 13 3 — 5 3 = 13 5 :

3 x 1 + 2 x 2 + x 3 + x 4 = — 2 — 5 3 x 2 + 11 3 x 3 — 4 3 x 4 = — 1 3 — 2 3 x 2 — 7 3 x 3 + 5 3 x 4 = 23 3 13 3 x 2 — 4 3 x 3 + 5 3 x 4 = 14 3 ⇔

⇔ 3 x 1 + 2 x 2 + x 3 + x 4 = — 2 — 5 3 x 2 + 11 3 x 3 — 4 3 x 4 = — 1 3 — 2 3 x 2 — 7 3 x 3 + 5 3 x 4 + ( — 2 5 ) ( — 5 3 x 2 + 11 3 x 3 — 4 3 x 4 ) = 23 3 + ( — 2 5 ) ( — 1 3 ) 13 3 x 2 — 4 3 x 3 + 5 3 x 4 + 13 5 ( — 5 3 x 2 + 11 3 x 3 — 4 3 x 4 ) = 14 3 + 13 5 ( — 1 3 ) ⇔

⇔ 3 x 1 + 2 x 2 + x 3 + x 4 = — 2 — 5 3 x 2 + 11 3 x 3 — 4 3 x 4 = — 1 3 — 19 5 x 3 + 11 5 x 4 = 39 5 41 5 x 3 — 9 5 x 4 = 19 5

Для того чтобы завершить прямой ход метода Гаусса, необходимо исключить x 3 из последнего уравнения системы — а 43 ( 2 ) а 33 ( 2 ) = — 41 5 — 19 5 = 41 19 :

3 x 1 + 2 x 2 + x 3 + x 4 = — 2 — 5 3 x 2 + 11 3 x 3 — 4 3 x 4 = — 1 3 — 19 5 x 3 + 11 5 x 4 = 39 5 41 5 x 3 — 9 5 x 4 = 19 5 ⇔

3 x 1 + 2 x 2 + x 3 + x 4 = — 2 — 5 3 x 2 + 11 3 x 3 — 4 3 x 4 = — 1 3 — 19 5 x 3 + 11 5 x 4 = 39 5 41 5 x 3 — 9 5 x 4 + 41 19 ( — 19 5 x 3 + 11 5 x 4 ) = 19 5 + 41 19 39 5 ⇔

⇔ 3 x 1 + 2 x 2 + x 3 + x 4 = — 2 — 5 3 x 2 + 11 3 x 3 — 4 3 x 4 = — 1 3 — 19 5 x 3 + 11 5 x 4 = 39 5 56 19 x 4 = 392 19

Обратный ход метода Гаусса:

  • из последнего уравнения имеем: x 4 = 392 19 56 19 = 7 ;
  • из 3-го уравнения получаем: x 3 = — 5 19 ( 39 5 — 11 5 x 4 ) = — 5 19 ( 39 5 — 11 5 × 7 ) = 38 19 = 2 ;
  • из 2-го: x 2 = — 3 5 ( — 1 3 — 11 3 x 4 + 4 3 x 4 ) = — 3 5 ( — 1 3 — 11 3 × 2 + 4 3 × 7 ) = — 1 ;
  • из 1-го: x 1 = 1 3 ( — 2 — 2 x 2 — x 3 — x 4 ) = — 2 — 2 × ( — 1 ) — 2 — 7 3 = — 9 3 = — 3 .

Ответ: x 1 = — 3 ; x 2 = — 1 ; x 3 = 2 ; x 4 = 7

Найти решение этого же примера методом Гаусса в матричной форме записи:

3 x 1 + 2 x 2 + x 3 + x 4 = — 2 x 1 — x 2 + 4 x 3 — x 4 = — 1 — 2 x 1 — 2 x 2 — 3 x 3 + x 4 = 9 x 1 + 5 x 2 — x 3 + 2 x 4 = 4

Расширенная матрица системы представлена в виде:

x 1 x 2 x 3 x 4 3 2 1 1 1 — 1 4 — 1 — 2 — 2 — 3 1 1 5 — 1 2 — 2 — 1 9 4

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

Преобразование матрицы начинается с превращения всех элементов нулевые. Для этого к элементам 2-ой, 3-ей и 4-ой строк прибавляем соответствующие элементы 1-ой строки, которые умножены на — a 21 a 11 = — 1 3 , — a 31 a 11 = — — 2 3 = 2 3 и н а — а 41 а 11 = — 1 3 .

Дальнейшие преобразования происходит по такой схеме: все элементы во 2-ом столбце, начиная с 3-ей строки, становятся нулевыми. Такой процесс соответствует процессу исключения переменной . Для того, чтобы выполнить этой действие, необходимо к элементам 3-ей и 4-ой строк прибавить соответствующие элементы 1-ой строки матрицы, которая умножена на — а 32 ( 1 ) а 22 ( 1 ) = — 2 3 — 5 3 = — 2 5 и — а 42 ( 1 ) а 22 ( 1 ) = — 13 3 — 5 3 = 13 5 :

x 1 x 2 x 3 x 4 3 2 1 1 | — 2 0 — 5 3 11 3 — 4 3 | — 1 3 0 — 2 3 — 7 3 5 3 | 23 3 0 13 3 — 4 3 5 3 | 14 3

x 1 x 2 x 3 x 4

3 2 1 1 | — 2 0 — 5 3 11 3 — 4 3 | — 1 3 0 — 2 3 + ( — 2 5 ) ( — 5 3 ) — 7 3 + ( — 2 5 ) 11 3 5 3 + ( — 2 5 ) ( — 4 3 ) | 23 3 + ( — 2 5 ) ( — 1 3 ) 0 13 3 + 13 5 ( — 5 3 ) — 4 3 + 13 5 × 11 3 5 3 + 13 5 ( — 4 3 ) | 14 3 + 13 5 ( — 1 3 )

x 1 x 2 x 3 x 4

3 2 1 1 | — 2 0 — 5 3 11 3 — 4 3 | — 1 3 0 0 — 19 5 11 5 | 39 5 0 0 41 5 — 9 5 | 19 5

Теперь исключаем переменную x 3 из последнего уравнения — прибавляем к элементам последней строки матрицы соответствующие элементы последней строки, которая умножена на а 43 ( 2 ) а 33 ( 2 ) = — 41 5 — 19 5 = 41 19 .

x 1 x 2 x 3 x 4 3 2 1 1 | — 2 0 — 5 3 11 3 — 4 3 | — 1 3 0 0 — 19 5 11 5 | 39 5 0 0 41 5 — 9 5 | 19 5

x 1 x 2 x 3 x 4

3 2 1 1 | — 2 0 — 5 3 11 3 — 4 3 | — 1 3 0 0 — 19 5 11 5 | 39 5 0 0 41 5 + 41 19 ( — 19 5 ) — 9 5 + 41 19 × 11 5 | 19 5 + 41 19 × 39 5

x 1 x 2 x 3 x 4

3 2 1 1 | — 2 0 — 5 3 11 3 — 4 3 | — 1 3 0 0 — 19 5 11 5 | 39 5 0 0 0 56 19 | 392 19

Теперь применим обратных ход метода. В матричной форме записи такое преобразование матрицы, чтобы матрица, которая отмечена цветом на изображении:

x 1 x 2 x 3 x 4 3 2 1 1 | — 2 0 — 5 3 11 3 — 4 3 | — 1 3 0 0 — 19 5 11 5 | 39 5 0 0 0 56 19 | 392 19

стала диагональной, т.е. приняла следующий вид:

x 1 x 2 x 3 x 4 3 0 0 0 | а 1 0 — 5 3 0 0 | а 2 0 0 — 19 5 0 | а 3 0 0 0 56 19 | 392 19 , где а 1 , а 2 , а 3 — некоторые числа.

Такие преобразования выступают аналогом прямому ходу, только преобразования выполняются не от 1-ой строки уравнения, а от последней. Прибавляем к элементам 3-ей, 2-ой и 1-ой строк соответствующие элементы последней строки, которая умножена на

— 11 5 56 19 = — 209 280 , н а — — 4 3 56 19 = 19 42 и н а — 1 56 19 = 19 56 .

x 1 x 2 x 3 x 4 3 2 1 1 | — 2 0 — 5 3 11 3 — 4 3 | — 1 3 0 0 — 19 5 11 5 | 39 5 0 0 0 56 19 | 392 19

x 1 x 2 x 3 x 4

3 2 1 1 + ( — 19 56 ) 56 19 | — 2 + ( — 19 56 ) 392 19 0 — 5 3 11 3 — 4 3 + 19 42 × 56 19 | — 1 3 + 19 42 × 392 19 0 0 — 19 5 11 5 + ( — 209 280 ) 56 19 | 39 5 + ( — 209 280 ) 392 19 0 0 0 56 19 | 392 19

x 1 x 2 x 3 x 4

3 2 1 0 | — 9 0 — 5 3 11 3 0 | 9 0 0 — 19 5 0 | — 38 5 0 0 0 56 19 | 392 19

Далее прибавляем к элементам 2-ой и 1-ой строк соответствующие элементы 3-ей строки, которые умножены на

— 11 3 — 19 5 = 55 57 и н а — 1 — 19 5 = 5 19 .

x 1 x 2 x 3 x 4 3 2 1 0 | — 9 0 — 5 3 11 3 0 | 9 0 0 — 19 5 0 | — 38 5 0 0 0 56 19 | 392 19

x 1 x 2 x 3 x 4

3 2 1 + 5 19 ( — 19 5 ) 0 | — 9 + 5 19 ( — 38 5 ) 0 — 5 3 11 3 + 55 57 ( — 19 5 ) 0 | 9 + 55 57 ( — 38 5 ) 0 0 — 19 5 0 | — 38 5 0 0 0 56 19 | 392 19

x 1 x 2 x 3 x 4

3 2 1 0 | — 11 0 — 5 3 0 0 | 5 3 0 0 — 19 5 0 | — 38 5 0 0 0 56 19 | 392 19

На последнем этапе прибавляем элементы 2-ой строки к соответствующим элементам 1-ой строки, которые умножены на — 2 — 5 3 = 6 5 .

x 1 x 2 x 3 x 4 3 2 1 0 | — 11 0 — 5 3 0 0 | 5 3 0 0 — 19 5 0 | — 38 5 0 0 0 56 19 | 392 19

x 1 x 2 x 3 x 4

3 2 + 6 5 ( — 5 3 ) 0 0 | — 11 + 6 5 × 5 3 ) 0 — 5 3 0 0 | 5 3 0 0 — 19 5 0 | — 38 5 0 0 0 56 19 | 392 19

x 1 x 2 x 3 x 4

3 0 0 0 | — 9 0 — 5 3 0 0 | 5 3 0 0 — 19 5 0 | — 38 5 0 0 0 56 19 | 392 19

Полученная матрица соответствует системе уравнений

3 x 1 = — 9 — 5 3 x 2 = 5 3 — 19 5 x 3 = — 38 5 56 19 x 4 = 392 19 , откуда находим неизвестные переменные.

Ответ: x 1 = — 3 , x 2 = — 1 , x 3 = 2 , x 4 = 7 . ​​​

Описание алгоритма использования метода Гаусса для решения СЛАУ с несовпадающим количеством уравнений и неизвестных, или с вырожденной системой матрицы

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

Из данного раздела мы узнаем, как с помощью метода Гаусса определить совместность или несовместность СЛАУ, а также, в случае совместности, определить количество решений для системы.

В принципе, метод исключения неизвестных при таких СЛАУ остается таким же, однако есть несколько моментов, на которых необходимо заострить внимание.

На некоторых этапах исключения неизвестных, некоторые уравнения обращаются в тождества 0=0. В таком случае, уравнения можно смело убрать из системы и продолжить прямой ход метода Гаусса.

Если мы исключаем из 2-го и 3-го уравнения x 1 , то ситуация оказывается следующей:

x 1 + 2 x 2 — x 3 + 3 x 4 = 7 2 x 1 + 4 x 2 — 2 x 3 + 6 x 4 = 14 x — x + 3 x + x = — 1 ⇔

x 1 + 2 x 2 — x 3 + 3 x 4 = 7 2 x 1 + 4 x 2 — 2 x 3 + 6 x 4 + ( — 2 ) ( x 1 + 2 x 2 — x 3 + 3 x 4 ) = 14 + ( — 2 ) × 7 x — x + 3 x + x + ( — 1 ) ( x 1 + 2 x 2 — x 3 + 3 x 4 ) = — 1 + ( — 1 ) × 7 ⇔

⇔ x 1 + 2 x 2 — x 3 + 3 x 4 = 7 0 = 0 — 3 x 2 + 4 x 3 — 2 x 4 = — 8

Из этого следует, что 2-ое уравнение можно смело удалять из системы и продолжать решение.

Если мы проводим прямой ход метода Гаусса, то одно или несколько уравнений может принять вид — некоторое число, которое отлично от нуля.

Это свидетельствует о том, что уравнение, обратившееся в равенство 0 = λ , не может обратиться в равенство ни при каких любых значениях переменных. Проще говоря, такая система несовместна (не имеет решения).

  • В случае если при проведении прямого хода метода Гаусса одно или несколько уравнений принимают вид 0 = λ , где λ — некоторое число, которое отлично от нуля, то система несовместна.
  • Если же в конце прямого хода метода Гаусса получается система, число уравнений которой совпадает с количеством неизвестных, то такая система совместна и определена: имеет единственное решение, которое вычисляется обратным ходом метода Гаусса.
  • Если при завершении прямого хода метода Гаусса число уравнений в системе оказывается меньше количества неизвестных, то такая система совместна и имеет бесконечно количество решений, которые вычисляются при обратном ходе метода Гаусса.

Численные методы решения СЛАУ

Постановка задачи

Прикладные задачи, характерные для проектирования современных объектов новой техники, часто сводятся к многомерным в общем случае нелинейным уравнениям, которые решаются методом линеаризации, т.е. сведением нелинейных уравнений к линейным. В общем случае система [math]n[/math] уравнений с [math]n[/math] неизвестными записывается в виде

где [math]f_1,f_2,\ldots,f_n[/math] — функции [math]n[/math] переменных, нелинейные или линейные ( [math]x_i[/math] в функции [math]f_i[/math] входят в первых или частично в нулевых степенях). Здесь рассматривается частный случай задачи (1.1) — линейная неоднородная задача для систем линейных алгебраических уравнений (СЛАУ), которая сокращенно записывается в виде

где [math]A=(a_\in \mathbb^[/math] — действительная матрица размера [math](n\times n),

i,\,j[/math] — переменные, соответствующие номерам строк и столбцов (целые числа); [math]b=(b_1,\ldots,b_n)^T\in \mathbb^n[/math] — вектор-столбец размера [math](n\times1),

x=(x_1,\ldots,x_n)^T\in \mathbb^n[/math] — вектор-столбец неизвестных, [math]\mathbb^n[/math] — n-мерное евклидово пространство, верхний индекс [math]T[/math] здесь и далее обозначает операцию транспонирования. Требуется найти решение [math]x_<\ast>= (x_<\ast1>,\ldots, x_<\ast n>)^T\in \mathbb^n[/math] системы (1.2), подстановка которого в (1.2) приводит к верному равенству [math]Ax_<\ast>=b[/math] .

1. Из линейной алгебры известно, что решение задачи (1.2) существует и единственно, если детерминант матрицы [math]A[/math] отличен от нуля, т.е. [math]\det A \equiv |A|\ne0[/math] ( [math]A[/math] — невырожденная матрица, называемая также неособенной).

2. Поставленная задача часто именуется первой задачей линейной алгебры. Подчеркнем, что в ней входными (исходными) данными являются матрица [math]A[/math] и вектор [math]b[/math] , а выходными — вектор [math]x[/math] .

3. Задача (1.2) имеет следующие особенности:

а) задача линейная (все переменные [math]x_[/math] , входящие в систему, имеют степени не выше первой) и неоднородная [math](b\ne0)[/math] ;

б) количество уравнений равно количеству неизвестных (система замкнута);

в) количество уравнений для некоторых практических задач велико: k\cdot10^3

г) при больших [math]n[/math] использовать формулу [math]x=A^<-1>b[/math] не рекомендуется в силу трудностей нахождения обратной матрицы.

4. Важнейшим признаком любой математической задачи, который надо в первую очередь принимать во внимание при ее анализе и выборе метода решения, является ее линейность или нелинейность. Это связано с тем, что нелинейные задачи с вычислительной точки зрения являются наиболее трудными. Так, нелинейная задача (1.1) является достаточно сложной при числе уравнений [math]n[/math] , пропорциональном [math]10^2[/math] , а линейная задача — при [math]n[/math] , пропорциональном [math]10^6[/math] .

Число обусловленности

Характер задачи и точность получаемого решения в большой степени зависят от ее обусловленности, являющейся важнейшим математическим понятием, влияющим на выбор метода ее решения. Поясним это понятие на примере двумерной задачи: [math]\begina_<11>x_1+ a_<12>x_2=b_1,\\ a_<21>x_1+ a_<22>x_2=b_2.\end[/math] . Точным решением этой задачи является вектор [math]x_<\ast>= (x_<\ast1>, x_<\ast2>)^T[/math] , компоненты которого определяются координатами точки пересечения двух прямых, соответствующих уравнениям [math]a_<11>x_1+ a_<12>x_2=b_1,[/math] [math]a_<21>x_1+ a_<22>x_2=b_2[/math] (рис. 1.1,а).

На рис. 1.1,б применительно к трем наборам входных данных, заданных с некоторыми погрешностями и соответствующих различным системам линейных уравнений, иллюстрируется характер обусловленности системы. Если [math]\det A[/math] существенно отличен от нуля, то точка пересечения пунктирных прямых, смещенных относительно сплошных прямых из-за погрешностей задания [math]A[/math] и [math]b[/math] , сдвигается несильно. Это свидетельствует о хорошей обусловленности системы. При [math]\det A\approx0[/math] небольшие погрешности в коэффициентах могут привести к большим погрешностям в решении (плохо обусловленная задача), поскольку прямые близки к параллельным. При [math]\det A=0[/math] прямые параллельны или они совпадают, и тогда решение задачи не существует или оно не единственно.

Более строго обусловленность задачи характеризуется числом обусловленности [math]\nu(A)= \|A\|\cdot \|A^<-1>\|[/math] , где [math]\|A\|[/math] — норма матрицы [math]A[/math] , а [math]\|A^<-1>\|[/math] — норма обратной матрицы. Чем больше это число, тем хуже обусловленность системы (при [math]\nu(A)\approx 10^3\div 10^4[/math] система линейных алгебраических уравнений плохо обусловлена). В качестве нормы матрицы может быть принято число, являющееся максимальным из сумм (по модулю) элементов всех строк этой матрицы. Подчеркнем, что реализация хорошей или плохой обусловленности в корректной и некорректной задачах напрямую связана с вытекающей отсюда численной устойчивостью или неустойчивостью. При этом для решения некорректных задач обычно применяются специальные методы или математические преобразования этих задач к корректным.

В численном анализе используются два класса численных методов решения систем линейных алгебраических уравнений:

1. Прямые методы , позволяющие найти решение за определенное число операций. К прямым методам относятся: метод Гаусса и его модификации (в том числе метод прогонки), метод [math]LU[/math] — разложения и др.

2. Итерационные методы , основанные на использовании повторяющегося (циклического) процесса и позволяющие получить решение в результате последовательных приближений. Операции, входящие в повторяющийся процесс, составляют итерацию. К итерационным методам относятся: метод простых итераций, метод Зейделя и др.

Численные схемы реализации метода Гаусса

Рассмотрим частный случай решения СЛАУ — задачу нахождения решения системы линейных алгебраических уравнений

b=\beginb_1\\\vdots\\b_n\end[/math] столбцы размеров [math]n\times 1[/math] . Это означает, что число уравнений совпадает с числом неизвестных, т.е. [math]m=n[/math] . Предполагается, что выполняется условие [math]\det\equiv|A|\ne0[/math] . Тогда по теореме 5.1 решение системы (10.1) существует и единственно.

Согласно изложенному ранее, метод Гаусса содержит две совокупности операций, которые условно названы прямым ходом и обратным ходом.

Прямой ход состоит в исключении элементов, расположенных ниже элементов, соответствующих главной диагонали матрицы [math]A[/math] . При этом матрица [math]A[/math] с помощью элементарных преобразований преобразуется к верхней треугольной, а расширенная матрица [math](A\mid b)[/math] — к трапециевидной:

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

Обратный ход состоит в решении системы [math]\widetildex= \widetilde[/math] .

Алгоритм численного метода Гаусса

а) Положить номер шага [math]k=1[/math] . Переобозначить все элементы расширенной матрицы [math](A\mid b)[/math] через [math]a_^<(0)>,[/math] [math]i=1,\ldots,n;[/math] [math]j=1,\ldots,n+1[/math] ;

б) Выбрать ведущий элемент одним из двух способов.

Первый способ (схема единственного деления). Выбрать в качестве ведущего элемента [math]a_^<(k-1)>\ne0[/math] .

Второй способ (схема с выбором ведущего элемента). На k-м шаге сначала переставить [math](n-k+1)[/math] оставшихся уравнений так, чтобы наибольший по модулю коэффициент при переменной [math]x_k[/math] попал на главную диагональ, а затем выбрать в качестве ведущего элемента [math]a_^<(k-1)>[/math] .

в) каждый элемент строки, в которой находится ведущий элемент, поделить на него:

г) элементы строк, находящихся ниже строки с ведущим элементом, подсчитать по правилу прямоугольника, схематически показанного на рис. 10.1 (исключить элементы, стоящие ниже ведущего элемента).

Поясним алгоритм исключения на рис. 10.1. Пусть рассчитывается значение [math]a_^<(k)>[/math] на k-м шаге. Следует соединить элемент [math]a_^<(k-1)>[/math] с ведущим элементом [math]a_^<(k-1)>[/math] . Получена одна из диагоналей прямоугольника. Вторую диагональ образует соединение элементов [math]a_^<(k-1)>[/math] и [math]a_^<(k-1)>[/math] . Для нахождения значения [math]a_^<(k)>[/math] из его текущего значения [math]a_^<(k-1)>[/math] вычитается произведение элементов [math]a_^<(k-1)>[/math] и [math]a_^<(k-1)>[/math] , деленное на ведущий элемент;

д) если [math]k\ne n[/math] , то перейти к пункту «б», где вместо [math]k[/math] положить [math]k+1[/math] .

Если [math]k=n[/math] , завершить прямой ход. Получена расширенная трапециевидная матрица из элементов [math]a_^<(n)>[/math] , соответствующая [math]\bigl(\widetilde\mid \widetilde\bigr)[/math] .

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

2. По окончании прямого хода может быть вычислен определитель матрицы [math]A[/math] путем перемножения ведущих элементов.

3. В расчетных формулах все элементы расширенной матрицы обозначаются одним символом [math]a[/math] , так как они преобразуются по единым правилам.

4. Понятие нормы квадратной невырожденной матрицы позволяет исследовать влияние малых изменений правой части и элементов матрицы на решение систем линейных уравнений. Положительное число [math]A=\|A\|\cdot\|A^<-1>\|[/math] называется числом обусловленности матрицы . Существует и более общее определение числа обусловленности, применимое к вырожденным матрицам: [math]\operatornameA= \sup_\frac<\|Ax\|><\|x\|>: \inf_\frac<\|Ay\|><\|y\|>[/math] . Чем больше число обусловленности, тем сильнее ошибка в исходных данных сказывается на решении линейной системы. Если число [math]\operatornameA[/math] велико, система считается плохо обусловленной, т.е. решение системы может существенно изменяться даже при малых изменениях элементов матрицы [math]A[/math] и столбца свободных членов [math]b[/math] .

Пример 10.3. Найти число обусловленности матрицы системы [math]\beginx_1+10x_2=b_1,\\ 100x_1+1001x_2=1101. \end[/math] Решить систему при [math]b_1=11[/math] и [math]b_1=11,\!01[/math] , сравнить близость полученных решений.

По формуле (4.2) для матрицы [math]A=\begin 1&10\\ 100&1001 \end[/math] получаем [math]A^<-1>=\begin 1001&-10\\ -1000&1 \end[/math] . Тогда

В результате [math]\operatornameA= \|A\|\cdot\|A^<-1>\|=1101\cdot1011= 1’113’111[/math] . Очевидно, число обусловленности матрицы системы достаточно велико, поэтому система является плохо обусловленной.

При [math]b_1=11[/math] система имеет единственное решение [math]x_1=1,

x_2=1[/math] , а при [math]b_1=11,\!01[/math] , единственное решение [math]x_1=11,\!01,

x_2=0[/math] . Несмотря на малое различие в исходных данных: [math]\Delta b_1=|11-11,\!01|=0,\!01[/math] , полученные решения отличаются существенно: [math]\Delta x=\left\| \begin1\\1 \end— \begin 11,\!01\\0 \end \right\|_1=10,\!01[/math] , т.е. погрешность [math]\Delta x[/math] решения в 1001 раз больше погрешности [math]\Delta b_1[/math] правой части системы.

Таким образом, решение плохо обусловленной системы может существенно изменяться даже при малых изменениях исходных данных.

Пример 10.4. Решить систему линейных алгебраических уравнений методом Гаусса (схема единственного деления)

1. Прямой ход. Запишем расширенную матрицу и реализуем прямой ход с помощью описанных преобразований:

Согласно пункту 2 замечаний 10.2 определитель матрицы системы равен произведению ведущих элементов: [math]\det=2\cdot\frac<1><2>\cdot26=26[/math] .

Решая эту систему, начиная с последнего уравнения, находим: [math]x_3=3,

Пример 10.5. Методом Гаусса с выбором ведущего элемента по столбцам решить систему:

1. Прямой ход. Реализуем поиск ведущего элемента по правилу: на k-м шаге переставляются [math](n-k+1)[/math] оставшихся уравнений так, чтобы наибольший по модулю коэффициент при [math]x_k[/math] попал на главную диагональ:

Согласно пункту 2 замечаний 10.2 определитель матрицы системы равен произведению ведущих элементов:

Решая ее, последовательно получаем: [math]x_3=1,

Пример 10.6. Решить систему уравнений методом Гаусса единственного деления

В результате получено решение: [math]x_<\ast>= \begin 1&-1&0&1\end^T[/math] .

Метод прогонки для решения СЛАУ

Метод применяется в случае, когда матрица [math]A[/math] — трехдиагональная. Сформулируем общую постановку задачи.

Дана система линейных алгебраических уравнений с трехдиагональной матрицей [math]A[/math] . Развернутая запись этой системы имеет вид

которому соответствует расширенная матрица

Здесь первое и последнее уравнения, содержащие по два слагаемых, знак минус (–) при коэффициенте [math]\beta_i[/math] взят для более удобного представления расчетных формул метода.

Если к (10.2) применить алгоритм прямого хода метода Гаусса, то вместо исходной расширенной матрицы получится трапециевидная:

Учитывая, что последний столбец в этой матрице соответствует правой части, и переходя к системе, включающей неизвестные, получаем рекуррентную формулу:

Соотношение (10.3) есть формула для обратного хода, а формулы для коэффициентов [math]P_i,\,Q_i[/math] которые называются прогоночными , определяются из (10.2), (10.3). Запишем (10.3) для индекса [math]i-1\colon[/math] [math]x_=P_x_i+Q_[/math] и подставим в (10.2). Получим

Приводя эту формулу к виду (10.3) и сравнивая, получаем рекуррентные соотношения для [math]P_i,\,Q_i\colon[/math]

Определение прогоночных коэффициентов по формулам (10.4) соответствует прямому ходу метода прогонки.

Обратный ход метода прогонки начинается с вычисления [math]x_n[/math] . Для этого используется последнее уравнение, коэффициенты которого определены в прямом ходе, и последнее уравнение исходной системы:

Тогда определяется [math]x_n:[/math]

Остальные значения неизвестных находятся по рекуррентной формуле (10.3).

Алгоритм решения систем уравнений методом прогонки

Q_1=-\frac<\delta_1><\beta_1>[/math] (в (10.4) подставить [math]\alpha_1=0[/math] ).

2. Вычислить прогоночные коэффициенты: [math]P_2,Q_2;\,P_3,Q_3;\,\ldots;\,P_Q_[/math] по формулам (10.4).

2. Значения [math]x_,x_,\ldots,x_1[/math] определить по формуле (10.3):

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

2. Алгоритм метода прогонки называется корректным, если для всех [math]i=1,\ldots,n,

\beta_i-\alpha_iP_\ne0[/math] , и устойчивым, если [math]|P_i| .

3. Достаточным условием корректности и устойчивости прогонки является условие преобладания диагональных элементов в матрице [math]A[/math] , в которой [math]\alpha_i\ne0[/math] и [math]\gamma_i\ne0[/math] [math](i=2,3,\ldots,n-1)\colon[/math]

и в (10.6) имеет место строгое неравенство хотя бы при одном [math]i[/math] .

4. Алгоритм метода прогонки является экономичным и требует для своей реализации количество операций, пропорциональное [math]n[/math] .

Пример 10.7. Дана система линейных алгебраических уравнений с трехдиагональной матрицей [math]A

\gamma_4=0)[/math] . Решить эту систему методом прогонки.

Данная система удовлетворяет условию преобладания диагональных элементов (10.3): в первом уравнении 3″>[math]5>3[/math] , во втором уравнении 3+1″>[math]6>3+1[/math] ; в третьем уравнении 1+2″>[math]4>1+2[/math] , в четвертом уравнении 1″>[math]3>1[/math] . Далее выполняем прямой и обратный ход, учитывая, что расширенная матрица имеет вид

1. Прямой ход. Вычислим прогоночные коэффициенты:

Подчеркнем, что [math]\beta_1=-5;

\beta_4=3[/math] , так как в (10.2) во втором слагаемом взят знак «минус»:

Подстановкой решения [math]x_<\ast>=\begin 1&1&1&1 \end^T[/math] в исходную систему убеждаемся, что задача решена верно. Для данного примера [math]\beta_i-\alpha_iP_\ne0,

i=1,2,3,4;[/math] [math]|P_i| , т.е. метод прогонки оказался корректным и устойчивым (см. пункт 3 замечаний 10.3).

Для наглядности представления информации исходные данные и результаты расчетов поместим в табл. 10.1, где в первых четырех колонках содержатся исходные данные, а в последних трех — полученные результаты.

Пример 10.8. Дана система линейных алгебраических уравнений с трехдиагональной матрицей [math]A[/math] , решить систему методом прогонки:

Результаты расчетов в прямом и обратном ходе занесены в табл. 10.2.

В результате получено решение: [math]x_<\ast>=\begin 1&2&3&4 \end^T[/math] . Заметим, что условие преобладания диагональных элементов в данном примере не выполнено, но алгоритм метода прогонки позволил получить точное решение. При этом обратим внимание на небольшой порядок системы и отсутствие погрешностей вычислений.

Пример 10.9. Решить методом прогонки систему уравнений

Расширенная матрица системы имеет вид [math]\begin2&1&0&0\!\!&\vline\!\!&4\\ 2&3&-1&-1\!\!&\vline\!\!&9\\ 0&1&-1&3\!\!&\vline\!\!&12\\ 0&0&1&-1\!\!&\vline\!\!&-4 \end[/math] .

1. Прямой ход. Вычислим прогоночные коэффициенты:

Получено решение системы: [math]x_<\ast>=\begin 1&2&-1&3 \end^T[/math] . Результаты расчетов приведены в табл. 10.3

Метод LU-разложения для решения СЛАУ

Рассмотрим ещё один метод решения задачи (10.1). Метод опирается на возможность представления квадратной матрицы [math]A[/math] системы в виде произведения двух треугольных матриц:

где [math]L[/math] — нижняя, a [math]U[/math] — верхняя треугольные матрицы,

С учётом (10.7) система [math]Ax=b[/math] представляется в форме

Решение системы (10.8) сводится к последовательному решению двух простых систем с треугольными матрицами. В итоге процедура решения состоит из двух этапов.

Прямой ход. Произведение [math]Ux[/math] обозначим через [math]y[/math] . В результате решения системы [math]Ly=b[/math] находится вектор [math]y[/math] .

Обратный ход. В результате решения системы [math]Ux=y[/math] находится решение задачи — столбец [math]x[/math] .

В силу треугольности матриц [math]L[/math] и [math]U[/math] решения обеих систем находятся рекуррентно (как в обратном ходе метода Гаусса).

Из общего вида элемента произведения [math]A=LU[/math] , а также структуры матриц [math]L[/math] и [math]U[/math] следуют формулы для определения элементов этих матриц:

Результат представления матрицы [math]A[/math] в виде произведения двух треугольных матриц (операции факторизации) удобно хранить в одной матрице следующей структуры:

Вычисления на k-м шаге метода LU-разложения удобно производить, пользуясь двумя схемами, изображенными на рис. 10.2.

1. Всякую квадратную матрицу [math]A[/math] , имеющую отличные от нуля угловые миноры

можно представить в виде LU-разложения, причем это разложение будет единственным. Это условие выполняется для матриц с преобладанием диагональных элементов, у которых

2. В результате прямого хода может быть вычислен определитель матрицы [math]A[/math] по свойствам определителя произведения матриц (теорема 2.2) и определителя треугольных матриц:

Алгоритм метода LU-разложение

1. Выполнить операцию факторизации исходной матрицы [math]A[/math] , применяя схемы (рис. 10.2) или формулы (10.9), и получить матрицы [math]L[/math] и [math]U[/math] .

2. Решить систему [math]L\cdot y=b[/math] .

3. Решить систему [math]U\cdot x=b[/math] .

Пример 10.10. Решить систему линейных алгебраических уравнений методом LU-разложения

1. Выполним операцию факторизации:

В результате получены две треугольные матрицы:

Согласно пункту 2 замечаний 10.4, определитель матрицы [math]A[/math] находится в результате перемножения диагональных элементов матрицы [math]L\colon\,\det=2\cdot0,\!5\cdot26=26[/math] .

2. Решим систему [math]L\cdot y=b[/math] :

\begin2y_1=16,\\ 3y_1+0,\!5y_2=10,\\ y_1+2,\!5y_2+26y_3=16. \end[/math] . Отсюда [math]\beginy_1=8,\\ y_2=(10-3\cdot8)\cdot2=-28,\\[4pt] y_3=\dfrac<16-8+70><26>=3.\end[/math]

3. Решим систему [math]U\cdot x=y:[/math]

\beginx_1+0,\!5x_2+2x_3=8,\\ x_2-10x_3=-28,\\ x_3=3.\end[/math] . Отсюда [math]\begin x_3=3,\\ x_2=-28+10\cdot3=2,\\ x_1=8-2\cdot3-0,\!5\cdot2=1. \end[/math]

Пример 10.11. Решить систему линейных алгебраических уравнений методом LU-разложения.

1. Выполним операцию факторизации:

2. Решим систему линейных уравнений [math]L\cdot y=b[/math] :

\begin3y_1=5,\\ -2y_1+y_2/3=0,\\ 2y_1-y_2/3+5y_3=15. \end[/math] . Отсюда [math]\beginy_1=5/3,\\ y_2=10,\\ y_3=3.\end[/math]

3. Решим систему [math]U\cdot x=y[/math] :

\begin x_1-x_2/3=5/3,\\ x_2+3x_3=10,\\ x_3=3;\end \Rightarrow

Пример 10.12. Решить систему линейных алгебраических уравнений методом LU-разложения

1. Выполним процедуру факторизации:

В результате получаем матрицы LU-разложения:

2. Решим систему уравнений [math]L\cdot y=b:[/math]

\begin2y_1=4,\\ 2y_1+2y_2=9,\\ y_2-y_3/3=12,\\ y_3+5y_4=-4,\end\!\!\! \Rightarrow

3. Решим систему уравнений [math]U\cdot x=y:[/math]

Отсюда записываем решение исходной системы уравнений: [math]x_<\ast>= \begin1&2&-1&3\end^T[/math] .

Метод квадратных корней для решения СЛАУ

При решении систем линейных алгебраических уравнений с симметрическими матрицами можно сократить объем вычислений почти вдвое.

Пусть [math]A[/math] — симметрическая квадратная матрица системы [math]Ax=b[/math] порядка [math]n[/math] . Решим задачу ее представления в виде

Находя произведение [math]U^T\cdot U[/math] , составим систему уравнении относительно неизвестных элементов матрицы [math]U:[/math]

Система имеет следующий вид:

Из первой строки системы находим

Из второй строки определяем

Из последней строки имеем [math]\textstyle=\sqrt-\sum\limits_^u_^2>>[/math] .

Таким образом, элементы матрицы [math]U[/math] находятся из соотношений

При осуществлении [math]U^TU[/math] -разложения симметрической матрицы могут возникать ситуации, когда [math]u_=0[/math] при некотором [math]i[/math] или подкоренное выражение отрицательно. Для симметрических положительно определенных матриц разложение выполнимо.

Если матрица [math]A[/math] представима в форме [math]U^TU[/math] , то система [math]Ax=b[/math] имеет вид [math]U^TUx=b[/math] . Решение этой системы сводится к последовательному решению двух систем с треугольными матрицами. В итоге процедура решения состоит их двух этапов.

1. Прямой ход. Произведение [math]Ux[/math] обозначается через [math]y[/math] . В результате решения системы [math]U^Ty=b[/math] находится столбец [math]y[/math] .

2. Обратный ход. В результате решения системы [math]Ux=y[/math] находится решение задачи — столбец [math]x[/math] .

Алгоритм метода квадратных корней

1. Представить матрицу [math]A[/math] в форме [math]A=U^T\cdot U[/math] , используя (10.10).

2. Составить систему уравнений [math]U^T\cdot y=b[/math] и найти [math]y[/math] .

3. Составить систему уравнений [math]U\cdot x=y[/math] и найти [math]x[/math] .

Найти решение системы уравнений методом квадратных корней

Решение. 1. Представим матрицу [math]A[/math] в форме [math]A=U^T\cdot U[/math] , используя (10.10):

при [math]i=1[/math] получаем [math]u_<11>= \sqrt>= \sqrt<2>\,,

при [math]i=2[/math] имеем

Таким образом, получили

2. Решим систему [math]U^T\cdot y=b[/math] :

3. Решим систему [math]U\cdot x=y[/math] :

В результате получили решение исходной системы [math]x_1=1,

Метод простых итераций для решения СЛАУ

Альтернативой прямым методам решения СЛАУ являются итерационные методы, основанные на многократном уточнении [math]x^<(0)>[/math] , заданного приближенного решения системы [math]A\cdot x=b[/math] . Верхним индексом в скобках здесь и далее по тексту обозначается номер итерации (совокупности повторяющихся действий).

Реализация простейшего итерационного метода — метода простых итераций — состоит в выполнении следующих процедур.

1. Исходная задача [math]A\cdot x=b[/math] преобразуется к равносильному виду:

где [math]\alpha[/math] — квадратная матрица порядка [math]n[/math] ; [math]\beta[/math] — столбец. Это преобразование может быть выполнено различными путями, но для обеспечения сходимости итераций (см. процедуру 2) нужно добиться выполнения условия [math]\|\alpha\| .

2. Столбец [math]\beta[/math] принимается в качестве начального приближения [math]x^<(0)>= \beta[/math] и далее многократно выполняются действия по уточнению решения, согласно рекуррентному соотношению

или в развернутом виде

3. Итерации прерываются при выполнении условия (где 0″>[math]\varepsilon>0[/math] — заданная точность, которую необходимо достигнуть при решении задачи)

1. Процесс (10.12) называется параллельным итерированием , так как для вычисления (k+1)-го приближения всех неизвестных учитываются вычисленные ранее их k-е приближения.

2. Начальное приближение [math]x^<(0)>[/math] может выбираться произвольно или из некоторых соображений. При этом может использоваться априорная информация о решении или просто «грубая» прикидка. При выполнении итераций (любых) возникают следующие вопросы:

а) сходится ли процесс (10.12), т.е. имеет ли место [math]x^<(k)>\to x_<\ast>[/math] , при [math]k\to\infty[/math] , где [math]x_<\ast>[/math] — точное решение?

б) если сходимость есть, то какова ее скорость?

в) какова погрешность найденного решения [math]x^<(k+1)>[/math] , т.е. чему равна норма разности [math]\bigl\|x^<(k)>-x_<\ast>\bigr\|[/math] ?

Ответ на вопросы о сходимости дают следующие две теоремы.

Теорема (10.1) о достаточном условии сходимости метода простых итераций. Метод простых итераций, реализующийся в процессе последовательных приближений (10.12), сходится к единственному решению исходной системы [math]Ax=b[/math] при любом начальном приближении [math]x^<(0)>[/math] со скоростью не медленнее геометрической прогрессии, если какая-либо норма матрицы [math]\alpha[/math] меньше единицы, т.е. [math]\|\alpha\|_s .

1. Условие теоремы 10.1, как достаточное, предъявляет завышенные требования к матрице [math]\alpha[/math] , и потому иногда сходимость будет, если даже [math]\|\alpha\|\geqslant1[/math] .

2. Сходящийся процесс обладает свойством «самоисправляемости», т.е. отдельная ошибка в вычислениях не отразится на окончательном результате, так как ошибочное приближение можно рассматривать, как новое начальное.

3. Условия сходимости выполняются, если в матрице [math]A[/math] диагональные элементы преобладают, т.е.

и хотя бы для одного [math]i[/math] неравенство строгое. Другими словами, модули диагональных коэффициентов в каждом уравнении системы больше суммы модулей недиагональных коэффициентов (свободные члены не рассматриваются).

4. Чем меньше величина нормы [math]\|\alpha\|[/math] , тем быстрее сходимость метода.

Теорема (10.2) о необходимом и достаточном условии сходимости метода простых итераций. Для сходимости метода простых итераций (10.12) при любых [math]x^<(0)>[/math] и [math]\beta[/math] необходимо и достаточно, чтобы собственные значения матрицы [math]\alpha[/math] были по модулю меньше единицы, т.е. [math]\bigl|\lambda_i(\alpha)\bigr| .

Замечание 10.7. Хотя теорема 10.2 дает более общие условия сходимости метода простых итераций, чем теорема 10.1, однако ею воспользоваться сложнее, так как нужно предварительно вычислить границы собственных значений матрицы [math]\alpha[/math] или сами собственные значения.

Преобразование системы [math]Ax=b[/math] к виду [math]x=\alpha x+\beta[/math] с матрицей [math]\alpha[/math] , удовлетворяющей условиям сходимости, может быть выполнено несколькими способами. Приведем способы, используемые наиболее часто.

1. Уравнения, входящие в систему [math]Ax=b[/math] , переставляются так, чтобы выполнялось условие (10.14) преобладания диагональных элементов (для той же цели можно использовать другие элементарные преобразования). Затем первое уравнение разрешается относительно [math]x_1[/math] , второе — относительно [math]x_2[/math] и т.д. При этом получается матрица [math]\alpha[/math] с нулевыми диагональными элементами.

Например, система [math]\begin-2,\!8x_1+x_2+4x_3=60,\\ 10x_1-x_2+8x_3=10,\\ -x_1+2x_2-0,\!6x_3=20\end[/math] с помощью перестановки уравнений приводится к виду [math]\begin10x_1-x_2+8x_3=10,\\ -x_1+2x_2-0,\!6x_3=20,\\-2,\!8x_1+x_2+4x_3=60, \end[/math] где

|4|>|-2,\!8|+|1|[/math] , т.е. диагональные элементы преобладают.

Выражая [math]x_1[/math] из первого уравнения, [math]x_2[/math] — из второго, а [math]x_3[/math] — из третьего, получаем систему вида [math]x=\alpha x+\beta:[/math]

Заметим, что [math]\|\alpha\|_1=\max\<0,\!9;\,0,\!8;\,0,\!95 \>=0,\!95 , т.е. условие теоремы 10.1 выполнено.

Проиллюстрируем применение других элементарных преобразований. Так, система [math]\begin4x_1+x_2+9x_3=-7,\\ 3x_1+8x_2-7x_3=-6,\\ x_1+x_2-8x_3=7\end[/math] путем сложения первого и третьего уравнений и вычитания из второго уравнения третьего уравнения преобразуется к виду с преобладанием диагональных элементов: [math]\begin 5x_1+2x_1+x_3=0,\\ 2x_1+7x_2+x_3=-13,\\ x_1+x_2-8x_3=7. \end[/math]

2. Уравнения преобразуются так, чтобы выполнялось условие преобладания диагональных элементов, но при этом коэффициенты [math]\alpha_[/math] не обязательно равнялись нулю.

Например, систему [math]\begin1,\!02x_1-0,\!15x_2=2,\!7,\\ 0,\!8x_1+1,\!05x_2=4 \end[/math] можно записать в форме [math]\beginx_1=-0,\!02x_1+0,\!15x_2+2,\!7,\\ x_2=-0,\!8x_1-0,\!05x_2+4,\end[/math] для которой [math]\|\alpha\|_1= \max\<0,\!17;\,0,\!85\>= 0,\!85 .

i,j=1,\ldots,n[/math] достаточно малы, условие сходимости выполняется.

Алгоритм метода простых итераций

1. Преобразовать систему [math]Ax=b[/math] к виду [math]x=\alpha x+\beta[/math] одним из описанных способов.

2. Задать начальное приближение решения [math]x^<(0)>[/math] произвольно или положить [math]x^<(0)>=\beta[/math] , а также малое положительное число [math]\varepsilon[/math] (точность). Положить [math]k=0[/math] .

3. Вычислить следующее приближение [math]x^<(k+1)>[/math] по формуле [math]x^<(k+1)>= \alpha x^<(k)>+\beta[/math] .

4. Если выполнено условие [math]\bigl\|x^<(k+1)>-x^<(k)>\bigr\| , процесс завершить и в качестве приближенного решения задачи принять [math]x_<\ast>\cong x^<(k+1)>[/math] . Иначе положить [math]k=k+1[/math] и перейти к пункту 3 алгоритма.

Методом простых итераций с точностью [math]\varepsilon=0,\!01[/math] решить систему линейных алгебраических уравнений:

Решение. 1. Так как [math]|2| , то условие (5.41) не выполняется. Переставим уравнения так, чтобы выполнялось условие преобладания диагональных элементов:

|10|>|2|+|2|[/math] . Выразим из первого уравнения [math]x_1[/math] , из второго [math]x_2[/math] , из третьего [math]x_3:[/math]

Заметим, что [math]\|\alpha\|_1= \ma\<0,\!2;\,0,\!3;\,0,\!4 \>=0,\!4 , следовательно, условие сходимости (теорема 10.1) выполнено.

2. Зададим [math]x^<(0>=\beta= \begin 1,\!2\\1,\!3\\1,\!4 \end[/math] . В поставленной задаче [math]\varepsilon= 0,\!01[/math] .

3. Выполним расчеты по формуле (10.12):

до выполнения условия окончания и результаты занесем в табл. 10.4.

4. Расчет закончен, поскольку выполнено условие окончания [math]\bigl\|x^<(k+1)>-x^ <(k)>\bigr\|=0,\!0027 .

Приближенное решение задачи: [math]x_<\ast>\cong \begin0,\!9996& 0,\!9995& 0,\!9993 \end^T[/math] . Очевидно, точное решение: [math]x_<\ast>=\begin 1&1&1 \end^T[/math] .

Приведем результаты расчетов для другого начального приближения [math]x^<(0)>=\begin 1,\!2&0&0 \end^T[/math] и [math]\varepsilon=0,\!001[/math] (табл. 10.5).

Приближенное решение задачи: [math]x_<\ast>\cong \begin 1,\!0001& 1,\!0001& 1,\!0001 \end^T[/math] .

Метод Зейделя для решения СЛАУ

Этот метод является модификацией метода простых итераций и в некоторых случаях приводит к более быстрой сходимости.

Итерации по методу Зейделя отличаются от простых итераций (10.12) тем, что при нахождении i-й компоненты (k+1)-го приближения сразу используются уже найденные компоненты (к +1) -го приближения с меньшими номерами [math]1,2,\ldots,i-1[/math] . При рассмотрении развернутой формы системы итерационный процесс записывается в виде

В каждое последующее уравнение подставляются значения неизвестных, полученных из предыдущих уравнений.

Теорема (10.3) о достаточном условии сходимости метода Зейделя. Если для системы [math]x=\alpha x+\beta[/math] какая-либо норма матрицы [math]\alpha[/math] меньше единицы, т.е. [math]\|\alpha\|_s , то процесс последовательных приближений (10.15) сходится к единственному решению исходной системы [math]Ax=b[/math] при любом начальном приближении [math]x^<(0)>[/math] .

Записывая (10.15) в матричной форме, получаем

где [math]L,\,U[/math] являются разложениями матрицы [math]\alpha:[/math]

Преобразуя (10.16) к виду [math]x=\alpha x+\beta[/math] , получаем матричную форму итерационного процесса метода Зейделя:

Тогда достаточное, а также необходимое и достаточное условия сходимости будут соответственно такими (см. теоремы 10.1 и 10.2):

1. Для обеспечения сходимости метода Зейделя требуется преобразовать систему [math]Ax=b[/math] к виду [math]x=\alpha x+\beta[/math] с преобладанием диагональных элементов в матрице а (см. метод простых итераций).

2. Процесс (10.15) называется последовательным итерированием , так как на каждой итерации полученные из предыдущих уравнений значения подставляются в последующие. Как правило, метод Зейделя обеспечивает лучшую сходимость, чем метод простых итераций (за счет накопления информации, полученной при решении предыдущих уравнений). Метод Зейделя может сходиться, если расходится метод простых итераций, и наоборот.

3. При расчетах на ЭВМ удобнее пользоваться формулой (10.16).

4. Преимуществом метода Зейделя, как и метода простых итераций, является его «самоисправляемость».

5. Метод Зейделя имеет преимущества перед методом простых итераций, так как он всегда сходится для нормальных систем линейных алгебраических уравнений, т.е. таких систем, в которых матрица [math]A[/math] является симметрической и положительно определенной. Систему линейных алгебраических уравнений с невырожденной матрицей [math]A[/math] всегда можно преобразовать к нормальной, если ее умножить слева на матрицу [math]A^T[/math] (матрица [math]A^TA[/math] — симметрическая). Система [math]A^TAx= A^Tb[/math] является нормальной.

Алгоритм метода Зейделя

1. Преобразовать систему [math]Ax=b[/math] к виду [math]x=\alpha x+\beta[/math] одним из описанных способов.

2. Задать начальное приближение решения [math]x^<(0)>[/math] произвольно или положить [math]x^<(0)>=\beta[/math] , а также малое положительное число [math]\varepsilon[/math] (точность). Положить [math]k=0[/math] .

3. Произвести расчеты по формуле (10.15) или (10.16) и найти [math]x^<(k+1)>[/math] .

4. Если выполнено условие окончания [math]\bigl\|x^<(k+1)>-x^<(k)>\bigr\| , процесс завершить и в качестве приближенного решения задачи принять [math]x_<\ast>\cong x^<(k+1)>[/math] . Иначе положить [math]k=k+1[/math] и перейти к пункту 3.

Пример 10.15. Методом Зейделя с точностью [math]\varepsilon=0,\!001[/math] решить систему линейных алгебраических уравнений:

1. Приведем систему [math]Ax=b[/math] к виду [math]x=\alpha x+\beta[/math] (см. пример 10.14):

Так как [math]\|\alpha\|_1=\max\<0,\!2;\,0,\!3;\,0,\!4 \>=0,\!4 , условие сходимости выполняется.

2. Зададим [math]x^<(0)>= \begin 1,\!2&0&0 \end^T[/math] . В поставленной задаче [math]\varepsilon=0,\!001[/math] .

Выполним расчеты по формуле (10.15): [math]\begin x_1^<(k+1)>=-0,\!1\cdot x_2^<(k)>-0,\!1\cdot x_3^<(k)>+1,\!2\,,\\[4pt] x_2^<(k+1)>=-0,\!2\cdot x_1^<(k+1)>-0,\!1\cdot x_3^<(k)>+1,\!3\,,\\[4pt] x_3^<(k+1)>=-0,\!2\cdot x_1^<(k+1)>-0,\!2\cdot x_2^<(k+1)>+1,\!4\,,\end\!\!\!\!\! (k=0,1,\ldots)[/math] и результаты занесем в табл. 10.6.

Очевидно, найденное решение [math]x_<\ast>= \begin 1&1&1 \end^T[/math] является точным.

4. Расчет завершен, поскольку выполнено условие окончания [math]\bigl\|x^<(k+1)>-x^<(k)>\bigr\|= 0,\!0004 .

Пример 10.16. Методом Зейделя с точностью [math]\varepsilon=0,\!005[/math] решить систему линейных алгебраических уравнений:

|5|>|-1|+|-2|[/math] , в данной системе диагональные элементы преобладают. Выразим из первого уравнения [math]x_1[/math] , из второго [math]x_2[/math] , из третьего [math]x_3:[/math]

2. Зададим [math]x^<(0)>= \begin 0&0&0 \end^T[/math] . В поставленной задаче [math]\varepsilon= 0,\!005[/math] .

k=0,1,\ldots[/math] и результаты занесем в табл. 10.7.

Очевидно, найденное решение [math]x_<\ast>= \begin 1&1&1 \end^T[/math] является точным.

4. Расчет завершен, поскольку выполнено условие окончания [math]\bigl\|x^<(k+1)>-x^<(k)>\bigr\|= 0,\!001 .

Метод Гаусса решения системы линейных уравнений

Дана система линейных алгебраических уравнений (СЛАУ) с неизвестными. Требуется решить эту систему: определить, сколько решений она имеет (ни одного, одно или бесконечно много), а если она имеет хотя бы одно решение, то найти любое из них.

Формально задача ставится следующим образом: решить систему:

где коэффициенты и известны, а переменные — искомые неизвестные.

Удобно матричное представление этой задачи:

где — матрица , составленная из коэффициентов , и — векторы-столбцы высоты .

Стоит отметить, что СЛАУ может быть не над полем действительных чисел, а над полем по модулю какого-либо числа , т.е.:

— алгоритм Гаусса работает и для таких систем тоже (но этот случай будет рассмотрен ниже в отдельном разделе).

Алгоритм Гаусса

Строго говоря, описываемый ниже метод правильно называть методом «Гаусса-Жордана» (Gauss-Jordan elimination), поскольку он является вариацией метода Гаусса, описанной геодезистом Вильгельмом Жорданом в 1887 г. (стоит отметить, что Вильгельм Жордан не является автором ни теоремы Жордана о кривых, ни жордановой алгебры — всё это три разных учёных-однофамильца; кроме того, по всей видимости, более правильной является транскрипция «Йордан», но написание «Жордан» уже закрепилось в русской литературе). Также интересно заметить, что одновременно с Жорданом (а по некоторым данным даже раньше него) этот алгоритм придумал Класен (B.-I. Clasen).

Базовая схема

Кратко говоря, алгоритм заключается в последовательном исключении переменных из каждого уравнения до тех пор, пока в каждом уравнении не останется только по одной переменной. Если , то можно говорить, что алгоритм Гаусса-Жордана стремится привести матрицу системы к единичной матрице — ведь после того как матрица стала единичной, решение системы очевидно — решение единственно и задаётся получившимися коэффициентами .

При этом алгоритм основывается на двух простых эквивалентных преобразованиях системы: во-первых, можно обменивать два уравнения, а во-вторых, любое уравнение можно заменить линейной комбинацией этой строки (с ненулевым коэффициентом) и других строк (с произвольными коэффициентами).

На первом шаге алгоритм Гаусса-Жордана делит первую строку на коэффициент . Затем алгоритм прибавляет первую строку к остальным строкам с такими коэффициентами, чтобы их коэффициенты в первом столбце обращались в нули — для этого, очевидно, при прибавлении первой строки к -ой надо домножать её на . При каждой операции с матрицей (деление на число, прибавление к одной строке другой) соответствующие операции производятся и с вектором ; в некотором смысле, он ведёт себя, как если бы он был -ым столбцом матрицы .

В итоге, по окончании первого шага первый столбец матрицы станет единичным (т.е. будет содержать единицу в первой строке и нули в остальных).

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

И так далее, пока мы не обработаем все строки или все столбцы матрицы . Если , то по построению алгоритма очевидно, что матрица получится единичной, что нам и требовалось.

Поиск опорного элемента (pivoting)

Разумеется, описанная выше схема неполна. Она работает только в том случае, если на каждом -ом шаге элемент отличен от нуля — иначе мы просто не сможем добиться обнуления остальных коэффициентов в текущем столбце путём прибавления к ним -ой строки.

Чтобы сделать алгоритм работающим в таких случаях, как раз и существует процесс выбора опорного элемента (на английском языке это называется одним словом «pivoting»). Он заключается в том, что производится перестановка строк и/или столбцов матрицы, чтобы в нужном элементе оказалось ненулевое число.

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

К счастью, для корректности метода достаточно одних только обменов строк (т.н. «partial pivoting», в отличие от «full pivoting», когда обмениваются и строки, и столбцы). Но какую же именно строку следует выбирать для обмена? И правда ли, что поиск опорного элемента надо делать только тогда, когда текущий элемент нулевой?

Общего ответа на этот вопрос не существует. Есть разнообразные эвристики, однако самой эффективной из них (по соотношению простоты и отдачи) является такая эвристика: в качестве опорного элемента следует брать наибольший по модулю элемент, причём производить поиск опорного элемента и обмен с ним надо всегда, а не только когда это необходимо (т.е. не только тогда, когда ).

Иными словами, перед выполнением -ой фазы алгоритма Гаусса-Жордана с эвристикой partial pivoting необходимо найти в -ом столбце среди элементов с индексами от до максимальный по модулю, и обменять строку с этим элементом с -ой строкой.

Во-первых, эта эвристика позволит решить СЛАУ, даже если по ходу решения будет случаться так, что элемент . Во-вторых, что весьма немаловажно, эта эвристика улучшает численную устойчивость алгоритма Гаусса-Жордана.

Без этой эвристики, даже если система такова, что на каждой -ой фазе — алгоритм Гаусса-Жордана отработает, но в итоге накапливающаяся погрешность может оказаться настолько огромной, что даже для матриц размера около погрешность будет превосходить сам ответ.

Вырожденные случаи

Итак, если останавливаться на алгоритме Гаусса-Жордана с partial pivoting, то, утверждается, если и система невырождена (т.е. имеет ненулевой определитель, что означает, что она имеет единственное решение), то описанный выше алгоритм полностью отработает и придёт к единичной матрице (доказательство этого, т.е. того, что ненулевой опорный элемент всегда будет находиться, здесь не приводится).

Рассмотрим теперь общий случай — когда и не обязательно равны. Предположим, что опорный элемент на -ом шаге не нашёлся. Это означает, что в -ом столбце все строки, начиная с текущей, содержат нули. Утверждается, что в этом случае эта -ая переменная не может быть определена, и является независимой переменной (может принимать произвольное значение). Чтобы алгоритм Гаусса-Жордана продолжил свою работу для всех последующих переменных, в такой ситуации надо просто пропустить текущий -ый столбец, не увеличивая при этом номер текущей строки (можно сказать, что мы виртуально удаляем -ый столбец матрицы).

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

В целом, если обнаружилась хотя бы одна независимая переменная, то она может принимать произвольное значение, в то время как остальные (зависимые) переменные будут выражаться через неё. Это означает, что, когда мы работаем в поле действительных чисел, система потенциально имеет бесконечно много решений (если мы рассматриваем СЛАУ по модулю, то число решений будет равно этому модулю в степени количества независимых переменных). Впрочем, следует быть аккуратным: надо помнить о том, что даже если были обнаружены независимые переменные, тем не менее СЛАУ может не иметь решений вовсе. Это происходит, когда в оставшихся необработанными уравнениях (тех, до которых алгоритм Гаусса-Жордана не дошёл, т.е. это уравнения, в которых остались только независимые переменные) есть хотя бы один ненулевой свободный член.

Впрочем, проще это проверить явной подстановкой найденного решения: всем независимыми переменным присвоить нулевые значения, зависимым переменным присвоить найденные значения, и подставить это решение в текущую СЛАУ.

Реализация

Приведём здесь реализацию алгоритма Гаусса-Жордана с эвристикой partial pivoting (выбором опорного элемента как максимума по столбцу).

На вход функции передаётся сама матрица системы . Последний столбец матрицы — это в наших старых обозначениях столбец свободных коэффициентов (так сделано для удобства программирования — т.к. в самом алгоритме все операции со свободными коэффициентами повторяют операции с матрицей ).

Функция возвращает число решений системы (, или ) (бесконечность обозначена в коде специальной константой , которой можно задать любое большое значение). Если хотя бы одно решение существует, то оно возвращается в векторе .

В функции поддерживаются два указателя — на текущий столбец и текущую строку .

Также заводится вектор , в котором для каждой переменной записано, в какой строке должна она получиться (иными словами, для каждого столбца записан номер строки, в которой этот столбец отличен от нуля). Этот вектор нужен, поскольку некоторые переменные могли не «определиться» в ходе решения (т.е. это независимые переменные, которым можно присвоить произвольное значение — например, в приведённой реализации это нули).

Реализация использует технику partial pivoting, производя поиск строки с максимальным по модулю элементом, и переставляя затем эту строку в позицию (хотя явную перестановку строк можно заменить обменом двух индексов в некотором массиве, на практике это не даст реального выигрыша, т.к. на обмены тратится операций).

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

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

Асимптотика

Оценим асимптотику полученного алгоритма. Алгоритм состоит из фаз, на каждой из которых происходит:

  • поиск и перестановка опорного элемента — за время при использовании эвристики «partial pivoting» (поиск максимума в столбце)
  • если опорный элемент в текущем столбце был найден — то прибавление текущего уравнения ко всем остальным уравнениям — за время

Очевидно, первый пункт имеет меньшую асимптотику, чем второй. Заметим также, что второй пункт выполняется не более раз — столько, сколько может быть зависимых переменных в СЛАУ.

Таким образом, итоговая асимптотика алгоритма принимает вид .

При эта оценка превращается в .

Заметим, что когда СЛАУ рассматривается не в поле действительных чисел, а в поле по модулю два, то систему можно решать гораздо быстрее — об этом см. ниже в разделе «Решение СЛАУ по модулю».

Более точная оценка числа действий

Для простоты выкладок будем считать, что .

Как мы уже знаем, время работы всего алгоритма фактически определяется временем, затрачиваемым на исключение текущего уравнения из остальных.

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

Дополнения

Ускорение алгоритма: разделение его на прямой и обратный ход

Добиться двукратного ускорения алгоритма можно, рассмотрев другую его версию, более классическую, когда алгоритм разбивается на фазы прямого и обратного хода.

В целом, в отличие от описанного выше алгоритма, можно приводить матрицу не к диагональному виду, а к треугольному виду — когда все элементы строго ниже главной диагонали равны нулю.

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

Прямой ход алгоритма Гаусса — это алгоритм, аналогичный описанному выше алгоритму Гаусса-Жордана, за одним исключением: текущая переменная исключается не из всех уравнений, а только из уравнений после текущего. В результате этого действительно получается не диагональная, а треугольная матрица.

Разница в том, что прямой ход работает быстрее алгоритма Гаусса-Жордана — поскольку в среднем он делает в два раза меньше прибавлений одного уравнения к другому. Обратный ход работает за , что в любом случае асимптотически быстрее прямого хода.

Таким образом, если , то данный алгоритм будет делать уже операций — что в два раза меньше алгоритма Гаусса-Жордана.

Решение СЛАУ по модулю

Для решения СЛАУ по модулю можно применять описанный выше алгоритм, он сохраняет свою корректность.

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

Если модуль простой, то никаких сложностей вообще не возникает — происходящие по ходу работы алгоритма Гаусса деления не создают особых проблем.

Особенно замечателен модуль, равный двум: для него все операции с матрицей можно производить очень эффективно. Например, отнимание одной строки от другой по модулю два — это на самом деле их симметрическая разность («xor»). Таким образом, весь алгоритм можно значительно ускорить, сжав всю матрицу в битовые маски и оперируя только ими. Приведём здесь новую реализацию основной части алгоритма Гаусса-Жордана, используя стандартный контейнер C++ «bitset»:

Как можно заметить, реализация стала даже немного короче, при том, что она значительно быстрее старой реализации — а именно, быстрее в раза за счёт битового сжатия. Также следует отметить, что решение систем по модулю два на практике работает очень быстро, поскольку случаи, когда от одной строки надо отнимать другую, происходят достаточно редко (на разреженных матрицах этот алгоритм может работать за время скорее порядка квадрата от размера, чем куба).

Если модуль произвольный (не обязательно простой), то всё становится несколько сложнее. Понятно, что пользуясь Китайской теоремой об остатках, мы сводим задачу с произвольным модулем только к модулям вида «степень простого». [ дальнейший текст был скрыт, т.к. это непроверенная информация — возможно, неправильный способ решения ]

Наконец, рассмотрим вопрос числа решений СЛАУ по модулю. Ответ на него достаточно прост: число решений равно , где — модуль, — число независимых переменных.

Немного о различных способах выбора опорного элемента

Как уже говорилось выше, однозначного ответа на этот вопрос нет.

Эвристика «partial pivoting», которая заключалась в поиске максимального элемента в текущем столбце, работает на практике весьма неплохо. Также оказывается, что она даёт практически тот же результат, что и «full pivoting» — когда опорный элемент ищется среди элементов целой подматрицы — начиная с текущей строки и с текущего столбца.

Но интересно отметить, что обе эти эвристики с поиском максимального элемента, фактически, очень зависят от того, насколько были промасштабированы исходные уравнения. Например, если одно из уравнений системы умножить на миллион, то это уравнение почти наверняка будет выбрано в качестве ведущего на первом же шаге. Это кажется достаточно странным, поэтому логичен переход к немного более сложной эвристике — так называемому «implicit pivoting».

Эвристика implicit pivoting заключается в том, что элементы различных строк сравниваются так, как если бы обе строки были пронормированы таким образом, что максимальный по модулю элемент в них был бы равен единице. Для реализации этой техники надо просто поддерживать текущий максимум в каждой строке (либо поддерживать каждую строку так, чтобы максимум в ней был равен единице по модулю, но это может привести к увеличению накапливаемой погрешности).

Улучшение найденного ответа

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

В связи с этим, полученный алгоритмом Гаусса-Жордана ответ можно улучшить, применив к нему какой-либо простой численный метод — например, метод простой итерации.

Таким образом, решение превращается в двухшаговое: сначала выполняется алгоритм Гаусса-Жордана, затем — какой-либо численный метод, принимающий в качестве начальных данных решение, полученное на первом шаге.

Такой приём позволяет несколько расширить множество задач, решаемых алгоритмом Гаусса-Жордана с приемлемой погрешностью.


источники:

http://mathhelpplanet.com/static.php?p=chislennyye-metody-resheniya-slau

http://e-maxx.ru/algo/linear_systems_gauss