You are on page 1of 14

UNIVERSIDADE FEDERAL DE OURO PRETO

INSTITUTO DE CINCIAS EXATAS E APLICADAS

Projeto 01 Mtodo de Jacobi


Anlise Numrica

Alunos: Arthur

Douglas

Nekson

Professor: Harlei Miguel de Arruda Leite DECSI-ICEA/JM

Joo Monlevade, Minas Gerais

2016

1
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

Sumrio

1. Cdigo Implementado .................................................................................................. 3

Cdigo principal ........................................................................................................... 3

Funo para Verificar Convergncia ............................................................................ 5

Funo para Achar o Erro a Cada Iterao ................................................................... 6

2. Caso de Teste 01 ........................................................................................................... 7

3. Caso de Teste 02 ......................................................................................................... 10

4. Caso de Teste 03 ......................................................................................................... 12

2
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

1. Cdigo Implementado

Cdigo principal
disp('Projeto 01 - Mtodo de Jacobi');

% M = (n x n) B = [m x 1]
% M = [aij, a12, a13] B = [1]
% [a21, a22, a23] [2]
% [a31, a32, a33] [3]

n = input('Digite tamanho "n" da matriz n x n: ');


if (n>0)
matriz = zeros(n); %Aloca espao e coloca 0's
b = zeros(1,n);
% matriz
% b

fprintf('\n***************Preenchendo a matriz***************\n')
for i=1:n
for j=1:n
fprintf('\nDigite o elemento da posio %d x %d: ', i,j);
matriz(i,j)= input('');
end;
end;
disp(matriz);

%Chama a funo criada. Se op for igual a 1, converge. Vetor


guarda dos elementos onde i=j
[vetor,op] = Verifica_Convergencia(matriz,n);
%disp(op);

if (op==1) %Se convergir, continua a execuo.


disp('O processo ir convergir!');

%Preenche o vetor b (soluo do sistema)


for i=1:n
fprintf('\nDigite o resultado da %d linha: ', i);
b(i) = input('');
end;

solucao1 = zeros(1,n); %Vetor soluo da iterao


solucao2 = zeros(1,n); %Vetor soluo auxiliar

kmax = input('Digite o nmero mximo de iteraes: ');


%Numero mximo de interaes informado pelo usurio
erromax = input('Digite o erro pretendido: ');
%Erro informado pelo usurio
k=0;

%Iterao k = 0. soluo = bi/aii

3
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

for i=1:n
solucao1(i) = b(i)/vetor(i);
end;
fprintf('k = %d', k);
disp(solucao1);

k = k+1;
erro = 0;
soma = 0;
while (k<=kmax)||(erro<=erromax) %Enquanto o numero de
iteraes no exceder o definido ou o erro ser maior que o
mximo definido

for i=1:n
for j=1:n
if(i~=j)
soma = soma + (-(matriz(i,j)*solucao1(j)));
end;
end;
%Terminando a linha, podemos somar com o B(i) e
multiplicar
%pelo 1/aii
soma = (1/vetor(i))*(soma + b(i)); %Soma contm agora
o X soluo
solucao2(i) = soma; %solucao2(i) recebe o valor do x
soma = 0; %Zera o valor para a prxima linha
end;

fprintf('k = %d', k);


k = k+1;
disp(solucao2);
erro = Valor_Norma(solucao1,solucao2,n); %Chama a funo
para achar o erro a cada iterao. (Comeando em k=1);
fprintf('Erro e = %d\n\n', erro);
solucao1 = solucao2; %Atualiza o valor da soluo
anterior;
end;

else
disp('O processo no converge!');
end;

else disp('Valores invlidos!');


end;

4
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

Funo para Verificar Convergncia

function [vetor,op] = Verifica_Convergencia(matriz,n)

%Verifica o critrio de convergncia


%Se for convergente, retorna 1

op = 1;

vetor = zeros(1,n); %Vetor com 0's de tamanho 1 x n

for i=1:n
for j=1:n
if (j==i)
vetor(i) = abs(matriz(i,j));
end;
end;
end;

soma = 0; %Guarda a soma dos mdulos para cada linha

for i=1:n
for j=1:n
if(i~=j)
soma = soma + abs(matriz(i,j)); %Pega todos os
elementos da linha e soma seus valores absolutos
end;
end;
%Aps esse for, temos a soma dos absolutos de cada linha.
Pode-se ento comparar

if (soma>=vetor(i))
op = 0; %No converge
break;
end;
soma = 0; %Zera a varivel para verificar a prxima linha
end;

