Buscar

sistemas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Sistemas de Equações Lineares 4 - 1
Cálculo Numérico e Computacional C.Y. Shigue
Sistemas de Equações Lineares
Definição
Um sistema de equações lineares pode ser definido como um conjunto de n equações
com n variáveis independentes entre si, na forma genérica, como:
a11x1 + a12x2 + a13x3 + ... + a1nxn = b1
a21x1 + a22x2 + a23x3 + ... + a2nxn = b2
a31x1 + a32x2 + a33x3 + ... + a3nxn = b3 (1)
� � � �
 � �
a
n1x1 + an2x2 + an3x3 + ... + annxn = bn
na qual aij (i, j = 1, 2, 3, ..., n) são os coeficientes do sistema de equações, xi (i = 1, 2, 3, ..., n)
são as n incógnitas e bi (i = 1, 2, 3, ..., n) os termos independentes.
Formulação Matricial
As equações representadas em (1) podem ser descritas na forma matricial como:
[A][x]
 = [b] (2)
para o qual:










=
nn3n2n1n
n3333231
n2232221
n1131211
aaaa
aaaa
aaaa
aaaa
]A[
�
�����
�
�
�
, 










=
n
3
2
1
x
x
x
x
]x[
�
, 










=
n
3
2
1
b
b
b
b
]b[
�
(3)
Nesta representação, a solução direta pode ser obtida fazendo-se:
[x] = [A]-1[b] (4)
para a qual emprega-se os métodos de inversão de matrizes utilizados em cursos de Álgebra
Linear. O cálculo da matriz inversa pode ser feito através da propriedade da matriz identidade:
[I] = [A]-1[A] (5)
Se os coeficientes da matriz inversa [A]-1 são as incógnitas do problema, então o
cálculo desses coeficientes resume-se a encontrar a solução do seguinte sistema de equações:
Sistemas de Equações Lineares 4 - 2
Cálculo Numérico e Computacional C.Y. Shigue
]I[
100
010
001
aaa
aaa
aaa
xxx
xxx
xxx
]A[]A[
nn2n1n
n22221
n11211
nn2n1n
n22221
n11211
1
=








=
















=
−
�
����
�
�
�
����
�
�
�
����
�
�
(6)
Assim, o problema do cálculo de sistemas de equações lineares através do produto da
matriz inversa resulta num problema de cálculo de sistemas de equações lineares. À seguir,
apresentaremos um método direto para a solução de sistemas de equações lineares denominado
método de eliminação gaussiana e outro método, iterativo, chamado método de Gauss-Seidel.
Além desses métodos, inúmeros outros apropriados para cada tipo de sistema de equações
lineares existem, mas que não trataremos neste texto.
Método da Eliminação Gaussiana
Considere o sistema de equações representado matricialmente por [A][x] = [b]. O
Método da Eliminação de Gauss consiste basicamente em transformar a matriz de A num
sistema triangular equivalente, através da aplicação repetida de dois tipos de operações:
1. Permutação entre duas linhas;
2. Subtração de uma linha por outra multiplicada por uma constante.
Essas operações produzem sistemas equivalentes aos originais; enquanto a operação 2
não altera o determinante da matriz de coeficientes, a operação 1 apenas inverte o seu sinal.
A análise de propagação de erros de arredondamento indica a conveniência de todos os
multiplicadores serem menores do que 1 em valor absoluto. A esse procedimento dá-se o nome
de pivoteamento.
Descrição do algoritmo com pivoteamento
Vamos considerar um sistema constituído de quatro equações e quatro incógnitas:
a11x1 + a12x2 + a13x3 + a14x4 = b1
a21x1 + a22x2 + a23x3 + a24x4 = b2
a31x1 + a32x2 + a33x3 + a34x4 = b3
a41x1 + a42x2 + a43x3 + a44x4 = b4
Seja [A] a matriz de coeficientes, [A]+ a matriz aumentada pelos termos independentes
e o sistema na forma matricial descrito por [A][x] = [b], no qual:
Sistemas de Equações Lineares 4 - 3
Cálculo Numérico e Computacional C.Y. Shigue
[A] = 
a a a a
a a a a
a a a a
a a a a
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44






, [x] = 
x
x
x
x
1
2
3
4






, [b] = 
b
b
b
b
1
2
3
4






[A]+ = 
a a a a b
a a a a b
a a a a b
a a a a b
11 12 13 14
21 22 23 24 2
31 32 33 34 3
41 42 43 44 4
1





(7)
Os seguintes passos descrevem o procedimento para a triangularização da matriz [A]:
1o Passo:
Calcular p1 = máx{|a11|, |a21|, |a31|, |a41|}. Certamente p1 ≠ 0, pois caso contrário |A| = 0 e o
sistema não teria solução única. Caso p1 ≠ |a11|, permutar a 1a linha pela linha que contém p1.
2o Passo:
Definir um multiplicador para cada linha:
m
a
a
m
a
a
m
a
a
2
21
11
3
31
11
4
41
11
= = =, , (8)
3o Passo:
Subtrair o produto do multiplicador pela 1a linha da 2a, da 3a e da 4a linha:
• 2a Linha
′ = − = − =a a m a a
a
a
a21 21 2 11 21
21
11
11 0 (9)
′ = −a a m a22 22 2 12 (10)
′ = −a a m a23 23 2 13 (11)
′ = −a a m a24 24 2 14 (12)
′ = −b b m b2 2 2 1 (13)
• 3a Linha:
′ = − = − =a a m a a
a
a
a31 31 3 11 31
31
11
11 0 (14)
′ = −a a m a32 32 3 12 (15)
′ = −a a m a33 33 3 13 (16)
′ = −a a m a34 34 3 14 (17)
Sistemas de Equações Lineares 4 - 4
Cálculo Numérico e Computacional C.Y. Shigue
′ = −b b m b3 3 3 1 (18)
• 4a Linha:
′ = − = − =a a m a a
a
a
a41 41 4 11 41
41
11
11 0 (19)
′ = −a a m a42 42 4 12 (20)
′ = −a a m a43 43 4 13 (21)
′ = −a a m a44 44 4 14 (22)
′ = −b b m b4 4 4 1 (23)
Após estes passos, a matriz aumentada fica da seguinte foma:
[A]+ = 
a a a a b
a a a b
a a a b
a a a b
11 12 13 14
22 23 24 2
32 33 34 3
42 43 44 4
1
0
0
0
′ ′ ′ ′
′ ′ ′ ′
′ ′ ′ ′






Repetindo os passos de 1 a 3 para a coluna 2:
1o Passo:
Calcular p2 = máx{ }′ ′ ′a a a22 32 42, , . Novamente p2 ≠ 0, senão |A| = 0. Caso p2 ≠ |a21|, permutar
a 2a linha pela linha que contém p2.
2o Passo:
Definir um multiplicador para cada linha:
′ =
′
′
′ =
′
′
m
a
a
m
a
a
3
32
22
4
42
22
, (24)
3o Passo:
Subtrair o produto do multiplicador pela 2a linha da 3a e da 4a linha:
• 3a Linha:
′′ = ′ − ′ ′ = ′ −
′
′
′ =a a m a a
a
a
a32 32 3 22 32
32
22
22 0 (25)
′′ = ′ − ′ ′a a m a33 33 3 23 (26)
′′ = ′ − ′ ′a a m a34 34 3 24 (27)
′′ = ′ − ′ ′b b m b3 3 3 2 (28)
Sistemas de Equações Lineares 4 - 5
Cálculo Numérico e Computacional C.Y. Shigue
• 4a Linha:
′′ = ′ − ′ ′ = ′ −
′
′
′ =a a m a a
a
a
a42 42 4 22 42
42
22
22 0 (29)
′′ = ′ − ′ ′a a m a43 43 4 23 (30)
′′ = ′ − ′ ′a a m a44 44 4 24 (31)
′′ = ′ − ′ ′b b m b4 4 4 2 (32)
A matriz aumentada agora tem a forma:
[A]+ = 
a a a a b
a a a b
a a b
a a b
11 12 13 14
22 23 24 2
33 34 3
43 44 4
1
0
0 0
0 0
′ ′ ′ ′
′′ ′′ ′′
′′ ′′ ′′






(33)
Repetindo os passos 1 a 3 para as duas últimas linhas:
1o Passo:
Calcular p3 = máx{ }′′ ′′a a33 43, . Novamente p3 ≠ 0, senão |A| = 0. Caso p3 ≠ |a31|, permutar a 3a
linha pela 4a linha.
2o Passo:
Definir um multiplicador para a 4a linha:
′′ =
′′
′′
m
a
a
4
43
33
(34)
3o Passo:
Subtrair o produto do multiplicador pela 3a linha da 4a linha:
• 4a Linha:
′′′ = ′′ − ′′ ′′ = ′′ −
′′
′′
′′ =a a m a a
a
a
a43 43 4 33 43
43
33
33 0 (35)
′′′ = ′′ − ′′ ′′a a m a44 44 4 34 (36)
′′′ = ′′ − ′′ ′′b b m b4 4 4 3 (37)
A matriz aumentada toma a forma final:
[A]+ = 
a a a a b
a a a b
a a b
a b
11 12 13 14
22 23 24 2
33 34 3
44 4
1
0
0 0
0 0 0
′ ′ ′ ′
′′ ′′ ′′
′′′ ′′′






(38)
Sistemas de Equações Lineares4 - 6
Cálculo Numérico e Computacional C.Y. Shigue
Re-escrevendo a matriz [A]+ triangularizada sem as linhas nos expoentes dos
coeficientes aij e bj de modo a tornar mais clara as equações:
[A]+ = 
a a a a b
a a a b
a a b
a b
11 12 13 14
22 23 24 2
33 34 3
44 4
1
0
0 0
0 0 0






(39)
observando que os coeficientes aij e bj da matriz triangularizada acima não são os mesmos
coeficientes da matriz [A]+ original.
Resolvemos o sistema por recorrência através da fórmula:
x
b a x
a
ii
i ij
j i
j
ii
=
−






=
= +
∑
1
4
4 3 2 1, , , , (40)
O determinante da matriz de coeficientes [A] é calculado a partir do produto dos
coeficientes aii da diagonal principal:
|A| = a a a a aii
i
=
=
∏ 11 22 33 44
1
4
(41)
Exemplo:
Seja o sistema de três equações e três incógnitas:
2x1 + 3x2 – x3 = 0
-x1 + x2 + 4x3 = 3
 x1 – 8x2 - x3 = 1
cuja matriz aumentada [A]+ é descrita como:
[A]+ = 








−−
−
−
1181
3411
0132
Utilizando o programa de cálculo de eliminação gaussiana em precisão simples (com
arredondamento de sete casas decimais), cuja listagem aparece adiante neste texto, obtém-se a
matriz triangularizada:
Sistemas de Equações Lineares 4 - 7
Cálculo Numérico e Computacional C.Y. Shigue
[ ]








−
−−
−
=
36842113000000100
50590
132
,,
,,A
cujo determinante vale |A| = -64,0000009. A solução do sistema calculada pelo mesmo
programa resulta:
[ ]








−=
9687500
1562500
7187500
,
,
,
x
Observar que a solução do problema é exata, exceto pelo valor do determinante da
matriz [A], cuja solução é exatamente 64. O algarismo 9 na sétima casa decimal é resultado do
erro de arredondamento pelo cálculo das variáveis reais com precisão simples. Neste problema
simples o erro de arredondamento não afetou o vetor solução [x] do sistema, porém em
problemas que envolvam um número maior de equações ou em problemas cujos coeficientes
da matriz [A] já possuam erro de arredondamento na sua formulação, acarretam em severo
erro de arredondamento, inviabilizando a utilização do método de cálculo direto de eliminação
gaussiana. Nestes tipos de problema, um método iterativo, como o método de Gauss-Seidel
apresentado a seguir, é mais aconselhável.
Listagens dos programas de eliminação gaussiana com pivoteamento
FORTRAN
 PROGRAM ELIMINA
 PARAMETER (NMAX = 50)
 REAL A(NMAX,NMAX+1), X(NMAX+1)
 WRITE(*,10)
 10 FORMAT(1X,'NUMERO DE EQUACOES : ')
 READ(*,*) NN
 DO 500 I = 1, NN
 DO 510 J = 1, NN+1
 WRITE(*,50) I, J
 READ(*,*) A(I,J)
 510 CONTINUE
 500 CONTINUE
 LAST = NN - 1
 DO 520 I = 1, LAST
 BIG = 0.0
 DO 530 K = I, NN
 TERM = ABS(A(K,I))
 IF ((TERM - BIG) .GT. 0.0) THEN
 BIG = TERM
 L = K
 END IF
 530 CONTINUE
 IF (BIG. EQ. 0.0) THEN
 WRITE(*,*) 'MATRIZ SINGULAR'
 STOP
 END IF
 IF (I .NE. L) THEN
 DO 540 J = 1, NN+1
Sistemas de Equações Lineares 4 - 8
Cálculo Numérico e Computacional C.Y. Shigue
 TEMP = A(I,J)
 A(I,J) = A(L,J)
 A(L,J) = TEMP
 540 CONTINUE
 END IF
 PIVOT = A(I,I)
 NEXTR = I + 1
 DO 550 J = NEXTR, NN
 CONST = A(J,I) / PIVOT
 DO 560 K = I, NN+1
 A(J,K) = A(J,K) - CONST*A(I,K)
 560 CONTINUE
 550 CONTINUE
 520 CONTINUE
 DO 570 I = 1, NN
 IREV = NN + 1 - I
 Y = A(IREV,NN+1)
 IF (IREV .NE. NN) THEN
 DO 580 J = 2, I
 K = NN + 2 - J
 Y = Y - A(IREV,K)*X(K)
 580 CONTINUE
 END IF
 X(IREV) = Y / A(IREV,IREV)
 570 CONTINUE
 WRITE(*,60)
 WRITE(*,65)
 DO 590 I = 1, NN
 DO 600 J = 1, NN+1
 WRITE(*,70) I, J, A(I,J)
 600 CONTINUE
 590 CONTINUE
 DET = 1.0
 DO 610 I = 1, NN
 DET = DET * A(I,I)
 610 CONTINUE
 WRITE(*,80) DET
 DO 620 I = 1, NN
 WRITE(*,100) I, X(I)
 620 CONTINUE
 50 FORMAT(1X, 'A(',I2,',',I2,'): ')
 60 FORMAT(/10X,'SOLUCAO'/)
 65 FORMAT(/5X,'COEFICIENTES DA MATRIZ TRIANGULARIZADA'/)
 70 FORMAT(5X, 'A(',I2,',',I2,') = ',F12.7)
 80 FORMAT(1X/, 5X, 'DETERMINANTE DO SISTEMA = ', F12.7/)
 100 FORMAT(5X, 'X(',I2,') = ', F12.7)
 END
Linguagem C
/* Programa elimina.c */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NMAX 50
int i, j, k, l;
int neq, nmais, last, rev;
float a[NMAX][NMAX+1], x[NMAX+1];
float coef, big, term, temp, pivot, nextr, cnt, y;
void main()
{
printf("Numero de equacoes: ");
scanf("%d", &neq);
for(i = 1; i <= neq; i++) {
Sistemas de Equações Lineares 4 - 9
Cálculo Numérico e Computacional C.Y. Shigue
nmais = neq +1;
for (j = 1; j <= nmais; j++) {
printf("A( %d , %d ) = ", i, j);
scanf("%f", &coef);
a[i][j] = coef;
}
}
last = neq - 1;
for (i = 1; i <= last; i++) {
big = 0.f;
for (k = i; k <= neq; k++) {
term = fabs(a[k][i]);
if ((term - big) > 0.f) {
big = term;
l = k;
}
}
if (big == 0.f) {
printf("Matriz singular\n");
exit(0);
}
if (i != l) {
for (j = 1; j <= nmais; j++) {
temp = a[i][j];
a[i][j] = a[l][j];
a[l][j] = temp;
}
}
pivot = a[i][i];
nextr = i + 1;
for (j = nextr; j <= neq; j++) {
cnt = a[j][i] / pivot;
for (k = i; k <= nmais; k++) {
a[j][k] = a[j][k] - cnt*a[i][k];
}
}
}
for (i = 1; i <= neq; i++) {
rev = neq + 1 - i;
y = a[rev][nmais];
if (rev != neq) {
for (j = 2; j <= i; j++) {
k = neq + 2 - j;
y -= a[rev][k]*x[k];
}
}
x[rev] = y / a[rev][rev];
}
printf("\nMatriz triangularizada\n");
for (i = 1; i <= neq; i++) {
for (j = 1; j <= nmais; j++) {
printf("A( %d , %d ) = %f\n", i, j, a[i][j]);
}
}
printf("\nSolucao\n");
for (i = 1; i <= neq; i++) {
printf("X( %d ) = %f\n", i, x[i]);
}
}
Método Iterativo de Gauss-Seidel
Em sistemas com muitas equações simultâneas e, particularmente, em sistemas mal-
condicionados, a propagação do erro de arredondamento pode destruir a exatidão da solução.
Sistemas de Equações Lineares 4 -
10
Cálculo Numérico e Computacional C.Y. Shigue
Nestes casos podemos utilizar um método iterativo que, em geral, não seja muito sensível à
propagação de erros de arredondamento, desde que a solução seja convergente. Entre os
métodos iterativos de resolução de sistemas de equações, vamos abordar o método iterativo de
Gauss-Seidel, que é um dos métodos iterativos mais comuns e simples para ser programado em
computador. Como em todos os métodos iterativos, o erro de arredondamento é pequeno, mas
o método converge para a solução somente sob certas condições e normalmente conduz a um
número significativamente maior de operações aritméticas em comparação aos métodos de
resolução direta.
Seja o sistema de equações:
a11x1 + a12x2 + a13x3 + ... + a1nxn = b1
a21x1 + a22x2 + a23x3 + ... + a2nxn = b2
a31x1 + a32x2 + a33x3 + ... + a3nxn = b3
 � � � � �
a
n1x1 + an2x2 + an3x3 + ... + annxn = bn
onde os termos da diagonal a11, a22, ..., ann são todos supostos não nulos; se necessário, as
equações devem ser reordenadas para que todos estes termos sejam não nulos.
Encontramos o valor de x1 a partir da primeira equação, x2 a partir da segunda e assim
sucessivamente, para obtermos:
x1 = (b1 - a12x2 - a13x3 - ... - a1nxn)/a11 (42)
x2 = (b2 - a21x1 - a23x3 - ... - a2nxn)/a22 (43)
x3 = (b3 - a31x1 - a32x2 - ... - a3nxn)/a33 (44)� �
x
n
 = (b
n
 - a
n1x1 - an2x2 - ... - an,n-1xn-1)/ann (45)
A iteração é iniciada tomando-se um conjunto inicial de estimativas para todos os xi
(k)
,
onde k é o número da iteração. Tomamos o valor inicial de x2, x3, ..., xn para calcular o valor
de x1 na primeira equação acima. Com o valor de x1 calculado mais os valores iniciais de x3, x4,
..., x
n
 calcula-se o novo valor de x2 na segunda equação e assim sucessivamente até a n-ésima
equação, quando então obtemos o valor de x
n
 (e, anteriormente, os valores de x1, x2, ..., xn-1)
para a primeira iteração. Voltamos, então, para a primeira equação e calculamos novamente x1
e sucessivamente todos os xi na segunda iteração. Este procedimento prossegue até que haja
convergência, isto é, até que todos os valores de xi simultaneamente parem de variar. Deste
modo, este método exigirá provavelmente muitas iterações antes de obtermos uma exatidão
razoável. Além disto, na maioria das vezes pode não ocorrer convergência e os resultados se
afastarem de um valor constante e finito.
O problema da convergência deste método não é simples e é o principal empecilho ao
seu uso. Podemos empregar alguns critérios para se verificar quando é necessário parar a
iteração:
Sistemas de Equações Lineares 4 -
11
Cálculo Numérico e Computacional C.Y. Shigue
1. O número de iterações excedeu um valor máximo m pré-determinado;
2. As diferenças entre dois valores sucessivos de todos os xi são menores do que um valor
pré-determinado ε:
x1(k) - x1(k-1) < ε , x2(k) - x2(k-1) < ε , ... xn(k) - xn(k-1) < ε (46)
Exemplo:
Seja o sistema de duas equações:
2x + 3y = 4 (e1)
-x + y = 1 (e2)
Podemos escrever as seguintes equações para o cálculo iterativo de x e y:
x = (4 - 3y)/2 (e3)
y = (1 + x) (e4)
tomando-se os valores iniciais x = 0 e y = 0, calculamos os seguintes valores:
x(1) = [4 - 3y(0)]/2 = [4 - (3)(0)]/2 = 2
y(1) = [1 + x(1)] = (1 + 2) = 3
εx
(1)
 = x(1) - x(0) = 2 - 0 = 2
εy
(1)
 = y(1) - y(0) = 3 - 0 = 3
x(2) = [4 - 3y(1)]/2 = [4 - (3)(3)]/2 = -2,5
y(2) = [1 + x(2)] = (1 - 2,5) = -1,5
εx
(2)
 = x(2) - x(1) = -2,5 - 2 = 4,5
εy
(2)
 = y(2) - y(1) = -1,5 - 3 = 4,5
x(3) = [4 - 3y(2)]/2 = [4 - (3)(-1,5)]/2 = 4,25
y(3) = [1 + x(3)] = (1 + 4,25) = 5,25
εx
(3)
 = x(3) - x(2) = 4,25 - (-2,5) = 6,75
εy
(3)
 = y(3) - y(2) = 5,25 - (-1,5) = 6,75
Montamos a tabela contendo alguns dos valores calculados:
Sistemas de Equações Lineares 4 -
12
Cálculo Numérico e Computacional C.Y. Shigue
Iteração x εx y εy
0
1
2
3
4
5
0
2
-2,5
4,25
-5,875
9,3125
2
4,5
6,75
10,125
15,1875
0
3
-1,5
5,25
-4,875
10,3125
3
4,5
6,75
10,125
15,1875
Observamos, dos dados da tabela, que o método iterativo de Gauss-Seidel aplicado ao
sistema de duas equações diverge, pois os valores de erro εx e εy aumentam a cada iteração.
Vamos agora inverter as duas equações para obter as equações do cálculo iterativo,
isto é, a equação para o cálculo de x será a (2), enquanto a equação para y será a (1):
x = (y - 1) (e5)
y = (4 - 2x)/3 (e6)
Montamos a tabela contendo alguns dos valores calculados:
Iteração x y εx εy
0
1
2
3
4
5
6
7
0
-1
1
-0,33333
0,55556
-0,03704
0,35803
0,09465
0
2
0,66667
1,55556
0,96296
1,35803
1,09465
1,27023
1
2
1,33333
0,88889
0,59260
0,39507
0,26338
2
1,33333
0,88889
0,59260
0,39507
0,26338
0,17558
A convergência é obtida após 41 iterações: x = 0,2 e y = 1,2 com erro de 10
-5
.
O problema da convergência para este exemplo pode ser ilustrado na Fig. 1, onde são
mostrados os gráficos para as equações (e1) e (e2). As linhas tracejadas e pontilhadas indicam,
respectivamente, as iterações divergentes, dada pelas equações (e3) e (e4), e as iterações
convergentes dada pelas equações (e5) e (e6).
Sistemas de Equações Lineares 4 -
13
Cálculo Numérico e Computacional C.Y. Shigue
-3 -2 -1 0 1 2 3
-2
-1
0
1
2
3
4
(2)
(1)
y
x
Fig.1 Representação gráfica do Método de Gauss-Seidel.
Como visto no exemplo, a convergência das iterações depende da ordem como as
equações estão escritas. Genericamente, para um sistema com n = 2, podemos escrever:
a11x1 + a12x2 = b1 (47)
a21x1 + a22x2 = b2 (48)
de onde vem que,
x1
(k)
 = [b1 - a12x2
(k-1)]/a11 (49)
x2
(k)
 = [b2 - a21x1
(k)]/a22 (50)
Se definirmos:
∆x1
(k)
 = x1 - x1
(k) (51)
∆x2
(k)
 = x2 - x2
(k) (52)
Então, a partir de (49) e (51) vem que:
∆x1
(k)
 = - a12/a11.∆x2
(k-1) (53)
e, de (50) e (52):
Sistemas de Equações Lineares 4 -
14
Cálculo Numérico e Computacional C.Y. Shigue
∆x2
(k)
 = - a21/a22.∆x1
(k) (54)
Combinando estas duas equações, resulta:
∆x1
(k)
 = a12a21/(a11a22).∆x1
(k-1) (55)
Igualmente, pode-se escrever que
∆x1
(k)
 = [a12a21/(a11a22)]
2
 ∆x1
(k-2) (56)
Prosseguindo desta maneira, resulta:
∆x1
(k)
 = [a12a21/(a11a22)]
k
 ∆x1
(0) (57)
Analogamente, para a outra variável,
∆x2
(k)
 = [a12a21/(a11a22)]
k
 ∆x2
(0) (58)
Assim, se
a12a21/a11a22 < 1 (59)
o método iterativo de Gauss-Seidel converge para uma solução de (47) e (48).
Pode-se satisfazer (59), se
a11 > a12 (60)
e
a22 ≥ a21 (61)
ou se
a11 ≥ a12 (62)
e
a22 > a21 (63)
Isto significa que os termos da diagonal a11 e a22 devem ser dominantes, isto é, eles devem ser
pelo menos tão grandes quanto os termos fora da diagonal e realmente maiores em pelo menos
um caso.
Para um sistema de n equações podemos mencionar um teorema simples que fornece
condições suficientes, mas não necessárias, para que haja convergência:
Teorema da convergência do método iterativo de Gauss-Seidel: A iteração do método de
Gauss-Seidel convergirá se, no determinante característico, cada termo da diagonal
Sistemas de Equações Lineares 4 -
15
Cálculo Numérico e Computacional C.Y. Shigue
principal for maior (em valor absoluto) do que a soma dos valores absolutos de todos os
outros termos na mesma linha ou coluna. Isto é, teremos garantido a convergência se,
a a i nii ij
j
j i
n
> =
=
≠
∑
1
1 2, , ... , (64)
e
a a i nii ji
j
j i
n
> =
=
≠
∑
1
1 2, , ... , (65)
O teorema não é muito útil a não ser que, de alguma maneira, possamos reordenar as
equações a fim de satisfazerem o teorema tão bem quanto possível e, geralmente, isto não é
tarefa simples. Pode ser necessário rearranjar de várias formas um sistema de equações até
encontrarmos, através do cálculo iterativo, um arranjo que se aproxime das condições do
teorema.
Exemplo:
Seja o seguinte sistema de equações:
-x1 + 3x2 + 5x3 + 2x4 = 10
 x1 + 9x2 + 8x3 + 4x4 = 15
 x2 + x4 = 2
2x1 + x2 + x3 - x4 = -3
Se re-ordenarmos as equações de modo a satisfazer da melhor forma o teorema da
convergência, obteremos o seguinte sistema de equações:
2x1 + x2 + x3 - x4 = -3
 x1 + 9x2 + 8x3 + 4x4 = 15
-x1 + 3x2 + 5x3 + 2x4 = 10
 x2 + x4 = 2
de onde vem as equações para o cálculo iterativo de xi (i = 1, 2, 3 e 4):
x1 = (-3 - x2 - x3 + x4)/2
x2 = (15 - x1 - 8x3 - 4x4)/9
x3 = (10 + x1 - 3x2 - 2x4)/5
x4 = ( 2 - x2) .
cuja solução, obtida após 78 iterações com cálculo em precisão simples é:
Sistemas de Equações Lineares 4 -
16
Cálculo Numérico e Computacional C.Y. Shigue
x1 = -1; x2 = 0; x3 = 1 e x4 = 2
Observamos para este exemplo que o método iterativo de Gauss-Seidel apresenta uma
precisão superior ao método de eliminação gaussiana. Entretanto, o número de iterações é
relativamente alto (78 neste caso) e este número cresce substancialmente com oaumento do
número de equações. Esta limitação atualmente não restringe a aplicação do método iterativo
de Gauss-Seidel, devido à elevada capacidade de processamento dos microcomputadores
atuais. Usualmente, o método de eliminação gaussiana é usado numa etapa preliminar para
obter os valores iniciais do método de Gauss-Seidel que, então, faz o refinamento da solução.
Listagens dos programas do método iterativo de Gauss-Seidel
Os seguintes programas em FORTRAN e C realizam 80 iterações, definida pela
variável MAX, bastando alterá-la para aumentar (ou diminuir) o número de iterações.
FORTRAN
C PROGRAMA PARA O CALCULO ITERATIVO DE UM SISTEMA DE EQUACOES
C METODO DE GAUSS-SEIDEL
 PROGRAM GSEIDEL
 MAX = 80
 X1 = 0.0
 X2 = 0.0
 X3 = 0.0
 X4 = 0.0
 DO 10 I = 1, MAX
 X1 = (-3.0 - X2 - X3 + X4)/2.0
 X2 = (15.0 - X1 - 8.0*X3 - 4.0*X4)/9.0
 X3 = (10.0 + X1 - 3.0*X2 - 2.0*X4)/5.0
 X4 = (2.0 - X2)
 10 CONTINUE
 WRITE(*,100) X1,X2,X3,X4
 100 FORMAT(4F10.6)
 END
Linguagem C
/*
 Programa gseidel.c
*/
#include <stdio.h>
#define MAX 80
void main()
{
 int i;
 float x1, x2, x3, x4;
 x1 = 0.0;
 x2 = 0.0;
 x3 = 0.0;
 x4 = 0.0;
 for (i = 1; i <= MAX; i++) {
x1 = (-3.0 - x2 - x3 + x4) / 2.0;
x2 = (15.0 - x1 - x3 * 8.0 - x4 * 4.0) / 9.0;
x3 = (x1 + 10.0 - x2 * 3.0 - x4 * 2.0) / 5.0;
x4 = 2.0 - x2;
 printf("x1 = %10.6f x2 = %10.6f x3 = %10.6f X4 = %10.6f\n",x1,x2,x3,x4);
 }
}

Outros materiais