Você está na página 1de 3

// Mtodos de Jacobi e Gauss Seidel para um sistema nxn

// Autor: Edson Nemer Data: 27/04/2010


clear;
clc;
//*****************************************************************
// Gauss Seidel
function [x,erroFinal]=GaussSeidel(A,b,x)
for k=2:numItera
for i=1:n
x(i,k)=b(i);
for j=1:n
if i<>j
if i>j
x(i,k)=x(i,k)-A(i,j)*x(j,k);
else
x(i,k)=x(i,k)-A(i,j)*x(j,k-1);
end
end
end
x(i,k)=(1/A(i,i))*x(i,k);
erroNovo=abs(x(i,k)-x(i,k-1));
if erroNovo > erro
erro=erroNovo;
end
end
erroFinal(k)=erro;
erro=0;
end
endfunction
//*****************************************************************
// Jacobi
function [x,erroFinal]=Jacobi(A,b,x)
for k=2:numItera
for i=1:n
x(i,k)=b(i);
for j=1:n
if i<>j
x(i,k)=x(i,k)-A(i,j)*x(j,k-1);
end
end
x(i,k)=(1/A(i,i))*x(i,k);
erroNovo=abs(x(i,k)-x(i,k-1));
if erroNovo > erro
erro=erroNovo;
end
end
erroFinal(k)=erro;
erro=0;
end
endfunction
//*****************************************************************
function A=leMatrizA()

// Definio da Matriz A
printf("\n\nEntrada da Matriz A");
for i=1:n
for j=1:n
printf("Entre com o elemento A(%d,%d) :",i,j);
A(i,j)=input("")
end
end
endfunction
//***************************************************************** function b=l
eVetorb()
// Definio da Matriz b
for i=1:n
printf("Entre com o elemento b(%d) :",i);
b(i)=input("");
end
endfunction
//*****************************************************************
// Definio das condies iniciais
function x=leCondInic()
printf("\n\nEntrada das condies iniciais");
for i=1:n
printf("Entre com o elemento x%d(0)",i);
x(i,1)=input("");
end
endfunction
//*****************************************************************
// Definio da ordem do sistema
n=input("Entre com a ordem do sistema:");
numItera=input("Entre com o nmero de iteraes");
erro=0;
A=leMatrizA();
b=leVetorb();
x=leCondInic();
i=1;
while i<>0
i=input("Entre com valor de i: ");
printf("\ni = %d",i);
select i
case 1 then
[x,erroFinal]=Jacobi(A,b,x);
// Imprime resultados
printf("\nIter ");
for i=1:n
printf("x%d ",i);

end
printf("\n");
for k=1:numItera;
printf(" %d ",k);
for i=1:n
printf("%f ",x(i,k));
end
printf("Erro =%f\n",erroFinal(k));
//printf("\n");
end
case 2 then
[x,erroFinal]=GaussSeidel(A,b,x);
// Imprime resultados
printf("\nIter ");
for i=1:n
printf("x%d ",i);
end
printf("\n");
for k=1:numItera;
printf(" %d ",k);
for i=1:n
printf("%f ",x(i,k));
end
printf("Erro =%f\n",erroFinal(k));
//printf("\n");
end
end
end