Ме́тод Га́усса — Зе́йделя (метод Зейделя, процесс Либмана, метод последовательных замещений) — является классическим итерационным методом решения системы линейных уравнений.
Назван в честь Зейделя и Гаусса.
Возьмём систему:
, где
Или
И покажем, как её можно решить с использованием метода Гаусса-Зейделя.
Чтобы пояснить суть метода, перепишем задачу в виде

Здесь в
-м уравнении мы перенесли в правую часть все члены, содержащие
, для
. Эта запись может быть представлена как

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

после выбора соответствующего начального приближения
.
Метод Гаусса — Зейделя можно рассматривать как модификацию метода Якоби. Основная идея модификации состоит в том, что новые значения
используются здесь сразу же по мере получения, в то время как в методе Якоби они не используются до следующей итерации:

где

Таким образом, i-я компонента
-го приближения вычисляется по формуле

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

Более точное условие окончания итерационного процесса имеет вид

и требует больше вычислений. Хорошо подходит для разреженных матриц.
import numpy as np
def seidel(A, b, eps):
n = len(A)
x = np.zeros(n) # zero vector
converge = False
while not converge:
x_new = np.copy(x)
for i in range(n):
s1 = sum(A[i][j] * x_new[j] for j in range(i))
s2 = sum(A[i][j] * x[j] for j in range(i + 1, n))
x_new[i] = (b[i] - s1 - s2) / A[i][i]
converge = np.linalg.norm(x_new - x) <= eps
x = x_new
 Ссылки на внешние ресурсы |
|---|
| |
|---|
| Словари и энциклопедии | |
|---|
| В библиографических каталогах | |
|---|
 |
|---|
| Прямые методы | |
|---|
| Итерационные методы | |
|---|
| Общее | |
|---|