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;
   234   235   236   237   238   239   240   241   242   243   244