Page 239 - MATLAB an introduction with applications
P. 239
224 ——— MATLAB: An Introduction with Applications
k =
34
function [x, k, diff] = jacobi(A,b,x0,tol,kmax)
% Jacobi iteration on the system Ax = b.
if nargin<3, x0 = zeros(size(b));, end
if nargin<4, tol = 1e – 10;, end
if nargin<5, kmax = 100;, end
if min(abs(diag(A)))<eps
error(‘Coefficient matrix has zero diagonal entries, iteration cannot be
performed.\r’)
end
[n m] = size(A);
xold = x0;
k = 1;, diff = [];
while k< = kmax
xnew = b;
for i = 1:n
for j = 1:n
if j~ = i
xnew(i) = xnew(i) – A(i,j)*xold(j);
end
end
xnew(i) = xnew(i)/A(i,i);
end
diff(k) = norm(xnew – xold,2);
if diff(k)<tol
fprintf(‘Jacobi iteration has converged in %d iterations.\r’, k)
x = xnew;
return
end
k = k+1;, xold = xnew;
end
fprintf(‘Jacobi iteration failed to converge.\r’)
x = xnew;