Реализация некоторых численных методов
8.4.3 Метод Зейделя
В методе Зейделя система (8.1) также приводится к системе (8.5). Но при вычислении последующей компоненты вектора используются уже вычисленные компоненты этого вектора.
Итерационная формула метода в скалярной форме записывается следующим образом:
Установим связь между методом Зейделя и методом простой итерации. Для этого матрицу представим в виде суммы двух матриц: , где
Итерационная формула метода Зейделя в матричной форме записывается в виде:
т.е. метод Зейделя эквивалентен методу простой итерации с матрицей .Исходя из полученной аналогии методов Зейделя и простой итерации, можно сформулировать следующий признак сходимости метода Зейделя: для того чтобы метод Зейделя сходился, необходимо и достаточно, чтобы все собственные значения матрицы по модулю были меньше единицы.
Другими словами, чтобы метод Зейделя сходился, необходимо и достаточно, чтобы все корни уравнения по модулю были меньше единицы, т.к.
Сформулируем достаточный признак сходимости: для того, чтобы метод Зейделя сходился, достаточно, чтобы выполнилось одно из условий:
При использовании метода Зейделя итерационный процесс сходится к единственному решению быстрее метода простых итераций.
Пример реализации метода Зейделя:
(%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);