Professor Diomar Cesar Lobao

Universidade Federal Fluminense-Volta Redonda, RJ, Brasil

Diomar Cesar


Dept. Ciências Exatas - Exact Science Dept.

Search

jacobi.m

% Illustration of Jacobi iteration
%  (Also known as Method of Simultaneous Displacement)
%
% The goal is to determine a set of values of x1...x4 that 
% satisfy the following equations...
%   f1(x1,x2,x3,x4) = -2*x1 +   x2               + 1.5 = 0
%   f2(x1,x2,x3,x4) =    x1 - 2*x2 +   x3        - 0.5 = 0
%   f3(x1,x2,x3,x4) =           x2 - 2*x3 + x4   - 0.5 = 0
%   f4(x1,x2,x3,x4) =                  x3 - 2*x4 + 0.5 = 0
%
% We will take an x1 out of f1 and an x2 out of f2 and so on.
%   x1 = g1(x1,x2,x3,x4) = (x2 + 1.5) / 2
%   x2 = g2(x1,x2,x3,x4) = (x1 + x3 - 0.5) / 2
%   x3 = g3(x1,x2,x3,x4) = (x2 + x4 - 0.5) / 2
%   x4 = g4(x1,x2,x3,x4) = (x3 + 0.5) / 2
%
% These are defined in files 'lin_g1.m' through 'lin_g4.m'

fprintf('\nSolution of System of Equations using Jacobi iteration\n');

      x1 = input('Enter x1 estimate        : ');
      x2 = input('Enter x2 extimate        : ');
      x3 = input('Enter x3 estimate        : ');
      x4 = input('Enter x4 extimate        : ');
maxerror = input('Enter max approx error   : ');
   maxit = input('Enter max # of iterations: ');

count = 0;
error = 100;
fprintf('\niteration      x1           x2          x3           x4\n');

while (error > maxerror) & (count < maxit)
   count = count + 1;
   x1new = lin_g1(x1,x2,x3,x4);
   x2new = lin_g2(x1,x2,x3,x4);
   x3new = lin_g3(x1,x2,x3,x4);
   x4new = lin_g4(x1,x2,x3,x4);

   error1 = abs(x1new - x1);
   error2 = abs(x2new - x2);
   error3 = abs(x3new - x3);
   error4 = abs(x4new - x4);
   error = max([error1,error2,error3,error4]);
  
   fprintf('%6i    %10.6f  %10.6f  %10.6f  %10.6f\n',...
             count,x1new,x2new,x3new,x4new);

   x1 = x1new;                           % assign new values
   x2 = x2new;
   x3 = x3new;
   x4 = x4new;
end
Skip to content