Систему линейных уравнений можно записать в матричном виде:
,
где
Система (1) путем последовательного исключения неизвестных приводится к системе с треугольной матрицей, из которой и определяются значения неизвестных.
Процесс исключения неизвестных:
Пусть a11≠0. Разделим первое уравнение на a11. Затем вычтем из каждого i–го (i≥2) уравнения, полученного после деления, первое, умноженное на ai1 . В результате, после преобразований x1 окажется исключенным из всех уравнений кроме первого.
По той же схеме исключается x2 , x3 и т.д.
Получается треугольная матрица с единичной главной диагональю.
Общая формула определения неизвестных
Из последнего уравнения сразу определяется xn, далее, подставляя его в предпоследнее уравнение, получаем xn-1 и т.д.
Процесс нахождения неизвестных по способу Гаусса распадается на два этапа:
- Первый – приведение к треугольному виду – прямой ход.
- Второй – определение неизвестных по полученным формулам – обратный ход.
Процесс исключения k–го неизвестного называется k–м шагом прямого хода.
Элементы называются ведущими.
Общие формулы пересчета коэффициентов системы на k-м шаге:
В методе Гаусса происходит деление строк на соответствующие ведущие элементы, поэтому, если на каком-то k–м шаге на главной диагонали окажется нулевой элемент , то среди элементов (i=k+1,..n) следует найти ненулевой и перестановкой строк переместить его на главную диагональ, а затем продолжить вычисления.
Для этого следует воспользоваться, например, методом Гаусса выбора главного элемента в столбце.
Суть которого состоит в определении максимального элемента в столбце текущей строки и перестановке строки с максимальным элементом в столбце с текущей строкой, если такой найден.
'Задание исходных данных
For i = 1 To n For j = 1 To n a1(i, j) = a(i, j) 'коэффициенты при неизвестных Next Next
For i = 1 To n x(i) = b(i) 'свободные члены Next
flag = False
'прямой ход - исключение i-го неизвестного
For i = 1 To n
'поиск главного элемента в i-м столбце
k = i
r = Abs(a1(i, i))
For j = i + 1 To n
If Abs(a1(j, i)) > r Then
k = j
r = Abs(a1(j, i))
End If
Next j
If r = 0 Then 'определитель системы равен 0
flag = True
Exit For
End If
If k <> i Then
'перестановка i-го и k-го уравнения
r = x(k) : x(k) = x(i) : x(i) = r
For j = 1 To n
r = a1(k, j) : a1(k, j) = a1(i, j) : a1(i, j) = r
Next j
End If
' исключение i-го неизвестного
r = a1(i, i)
x(i) = x(i) / r
For j = i To n
a1(i, j) = a1(i, j) / r
Next j
For k = i + 1 To n
r = a1(k, i)
x(k) = x(k) - r * x(i)
For j = i To n
a1(k, j) = a1(k, j) - r * a1(i, j)
Next j
Next k
Next i
'обратный ход – определение неизвестных
If flag Then
Picture3.Print "матрица вырождена"
Else
For i = n - 1 To 1 Step -1
For j = i + 1 To n
x(i) = x(i) - a1(i, j) * x(j)
Next
Next