Пусть имеется система уравнений

. Eё приводят к виду

, где

, если

и

;

.
В методе простых итераций

.
В методе Зейделя

, где

— нижняя треугольная часть матрицы

,

— верхняя треугольная.
[В файле по ссылке опечатка в матричной записи метода Зейделя]Для реализации можно:
1. Получить вектор диагональных элементов исходной матрицы
с = diag(A);2. Найти матрицу С
A = diag(c) – A;А затем поделить строки матрицы на соответствующие диагональные элементы
for i=1:3
A(i, :) = A(i, :)/c(i);
end3. Найти вектор f при помощи поэлементного деления
b = b./cДальше в методе простых итераций в цикле выполняем итерации.
x = x_new;
x_new = A*x + b;В методе Зйделя реализовать итерации проще при помощи однократного цикла
x_old = x;
for i=1:n
x(i)= A(i, :)*x +b
endПример решения системы из книги Демидович Б.П., Марон И.А. Основы вычислительной математики, 1966.
n = 3;
eps = 0.001;
A = [10, 1, 1; 2, 10, 1; 2, 2, 10];
b = [12, 13, 14]';
x = [1.2, 0, 0]';
aa = diag(A);
A = diag(aa) - A;
b = b./aa;
for i=1:n
A(i,:) = A(i, :)/aa(i);
end
x_old = inf*ones(n, 1);
while max(abs(x - x_old)) > eps
x_old = x;
for i=1:n
x(i) = A(i, :)*x + b(i);
end
end
disp(x);
Результат
1.0000
1.0000
1.0000
Т.е. если в методе простой итерации легко реализовать итерации через матричное умножение, то в методе Зейделя использование операций над массивами позволяет во время итераций уйти от двойного цикла, но однократный цикл остаётся.
В общем, не видно смысла уходить от цикла в итерациях методом Зейделя. Так что у Вас всё по смыслу. Просто для скорости такие вещи надо писать на низком уровне и вызывать уже из Matlab "внешнюю" функцию.