Загрузка [MathJax]/jax/element/mml/optable/Latin1Supplement.js

Подразделы

Другие разделы

Дата и время

04/04/2025 08:34:35

Авторизация

Имя:
Пароль:
Зарегистрироваться
Восстановить пароль
 

printМетод преобразования

printМетод исключения Гаусса

Рассмотрим систему из двух линейных уравнений с двумя неизвестными:
{a11x+a12y=b1a21x+a22y=b2
Стандартный метод поиска этого решения состоит в использовании одного из уравнений для того, чтобы выразить одну переменную как функцию другой, а затем подставить результат в другое уравнение. Это дает линейное уравнение относительно одной переменной, решение которого позволяет найти значение второй переменной.

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


Идея метода исключения Гаусса заключается в преобразовании системы n линейных уравнений с n неизвестными в эквивалентную систему (т.е. систему с тем же решением, что и у исходной) с верхнетреугольной матрицей коэффициентов, т.е. такой, у которой все элементы ниже главной диагонали равны нулю:
{a11x1+...+a1nxn=b1an1x1+...+annxn=bn{a11x1+a12x2+...+a1nxn=b1a22x2+...+a2nxn=b2annxn=bn


Cистему линейных уравнений с верхнетреугольной матрицей легко решить методом обратной подстановки следующим образом. Сначала мы вычисляем значение xn из последнего уравнения; затем подставляем полученное значение в предпоследнее уравнение и получаем значение xn-1. Продолжая выполнять подстановки вычисленных значений переменных в очередные уравнения, мы получим значения всех n переменных — от xn до x1.


Получить из системы линейных уравнений с произвольной матрицей коэффициентов A эквивалентную систему линейных уравнений с верхнетреугольной матрицей A можно с помощью следующих операций:

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

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


Сначала используем в качестве опорного элемента a11 для того, чтобы сделать все коэффициенты при x1 в строках ниже первой нулевыми. В частности, заменим второе уравнение разностью между ним и первым уравнением, умноженным на a21/a11 для того, чтобы получить нулевой коэффициент при x1. Аналогичные действия для остальных строк. Затем обнулим все коэффициенты при xi в уравнениях ниже второго, вычитая из каждого из этих уравнений второе, умноженное на соответствующий коэффициент. Повторяя эти действия для каждой из первых n-1 строк, получим систему линейных уравнений с верхнетреугольной матрицей коэффициентов.


Алгоритм GaussElimination (A,b)
// Входные данные: Матрица A[1...n,1...n+1]
// свободные члены bi в столбце n+1
// Выходные данные: Эквивалентная верхнетреугольная матрица
// на месте матрицы A
for i[1...n-1] do
   for j in [i+1...n] do
quad quad t larr A[j, i]//A[i, i]
quad quad for k in [i...n+1] do
quad quad quad quad A[j, k] larr A[j, k] - A[i, k] * t


Если A[i, i] =0, нельзя выполнить деление на этот элемент и, следовательно, использовать i-ую строку в качестве опорной на i-ой итерации алгоритма. В этом случае мы должны воспользоваться первой из элементарных операций и обменять i-ую строку с одной из строк ниже ее, у которой в i-ом столбце находится ненулевой элемент. Для уменьшения ошибки вычислений рекомендуется выбирать строку с наибольшим абсолютным значением коэффициента в i-ом столбце для обмена с i-ой строкой, а затем использовать ее в качестве опорной на i-ой итерации.


Наиболее глубоко вложенный цикл состоит из одной строки:
A[j, k] larr A[j, k] - A[i, k] * t
Умножение является базовой операцией данного алгоритма.
C(n)=sum_{i=1}^{n-1} sum_{j=i+1}^{n} sum_{k=i}^{n+1} 1= sum_{i=1}^{n-1} sum_{j=i+1}^{n} (n+2-i)=
=sum_{i=1}^{n-1} (n+2-i)(n-i)=sum_{i=1}^{n-1} (i+2)i=sum_{i=1}^{n-1} i^2+sum_{i=1}^{n-1} 2i=
=((n-1)n(2n-1))/6+2((n-1)n)/2~~ (n^3)/3 in Theta(n^3)

Поскольку временная эффективность обратной подстановки в алгоритма исключения Гаусса равна Theta(n^2), общее время работы алгоритма определяется кубическим временем стадии исключения, так что алгоритм Гаусса — кубический.


Метод исключения Гаусса имеет интересный и очень полезный побочный результат, именуемый LU-разложением, или LU-декомпозицией матрицы коэффициентов.

Верхнетреугольная матрица U представляет собой результат исключения, а нижнетреугольную матрицу L образована единицами на главной диагонали и множителями, вычисляемыми в процессе исключения Гаусса для обнуления соответствующих коэффициентов в строках матрицы.


Произведение LU этих матриц равно исходной матрице А.

Следовательно, решение системы линейных уравнений Ax=b эквивалентно решению системы LUx = b. Решить ее можно следующим образом. Обозначим y = Ux, тогда Ly = b.

Сначала решим систему Ly =b, что очень просто сделать, поскольку L — нижнетреугольная матрица. Затем решим систему Ux = y, что опять же несложно, поскольку U — верхнетреугольная матрица.

Таким образом, с помощью LU-разложения матрицы A, мы можем решать системы линейных уравнений Ax = b для разных векторов свободных членов b за Theta(n^2).


Обратная к матрице A размером n xx n матрица также имеет размер n xx n и обозначается как A^{-1}:
A*A^{-1}=I, где I — единичная матрица размером n xx n.

Для нахождения обратной матрицы нужно найти n^2 чисел x_{ij}, таких что
[(a_{11},...,a_{1n}),(vdots,ddots,vdots),(a_{n1},...,a_{n n})] [(x_{11},...,x_{1n}),(vdots,ddots,vdots),(x_{n1},...,x_{n n})]=[(1,0,...,0,0),(vdots,,ddots,,vdots),(0,0,...,0,1)]


Мы можем найти неизвестные числа, решая n систем линейных уравнений с одной и той же матрицей коэффициентов A, у которых вектор неизвестных x^j представляет собой j-ый столбец обратной матрицы, а вектор свободных членов e^jj-ый столбец единичной матрицы:
A*x^j=e^j

Так как каждое решение можно найти за Theta(n^2), то общее время для нахождения обратной матрицы равно Theta(n^3).


Метод исключения Гаусса помогает и при вычислении определителя.

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

loading