Você está na página 1de 8

UFES - Universidade Federal do Espírito Santo

PPGEM – Programa de Pós-graduação Engenharia Mecânica


CC201 – Computação Científica
Lista de exercício 1

Nos tópicos a seguir serão apresentados alguns resultados qualitativos e


quantitativos obtidos na análise de matrizes da ordem de 10², 10³ e 104,
respectivamente. Já os principais dados quantitativos, calculados através do Octave,
são apresentados na Tabela 2.

1 Matriz “arc130.mat”: ordem 10²

(c) Esparsidade das matrizes A, L e U, respectivamente:

Figura 1 - Esparsidade das matriezes (a) Original, (b) L da decomposição LU e (c) U da decomposição LU.

Avaliando o comportamento do método SOR com relação ao parâmetro w,


apresentado na Tabela 1, a seguir, adotou-se w=1,02, pois é o caso em que se tem
o menor número de iterações. Nessa análise foi desconsiderado o w=1, uma vez
que neste caso refere-se ao método Seidel.

Comportamento de w no Método SOR


w 0,8 0,9 1 1,02 1,05 1,2 1,5 1,9
Número de Iterações 21 16 10 12 14 23 55 1000
Tabela 1 - escolha do W adotado no Método SOR.

(f) Gráfico Iteração vs Erro dos métodos iterativos


UFES - Universidade Federal do Espírito Santo
PPGEM – Programa de Pós-graduação Engenharia Mecânica
CC201 – Computação Científica
Lista de exercício 1

Gráfico 1 - O Método de Jacobi é representado pelo símbolo '+', o Método Seidel pelo ‘x’ e o Método SOR pelo
'*'.

2 Matriz “igbt3.mat”: ordem

(c) Esparsidade das matrizes A, L e U, respectivamente:

Figura 2- Esparsidade das matrizes (a) Original, (b) L da decomposição LU e (c) U da decomposição LU.
UFES - Universidade Federal do Espírito Santo
PPGEM – Programa de Pós-graduação Engenharia Mecânica
CC201 – Computação Científica
Lista de exercício 1

Nesse caso, o gráfico Iteração x Erro dos métodos iterativos não foi obtido, pois
como apresentado na Tabela 2, o raio espectral do Método Jacobi foi maior que 1,
enquanto dos métodos Seidel e SOR foi muito próximo de 1 e isso implica na
impossibilidade computacional de solucionar essas matrizes pelos métodos
iterativos.

3 Matriz “igbt3.mat”: ordem

(c) Esparsidade das matrizes A, L e U, respectivamente:

Figura 3 - esparsidade das matrizes (a) Original, (b) L da decomposição LU e (c) U da decomposição LU.

Nesse caso, o gráfico Iteração x Erro dos métodos iterativos não foi obtido, pois
como apresentado na Tabela 2, o raio espectral de todos os métodos iterativos
analisados foi maior que 1 e isso implica na impossibilidade computacional de
solucionar essas matrizes pelos métodos iterativos.
UFES - Universidade Federal do Espírito Santo
PPGEM – Programa de Pós-graduação Engenharia Mecânica
CC201 – Computação Científica
Lista de exercício 1

Método Direto

Distância
Distâncias Distância
Ordem entre os vetor
entre as entre as
da Nome do Taxa de dos termos Norma do Número de
Determinante solução matrizes
matriz arquivo (load) Preenchimento Independentes Resíduo Condicionamento
exata e original e
(N) original e
aproximada resultante
resultante
130 "arc130.mat" 1102,6 88,848 1,1714E-08 0,00065568 1,4278E-14 1,1642E-10 60542114813
1074 “bcsstk08.mat” inf 97,528 2,2361E-08 1,0013 1,7610E-12 1,9836E-04 2,5987E+07
10938 “igbt3.mat” inf 99,804 0,0007167 1,8961 1,3973E-12 6,15E-05 4,16E+19

Método Iterativo

Ordem Raio Método


Raio Método Jacobi Método SOR
da Nome do Diagonal Raio Espectral Espectral Seidel
Espectral
matriz arquivo (load) Dominante Jacobi SOR
Seidel
(N) (w=1,02) Norma Norma Norma
Iter Iter Iter
Erro Erro Erro
130 "arc130.mat" False 0,0832 0,0159 0,5823 13 0,000006 10 0.00000 12 0,000001
1074 “bcsstk08.mat” False 1,8361 0,9985 0.9984 - - - - - -
10938 “igbt3.mat” False 643,73 221141,91 228255,6 - - - - - -
Tabela 2- Dados calculados pelo Octave.
UFES - Universidade Federal do Espírito Santo
PPGEM – Programa de Pós-graduação Engenharia Mecânica
CC201 – Computação Científica
Lista de exercício 1

4 CONCLUSÃO

Sabe-se que quando o número de iterações aumenta, o erro irá reduzir se, e
somente se, o módulo de todos os autovetores da matriz de iteração forem menores
que a unidade. Alem do mais, a taxa de convergência será controlada pela
magnitude do maior autovalor em módulo, conhecido como raio espectral. No
experimento, o raio espectral do Método Seidel foi o menor, usando a menor
quantidade de iteração e o menor erro. Apesar do Método SOR ter tido o maior raio
espectral, a norma de seu erro foi 6 vezes menor do que no Método Jacobi, cuja a
iterações foi a maior quantidade.