return;

5
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

Funo para Achar o Erro a Cada Iterao


function [erro] = Valor_Norma(solucao1, solucao2, n)

% Funo responsvel pelo clculo da norma-oo para cada iterao;


% (|x1 - x0|/|x1|); (|x2 - x1|/|x2|) ...

diferenca = zeros(1,n); %Vetor que guarda as diferenas dos


valores das iteraes.

for i=1:n
diferenca(i) = abs(solucao2(i) - solucao1(i)); % Pega o
valor absoluto da diferena.
end;

erro = (max(diferenca))/(max(solucao2)); % O erro igual


maior diferena dividido pelo maior valor da soluo 2

return

6
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

2. Caso de Teste 01

Para a realizao do primeiro teste, foi utilizado o sistema linear mostrado abaixo:

Os valores do sistema linear assim como o mximo de iteraes a serem realizadas e o


erro mximo desejado, so fornecidos como dados de entrada. O programa, realiza
ento o teste de convergncia atravs da funo Verifica_Convergencia. Caso o
sistema no convirja, uma mensagem exibida e o programa finalizado. Caso
contrrio, a execuo prossegue dando incio entrada do vetor soluo do sistema.

Com o nmero mximo de execues e o valor mximo do erro fornecido, o clculo das
solues iniciado. A cada iterao a funo que calcula o erro chamada
(Valor_Norma) e retorna o erro. Os valores so impressos, mostrando a iterao, o
erro e o vetor soluo. Assim, quando o erro for menor que o erro definido ou o kmax
for ultrapassado, o programa finaliza sua execuo.

7
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

8
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

Figura 01 Caso de teste 01.

Observando a figura 01, pode-se analisar o funcionamento do programa. Assim que foi
informado a matriz n x n informado sobre a convergncia do mtodo, neste caso
verdadeiro, logo a mensagem informada : O processo ir convergir. Em sequncia
solicitado ao usurio os valores resultado para cada linha da matriz! Logo aps, o
usurio indica qual seria o numero mximo de interaes, neste caso 10,
sequencialmente solicitado tambm o valor para o erro ao qual se pode considerar que
a soluo encontrada satisfatria. A condio de parada determinada se deu quando o
erro se tornou menor do que o erro desejado pelo usurio, pois com o erro informado de
0.01 na 5 interao (K=4) obteve-se o valor do erro igual a 0,005297246. Apesar de o
nmero mximo de iteraes no ter sido alcanado o erro estabelecido foi alcanado.
Assim, o programa imprimiu a soluo das iteraes realizadas e o erro como esperado.

9
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

3. Caso de Teste 02

Para esse teste, o sistema linear utilizado mostrado abaixo.

10
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

Figura 02 Caso de teste 02.

Neste caso teste 02 a convergncia do mtodo, verdadeira, logo a mensagem


informada : O processo ir convergir. Solicitado o numero mximo de interaes,
neste caso 15, indicado tambm o erro satisfatrio de 0.001. A condio de parada foi
encontrada na 8 interao (K=7), Assim a condio de parada foi o critrio de erro.

11
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

4. Caso de Teste 03
Para esse teste, o sistema linear utilizado mostrado abaixo.

12
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

Figura 03 Caso de teste 03.

13
UNIVERSIDADE FEDERAL DE OURO PRETO
INSTITUTO DE CINCIAS EXATAS E APLICADAS

Neste caso teste 03, o teste de convergncia foi verdadeiro, assim a aplicao do mtodo
convergir, informado 20 para o valor para a quantidade mxima de interaes, indicado
tambm o erro satisfatrio de 0.0001. A condio de parada foi encontrada na 12
interao (K=11), Assim a condio de parada foi o critrio de erro. notvel, portanto
que caso haja a diminuio do numero de interao, por exemplo 10, considerando esse
mesmo erro, como na figura 04: abaixo

Figura 04 Caso de teste 03 (Com Kmax = 10).

A condio de parada que aconteceria primeiro seria o alcance do numero mximo de


interaes, ou seja, o mtodo para de ser executado, quando K for igual a 10, assim, se
pode comprar o vetor soluo para as duas situaes, que no casso possui valores
ligeiramente distintos para X1. Veja que a soluo encontrada para Kmax = 20 foi
[1.0000; 1.0000; 1.0000] e para Kmax = 10 foi [1.0001; 1.0000; 1.0000], sendo assim,
possvel identificar que quanto maior o numero de interaes, melhor ser a resoluo
encontrada.

14

You might also like