Universidade Federal de S˜
ao Jo˜
ao Del Rei - UFSJ
Institu´ıda pela Lei 10.425, de 19/04/2002 - D.O.U. de 22/04/2002 Pr´o-Reitoria de Ensino de Gradua¸c˜ao - PROEN
Disciplina: C´alculo Num´erico Ano: 2012 Prof: Nat˜a Goulart da Silva Vers˜ao Documento 0.9
Resolu¸c˜ao de Sistemas Lineares
Sum´
ario
1 Introdu¸c˜ao 2
1.1 M´etodo de Elimina¸c˜ao de Gauss . . . 2
1.2 Pivoteamento na Elimia¸c˜ao de Gauss . . . 3
1.3 Algoritmo de substitui¸c˜ao retroativas . . . 4
1.4 Verifica convergˆencia pelo Teorema do Raio Espectral . . . 5
1.5 M´etodo de Decomposi¸c˜ao LU com pivota¸c˜ao . . . 6
1.6 Algoritmo de substitui¸c˜ao sucessivas para LU . . . 7
1.7 Algoritmo de pivota¸c˜ao para o m´etodo LU . . . 7
1.8 M´etodo Iterativo de Jacobi . . . 9
1.9 M´etodo Iterativo de Gauss Seidel . . . 11
1.10 Verifica¸c˜ao de convergˆencia m´etodos iterativos . . . 12
1
Introdu¸
c˜
ao
Algoritmos retirados dos livros da bibliografia b´asica [1,2, 3,4].
1.1
M´
etodo de Elimina¸
c˜
ao de Gauss
Para usar o pivoteamento, chamar a fun¸c˜ao pivotear no in´ıcio do primeiro la¸co. Algoritmo 1: M´etodo de Elimina¸c˜ao de Gauss
input : Matriz A, vetor independente b
output: Matriz A triangular superior e vetor b alterado % Para a linha 1 da matriz at´e a pen´ultima
for k = 1 : n − 1 do
% Para as linhas da matriz abaixo da linha pivotal for i = k + 1 : n do
% Calcula o valor do multiplicador m = a(i,k)/a(k,k);
%O elemento abaixo do pivo transforma-se em zero a(i,k)=0;
%Para as colunas seguintes aplica-se a opera¸c˜ao elementar for j = k + 1 : n do
a(i,j) = a(i,j) - m*a(k,j); end
%Promove a opera¸c˜ao elementar no vetor b b(i) = b(i)-m*b(k);
end end
1.2
Pivoteamento na Elimia¸
c˜
ao de Gauss
Algoritmo 2: Executa pivota¸c˜ao em A e b
input : Matriz A, vetor b e o valor j da coluna do elemento pivo output: Matriz A e o vetor b ap´os pivota¸c˜ao
% Variavel de controle para teste da necessidade de pivota¸c˜ao linhapivo=0;
%S´o faz pivoteamento para matrizes com n > 1 if n > 1 then
% Considera inicialmente como pivo o primeiro elemento da linha pivotal (diagonal) pivo = A(j,j);
% Verifica se h´a algum elemento maior em m´odulo, nas linhas abaixo for k = j + 1 : n do
if |A(k, j)| > |pivo| then pivo = A(k,j);
% Se houver um elemento maior que o pivo, guarda a linha k linhapivo = k;
end end
% Se linhapivo ´e diferente de zero, deve-se trocar as linhas if linhapivo 6= 0 then
% Trocar a linha pivotal j pela linha presente em linhapivo Trocar as linhas da matriz A e do vetor b
end end
1.3
Algoritmo de substitui¸
c˜
ao retroativas
Obten¸c˜ao de x∗ por substitui¸c˜oes retroativas
Algoritmo 3: Substitui¸c˜oes Retroativas
input : Matriz A triangular superior, vetor independente b output: Vetor solu¸c˜ao x∗
% Para o ´ultimo elemento da matriz triangular, a(n,n), efetuar a substitui¸c˜ao x(n) = b(n)/a(n,n);
for i = n − 1 : 1 do
% Inicializa uma vari´avel de soma soma=0;
%Efetua-se a substitui¸c˜ao nas linhas com os valores de x j´a calculados for j = i + 1 : n do
s = s + a(i,j) *x(j); end
%Substitui¸c˜ao dos valores x(i) = (b(i)- s)/a(i,i); end
1.4
Verifica convergˆ
encia pelo Teorema do Raio Espectral
Verifica¸c˜ao de convergˆencia dos m´etodos de Jacobi e Gauss-Seidel pelo Teorema do Raio Espectral
Algoritmo 4: Verifica Convergˆencia de Jacobi e Gauss Seidel input : Matriz A dos coeficientes do sistema
output: Verifica¸c˜ao de convergˆencia dos m´etodos % A partir da matriz A criar as matrizes D, E e F for i = 1 : n do D(i,i) = A(i,i); for j = 1 : n do if i > j then E(i,j) = A(i,j); end if i < j then F(i,j) = A(i,j); end end end
% Calcula a matriz de itera¸c˜ao e o raio espectral J = −D−1∗ (E + F ); lamb1 = ρ(J ); % Verifica se converge if lamb1 < 1 then Imprimir(’Jacobi converge’); end
% Calcula a matriz de itera¸c˜ao e o raio espectral S = −(D + E)−1∗ F ;
lamb2 = ρ(S);
% Verifica se converge if lamb2 < 1 then
Imprimir(’Gauss Seidel converge’); end
if lamb1 ≥ 1 and lamb2 ≥ 1 then
Imprimir(’N˜ao converge para Jacobi e Gauss-Seidel’); end
1.5
M´
etodo de Decomposi¸
c˜
ao LU com pivota¸
c˜
ao
Algoritmo 5: M´etodo de Decomposi¸c˜ao LU com pivota¸c˜ao input : Matriz A dos coeficientes do sistema e vetor b output: Vetor solu¸c˜ao x∗
Iniciar matrizes identidades P e L; U = A % Faz c´opia de A em U
%La¸co executado sobre as linhas pivotais for k = 1 : n − 1 do
%Antes de calcular multiplicador, chama fun¸c˜ao pivotear % Se houver pivota¸c˜ao, as matrizes P,U e L ser˜ao alteradas [P, U, L] = pivotear(P, U, L, k);
% Altera¸c˜oes realizadas abaixo da linha pivotal(k+1) for i = k + 1 : n do
%Para cada linha abaixo da linha pivotal, calcula o multiplicador m m = U (i, k)/U (k, k);
% Matriz L recebe multiplicadores L(i, k) = m;
% Os elementos abaixo do pivo ser˜ao zerados U (i, k) = 0;
for j = k + 1 : n do
%Aplica opera¸c˜oes elementares no restante da linha U (i, j) = U (i, j) − m ∗ U (k, j);
end end end
%Executa as substitui¸c˜oes sucessiva com a matriz L y = subsucessivasLU (L, P ∗ b0);
%Executa as retroativas sucessiva com a matriz U x = subretroativas(U, y)’
%Calcula o vetor res´ıduo r = b0 − A ∗ x
1.6
Algoritmo de substitui¸
c˜
ao sucessivas para LU
Algoritmo 6: Algoritmo de substitui¸c˜oes sucessivas input : Matriz L e vetor b multiplicado por P output: Vetor y
for i = 1:n do soma =0; for j = 1:i-1 do
% Soma as parcelas onde os valores de y j´a foram calculados soma = soma + L(i,j)*y(j);
end
%Para cada linha, calcula o valor de y(i) y(i) = b(i) - soma;
end
1.7
Algoritmo de pivota¸
c˜
ao para o m´
etodo LU
Algoritmo 7: Executa pivota¸c˜ao em A, L e P
input : Matrizes P, U, L e o valor j da coluna do elemento pivo output: Matrizes P, U e L ap´os pivota¸c˜ao
linhapivo=0;
%S´o faz pivoteamento para matrizes com n > 1 if n > 1 then
% Considera inicialmente como pivo o primeiro elemento da linha pivotal (diagonal) pivo = A(j,j);
% Verifica se h´a algum elemento maior em m´odulo, nas linhas abaixo for k = j + 1 : n do
if |A(k, j)| > |pivo| then pivo = A(k,j);
% Se houver um elemento maior que o pivo, guarda a linha k linhapivo = k;
end end
% Se linhapivo ´e diferente de zero, deve-se trocar as linhas
% Trocar valor da linha pivotal l pelo valor presente em linhapivo if linhapivo 6= 0 then
Trocar as linhas da matriz A e da identidade P for w=1:j-1 do
Trocar os multiplicadores entre as linhas inicialmente pivotal e linha contida em linhapivo at´e a coluna j-1
end end end
1.8
M´
etodo Iterativo de Jacobi
Algoritmo 8: Algoritmo iterativo de Jacobi input : Matrizes A, vetor b, precisao e kmax output: Vetor solu¸c˜ao x e k, n´umero de itera¸c˜oes
%Definir valores da matriz dos coeficientes A, alterada pela divis˜ao pelo elemento A(i,i) for i=1:n do
r = 1 / A(i,i); % Para cada linha de A, calcular r que ir´a dividir os elementos for j=1:n do
if i ˜ = j then
A(i,j) = A(i,j) * r; end
end
% Calculo do vetor inicial x0 b(i) = b(i) * r; x(i)=b(i); end
normainf = precisao + 10; %iniciando normainf com valor maior que precisao while normainf > precisao do
if k > Kmax then
break; %Condi¸c˜ao de parada, m´etodo n˜ao atingiu a precisao// end k = k + 1; % Calcular o valor de x1 for i=1:n do soma = 0; for j=1:n do if i ˜ = j then
soma = soma + A(i,j) * x(j); end
end
x1(i) = b(i) - soma; end
normanum = normaden= 0;
% Calculo norma infinita, condi¸c˜ao de parada for i=1:n do
t = abs(x1(i) - x(i)); if t > normanum then
normanum = t; end
if abs(x1(i)) > normaden then normaden = abs(x1(i)); end
end
1.9
M´
etodo Iterativo de Gauss Seidel
Algoritmo 9: Algoritmo iterativo de Gauss-Seidel input : Matrizes A, vetor b, precisao e kmax output: Vetor solu¸c˜ao x e k, n´umero de itera¸c˜oes
%Definir valores da matriz alterada pela divis˜ao pelo elemento A(i,i) for i=1:n do r = 1 / A(i,i); for j=1:n do if i ˜ = j then A(i,j) = A(i,j) * r; end end
x(i) = b(i) * r; % Calculo do vetor inicial x0 end
k = 0;
normainf = precisao + 10; %iniciando normainf com valor maior que precisao while normainf > precisao do
if k > Kmax then
break;%Condi¸c˜ao de parada, m´etodo n˜ao atingiu a precisao end k = k + 1; for i=1:n do soma = 0; for j=1:n do if i > j then
soma = soma + A(i,j) * x1(j); end
if i < j then
soma = soma + A(i,j) * x(j); end
end
x1(i) = b(i) - soma;% Atualiza vetor x1 end
normanum = normaden = 0; %inicia normas do numerador e denominador for i=1:n do
t = abs(x1(i) - x(i)); if t > normanum then
normanum = t; end
if abs(x(i)) > normaden then normaden = abs(x1(i)); end
1.10
Verifica¸
c˜
ao de convergˆ
encia m´
etodos iterativos
Seja o sistema Linear A ∗ x = b representado pelas matrizes a seguir, verifique a con-vergˆencia para o m´etodos iterativos de Jacobi e de Gauss-Seidel.
0, 5 0, 6 0, 3 1 −1 1 0, 4 −0, 4 1 x1 x2 x3 = 0, 2 0 −0, 6
Para o m´etodos iterativos, o primeiro teste que deve ser aplicado ´e verificar se a matriz dos coeficientes A ´e estritamente diagonal dominante. Verifica-se que para este exemplo, j´a na primeira linha da matriz que este teste ir´a falhar. Ent˜ao, deve-se calcular as matrizes de itera¸c˜ao dos m´etodos de Jacobi e Gauss-Seidel e verificar se ρ(M ) < 1.
A = D + E + F 0, 5 0, 6 0, 3 1 −1 1 0, 4 −0, 4 1 = 0, 5 0 0 0 −1 0 0 0 1 + 0 0 0 1 0 0 0, 4 −0, 4 0 + 0 0, 6 0, 3 0 0 1 0 0 0
A matrizes de itera¸c˜ao s˜ao:
J = −D−1∗ (D + F ) e S = −(D + E)−1∗ F
Como a matria D ´e uma matriz diagonal, sua inversa pode ser encontrada pelo m´etodo de elimina¸c˜ao de Gauss. Nesta forma de c´alculo, opera¸c˜oes elementares s˜ao realizadas sobre a Matriz D de forma a transform´a-la em uma matriz Identidade. As mesmas opera¸c˜oes elementares devem ser realizadas sobre as linhas de uma matriz Identidade com as mesmas dimens˜oes de D. Quando a matriz D se tornar Identidade, a matriz identidade ser´a a inversa. Lembrando que apenas s˜ao invers´ıveis matriz cujo seu determinante s˜ao diferentes de zero.
Exemplo: 0, 5 0 0 1 0 0 0 −1 0 0 1 0 0 0 1 0 0 1
J = − 2 0 0 0 −1 0 0 0 1 ∗ 0 0, 6 0, 3 1 0 1 0, 4 −0, 4 0 = 0 −1, 2 −0, 6 1 0 1 −0, 4 0, 4 0
det(J − λI) = 0 ⇒ Determinante da matriz seja igual a zero:
−λ −1, 2 −0, 6 1 −λ 1 −0, 4 0, 4 −λ
O polinˆomio caracter´ıstico para esta matriz ´e: λ3+ 0, 56λ − 0, 24 = 0 que tem apenas uma raiz real λ1 = 0, 3512 < 1. Ent˜ao, o sistema dado converge para o m´etodo de Jacobi.
Para o m´etodo de Gauss Seidel, deve-se calcular (D + E)−1
D + E = 0, 5 0 0 1 −1 0 0, 4 −0, 4 1 0, 5 0 0 1 0 0 1 −1 0 0 1 0 0, 4 −0, 4 1 0 0 1 ⇒ 1 0 0 2 0 0 0 1 0 2 −1 0 0 0 1 0 −0.4 1 S = −(D + E)−1∗ F = −2 0 0 −2 1 0 0 0, 4 −1 ∗ 0 0, 6 0, 3 0 0 1 0 0 0 = 0 −1, 2 −0, 6 0 −1, 2 0, 4 0 0 0, 4
det(S − λI) = 0 ⇒ Determinante da matriz seja igual a zero:
−λ −1, 2 −0, 6 0 −1.2 − λ 0.4 0 0 0.4 − λ
Com polinˆomio caracter´ıstico igual a: λ3+ 0, 8 ∗ λ2−0, 48∗λ = λ∗(λ2+ 0, 8 ∗ λ − 0, 48) = 0.
Os trˆes autovalores para a matriz S s˜ao: (0; −1, 2; 0, 4) e ρ(S) = 1, 2 > 1. Ent˜ao este sistema n˜ao converge para o m´etodo de Gauss Seidel.
Referˆ
encias
[2] S. C. Chapra and R. P Canale. M´etodos Num´ericos para Engenharia. Pearson, 2008. [3] N. B. Franco. C´alculo Num´erico. Pearson, 2006.
[4] M. A. G . Ruggiero and V. L. R. Lopes. C´alculo Num´erico - Aspectos Te´oricos e Computacionais. Pearson, 2006.