Реализация некоторых численных методов
8.4.3 Метод Зейделя
В методе Зейделя система (8.1) также приводится к системе (8.5). Но при вычислении последующей компоненты вектора используются уже вычисленные компоненты этого вектора.
Итерационная формула метода в скалярной форме записывается следующим образом:

Установим связь между методом Зейделя и методом простой итерации. Для этого матрицу представим в виде суммы двух матриц:
, где
![H=\left[ \begin{matrix}
0 & 0 & 0 & \ldots & 0 \\
{{p}_{21}} & 0 & 0 & \ldots & 0 \\
{{p}_{31}} & {{p}_{32}} & 0 & \ldots & 0 \\
\ldots & \ldots & \ldots & \ldots & \ldots \\
{{p}_{n1}} & {{p}_{n2}} & {{p}_{n3}} & \ldots & 0 \\
\end{matrix} \right];
\quad F=\left[ \begin{matrix}
{{p}_{11}} & {{p}_{12}} & {{p}_{13}} & \ldots & {{p}_{1n}} \\
0 & {{p}_{22}} & {{p}_{23}} & \ldots & {{p}_{2n}} \\
0 & 0 & {{p}_{33}} & \ldots & {{p}_{3n}} \\
\ldots & \ldots & \ldots & \ldots & \ldots \\
0 & 0 & 0 & \ldots & {{p}_{nn}} \\
\end{matrix} \right].](/sites/default/files/tex_cache/6a75eac7b2235d23590be62cd200e07f.png)
Итерационная формула метода Зейделя в матричной форме записывается в виде:


Исходя из полученной аналогии методов Зейделя и простой итерации, можно сформулировать следующий признак сходимости метода Зейделя: для того чтобы метод Зейделя сходился, необходимо и достаточно, чтобы все собственные значения матрицы по модулю были меньше единицы.
Другими словами, чтобы метод Зейделя сходился, необходимо и достаточно, чтобы все корни уравнения по модулю были меньше единицы, т.к.
![\begin{align*}
\left| {{\left( E-H \right)}^{-1}}F-\lambda E \right| &= \\
\left| {{\left( E-H \right)}^{-1}}\left( E-H \right)\left[ {{\left( E-H
\right)}^{-1}}F-\lambda E \right] \right| &= \\
\left| {{\left( E-H \right)}^{-1}} \right|\left| F+\lambda H-\lambda E
\right| &= \\
\left| F+\lambda H-\lambda E \right|&=0.
\end{align*}](/sites/default/files/tex_cache/0c2659d37a9ea232edc137f53aa74b40.png)
Сформулируем достаточный признак сходимости: для того, чтобы метод Зейделя сходился, достаточно, чтобы выполнилось одно из условий:
При использовании метода Зейделя итерационный процесс сходится к единственному решению быстрее метода простых итераций.
Пример реализации метода Зейделя:
(%i1) seidel(a0,b0,x,n,eps):=block([a,b,i,j,s,sum,p], a:copymatrix (a0), b:copymatrix(b0), sum:1, p:0, while sum>eps do ( sum:0, p:p+1, print("p= ",p), for i:1 thru n do ( s:b[i,1], for j:1 thru n do (s:s-a[i,j]*x[j,1]), s:s/a[i,i], x[i,1]:x[i,1]+s, sum:sum+abs(s) ) ), float(x))$
Пример решения простой системы методом Зейделя:
(%i2) aa:matrix([3,1,1],[1,3,1],[1,1,3]); bb:matrix([6],[6],[8]); x:matrix([3],[3],[3]); zz:seidel(aa,bb,x,3,0.0000001);