Uma possível explicação para tais resultados pode ser pelo fato das matrizes serem
ou não estritamente dominantes. Sabe-se que se a matriz dos coeficientes A for
diagonal estritamente dominante, então a solução pelos Métodos de Jacobi e
Gauss-Seidel convergerá. Isso é um fato constatado no experimento. No entanto, se
A não for diagonalmente dominante, a previsão de convergência deve ser feita
usando o raio espectral da matriz de iteração. Pode ter sido isso que causou
discrepâncias nos resultados obtidos, além do seu malcondicionamento.

Por fim, é importante analisar como pequenas variações nos elementos da matriz
dos coeficientes A ou no vetor de termos independentes b influencia a solução x do
sistema linear Ax = b. Quando o sistema é malcondicionado, por sua vez, o resíduo
não é um bom indicador de exatidão da solução.

5 REFERÊNCIAS

Frederico Ferreira Campos, filho. ALGORITMOS NUMERICOS: UMA


ABORDAGEM MODERNA DE CALCULO NUMERICO. LTC, Rio de Janeiro, 4ª ed,
2018.
UFES - Universidade Federal do Espírito Santo
PPGEM – Programa de Pós-graduação Engenharia Mecânica
CC201 – Computação Científica
Lista de exercício 1

6 APÊNDICE

#Código usado na solução da primeira lista de Exercicios

printf("\nMétodo Direto\n\n")

#Metodos Diretos

load ("arc130.mat") #ALTERAR o nome para o nome da matriz que se deseja analisar

A=Problem.A; #Converte a matriz esparsa no metodo CCR

det(A)

[L,U,P]=lu(A); #Decomposição LU da matriz A

spy(A) #Figua da estrutura da matriz A

figure

spy(L) #Figua da estrutura da matriz L

figure

spy(U) #Figua da estrutura da matriz U

printf("Taxa de Preenchimento\n")

TP=100-(nnz(A)/(nnz(L)+nnz(U)))*100 #Taxa de preenchimento

n=rows(A) #Associa a n o numero de linhas de A

b=A*ones(n,1); #Cria o vetor b

x=A\b; #Solução do sistema linear pela Eliminação de Gauss

dx=ones(n)-x; #Vetor da diferença entre o resultado original e o calculado

printf("Distancia entre solucao exata e aproximada\n")

nx=norm(dx,inf)/norm(x,inf) #Distanacia entre solucao exata e aproximada

DecA= A-P*L*U; #Matriz A obtida da Decomposicao LU

printf("Distancia entre a matriz original A e a matriz resultante da decomposicao LU\n")

nA=norm(DecA,inf)/norm(A,inf) #Distancia entre a matriz original A e a matriz

#resultante da decomposicao LU
UFES - Universidade Federal do Espírito Santo
PPGEM – Programa de Pós-graduação Engenharia Mecânica
CC201 – Computação Científica
Lista de exercício 1

db=A*dx;

printf("Distancia entre os termos independentes originais e os da decomposição LU\n")

nb=norm(db,inf)/norm(b,inf) #Distanacia entre os termos independentes originais

#e os da decomposição LU

r=b-A*x; #residuo

printf("Norma do residuo\n")

nr=norm(r,inf) #norma do residuo

printf("Numero de condicionamento da matriz\n")

K=cond(A)

printf("\n\nMétodo Iterativo\n\n")

#Metodos iterativos

load ("arc130.mat") #ALTERAR o nome para o nome da matriz que se deseja analisar

A=Problem.A;

det(A)

n=rows(A)

b=A*ones(n,1);

printf("A matriz e diagonal dominante\n")

dd=diagonal_dominante(A) #Calculo usando a função

w=1.02; #parâmetro do metodo SOR

[MJ, MS, MSOR] = fatora(A, w);

[VJ lambdaJ]=eig(MJ);

[VS lambdaS]=eig(MS);

[VSOR lambdaSOR]=eig(MSOR);

printf("Raio Espectral dos Metodos Iterativos\n")

raioespJ=max(abs(diag(lambdaJ))) #raio espectral da matriz de iteração de Jacobi

raioespS=max(abs(diag(lambdaS))) #raio espectral da matriz de iteração de Seidel


UFES - Universidade Federal do Espírito Santo
PPGEM – Programa de Pós-graduação Engenharia Mecânica
CC201 – Computação Científica
Lista de exercício 1

raioespSOR=max(abs(diag(lambdaSOR))) #raio espectral da matriz de iteração de SOR

tol=0.00001; #Tolerancia

nmaxiter=10000; #numero maximo de iterações

[xJ,erJ,iterJ]=jacobi(A,b,tol,nmaxiter); #Metodo de Jacobi - Usando a funçao

[xS,erS,iterS]=sor(A,b,tol,nmaxiter,1); #Metodo de Seidel - Usando a função

[xSOR,erSOR,iterSOR]=sor(A,b,tol,nmaxiter,w); #Metodo de Seidel - Usando a função

#Grafico do numero de iteracoes vs erro

figure

hold on

title("Numero de iteracoes vs Erro");

xlabel("Numero de Iteracoes");

ylabel("Erro");

semilogy(iterJ, erJ,'+')

semilogy(iterSOR, erSOR,'*')

semilogy(iterS, erS,'x')

hold off

Você também pode gostar