Метод Гаусса

Численные методы   19 июня 2012  Автор статьи:  

Метод Гаусса — алгоритм вычисления детерминанта квадратной матрицы, путем приведения оной к треугольному виду с помощью элементарных преобразований, не приводящих к нарушению корректности вычислений.
Описание алгоритма:
Пусть имеется квадратная матрица A размером N×N.
1. В первом столбце ищется ненулевой элемент и найденная строка с этим элементом перемещается на место первой строки.
2. Первая строка вычитается из всех строк (кроме первой), при этом перед каждым вычитанием она перемножается на отношение первого элемента уменьшаемой строки к первому элементу вычитаемой. Таким образом обнуляются все элементы первого столбца кроме первой строки.
3. Повторяются действия 1 и 2 для всех столбцов матрицы, но при этом при каждом следующем шаге строка перемещается на второе место, на третье и т.д. и вычитание не производится из строк, лежащих выше вычитаемой.
4. При каждом перемещении строк меняется знак детерминанта. Т.е. если было совершено нечетное количество перемещений, то знак детерминанта меняется на противоположный.
5. Вычисляется детерминант, путем перемножения элементов главной диагонали.
ЗАМЕЧАНИЕ: Если в каком-то столбце не найдется ненулевой элемент, то алгоритм прекращается и возвращается значение детерминанта равное 0. Действительно, если не выполнять прерывание и продолжить этот алгоритм, то один из элементов главной диагонали будет равным нулю, и при перемножении получится 0.
 
Пример работы алгоритма для матрицы 4×4.
 

 
Вычтем первую строку из всех остальных, домножив соответственно на 5, 2 и 1.
 

 
Поменяем местами третью и вторую строку и вычтем её из третьей и четвертой, предварительно домножив на 4 и 2.
 

 
Поменяем местами третью и четвертую строки и вычтем её из четвертой, предварительно домножив её на -4.
 

 
В итоге мы совершили два перемещения, значит знак детерминанта остается прежним не меняется. Перемножим элементы главной диагонали: 1*(-1)*1*8 = -8. Следовательно, детерминант данной матрицы равен -8.

Научиться программировать

  • на Delphi

  • на Java

  • на C++