% Método de Gauss-Jacobi para resolver sistema linear Ax=b
clear  all
clc
format long
n = 3; % número de variáveis do problema
A = [3 -1 -1
     1  5  1
     1  1  7]; % Matriz A dos coeficientes
I = eye(n,n); % Cria Matriz identidade n x n
b = [-2, 14, 24]; %vetor de termos independentes
x = [0
     0
     0]; % solução inicial (chute)
for i=1:n
    for j=1:n
        AA(i,j) = A(i,j)/A(i,i);
    end;
    be(i) = b(i)/A(i, i);
end;
%
AB = AA;
bc = be;
epsilon=10^(-8); %Precisão ou Tolerância
p = epsilon + 1; %critério de parada inicial apenas para entrar na rotina "while"
it=0;
%
while p > epsilon & it<=1000
    x = bc' - (AB-I)*x; %Forma Matricial do Método de Gauss-Jacobi
    p = norm(AB*x-bc'); % Critério de Parada (Ax*-b=0), onde x* é a solução do problema
    it = it+1; % contador do número de iterações
    disp('-----------------------------')
    disp('Iteração = '), it
    disp('o vetor x encontrado foi:'), x
end;
%
if(it>999) 
   disp( sprintf('Nao converge nesse intervalo'));
else
    disp('*******************************************')
    disp('*******************************************')
    disp('*******************************************')
    disp('Sucesso! O total de iterações foram ='), it
    disp('A solução encontrada foi'), x
    disp('*******************************************')
    disp('*******************************************')
    disp('*******************************************')
end