Você está na página 1de 16

Sistemas de Equaes Lineares

4-1

Sistemas de Equaes Lineares


Definio
Um sistema de equaes lineares pode ser definido como um conjunto de n equaes com n variveis independentes entre si, na forma genrica, como: a11x1 + a12x2 + a13x3 + ... + a1nxn = b1 a21x1 + a22x2 + a23x3 + ... + a2nxn = b2 a31x1 + a32x2 + a33x3 + ... + a3nxn = b3 an1x1 + an2x2 + an3x3 + ... + annxn = bn na qual aij (i, j = 1, 2, 3, ..., n) so os coeficientes do sistema de equaes, xi (i = 1, 2, 3, ..., n) so as n incgnitas e bi (i = 1, 2, 3, ..., n) os termos independentes.

(1)

Formulao Matricial
As equaes representadas em (1) podem ser descritas na forma matricial como: [A][x] = [b] para o qual:

(2)

a n3

Nesta representao, a soluo direta pode ser obtida fazendo-se: [x] = [A]-1[b] (4)

para a qual emprega-se os mtodos de inverso de matrizes utilizados em cursos de lgebra Linear. O clculo da matriz inversa pode ser feito atravs da propriedade da matriz identidade: [I] = [A]-1[A] (5)

Se os coeficientes da matriz inversa [A]-1 so as incgnitas do problema, ento o clculo desses coeficientes resume-se a encontrar a soluo do seguinte sistema de equaes:
Clculo Numrico e Computacional C.Y. Shigue

a11 a12 a 21 a 22 [A] = a 31 a 32 a n1 a n 2


a13 a 23 a 33

a1n x1 b1 x b a 2n 2 2 , [x ] = x 3 , [b] = b 3 a 3n x n b n a nn

(3)

Sistemas de Equaes Lineares

4-2

Assim, o problema do clculo de sistemas de equaes lineares atravs do produto da matriz inversa resulta num problema de clculo de sistemas de equaes lineares. seguir, apresentaremos um mtodo direto para a soluo de sistemas de equaes lineares denominado mtodo de eliminao gaussiana e outro mtodo, iterativo, chamado mtodo de Gauss-Seidel. Alm desses mtodos, inmeros outros apropriados para cada tipo de sistema de equaes lineares existem, mas que no trataremos neste texto.

Mtodo da Eliminao Gaussiana


Considere o sistema de equaes representado matricialmente por [A][x] = [b]. O Mtodo da Eliminao de Gauss consiste basicamente em transformar a matriz de A num sistema triangular equivalente, atravs da aplicao repetida de dois tipos de operaes: 1. Permutao entre duas linhas; 2. Subtrao de uma linha por outra multiplicada por uma constante. Essas operaes produzem sistemas equivalentes aos originais; enquanto a operao 2 no altera o determinante da matriz de coeficientes, a operao 1 apenas inverte o seu sinal. A anlise de propagao de erros de arredondamento indica a convenincia de todos os multiplicadores serem menores do que 1 em valor absoluto. A esse procedimento d-se o nome de pivoteamento. Descrio do algoritmo com pivoteamento Vamos considerar um sistema constitudo de quatro equaes e quatro incgnitas: 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:

Clculo Numrico e Computacional

x n2

a n2

x 11 x 1 [A ] [A ] = 21 x n1

x 12 x 22

x 1n a 11 x 2 n a 21 x nn a n1

a 12 a 22

a 1n 1 0 a 2 n 0 1 = a nn 0 0

0 0 = [I ] 1

(6)

C.Y. Shigue

Sistemas de Equaes Lineares

4-3

a11 a12 a a [A] = 21 22 a 31 a 32 a 41 a 42

a 13 a 23 a 33 a 43

a 14 x1 b1 x b a 24 , [x] = 2 , [b] = 2 x3 b3 a 34 a 44 x4 b4 a 13 a 14 a 23 a 24 a 33 a 34 a 43 a 44 b1 b2 b3 b4

a11 a 12 a a [A]+ = 21 22 a 31 a 32 a 41 a 42

(7)

Os seguintes passos descrevem o procedimento para a triangularizao da matriz [A]: 1o Passo: Calcular p1 = mx{|a11|, |a21|, |a31|, |a41|}. Certamente p1 0, pois caso contrrio |A| = 0 e o sistema no teria soluo nica. Caso p1 |a11|, permutar a 1a linha pela linha que contm p1. 2o Passo: Definir um multiplicador para cada linha:
a a a m 2 = 21 , m 3 = 31 , m 4 = 41 a11 a11 a11

(8)

3o Passo: Subtrair o produto do multiplicador pela 1a linha da 2a, da 3a e da 4a linha: 2a Linha


a a = a 21 m2 a 11 = a 21 21 a11 = 0 21 a11 a = a 22 m 2 a12 22 a = a 23 m2 a 13 23 a = a 24 m 2 a14 24 b = b 2 m 2 b1 2

(9) (10) (11) (12) (13) (14) (15) (16) (17)

3a Linha:
a a = a 31 m3a11 = a 31 31 a 11 = 0 31 a 11 a = a 32 m 3a12 32 a = a 33 m3a 13 33 a = a 34 m 3a14 34

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

4-4

b = b 3 m3 b1 3

(18)

4a Linha:
a a = a 41 m4 a 11 = a 41 41 a11 = 0 41 a11 a = a 42 m 4 a12 42 a = a 43 m4 a 13 43 a = a 44 m 4 a14 44 b = b 4 m 4 b1 4

(19) (20) (21) (22) (23)

Aps estes passos, a matriz aumentada fica da seguinte foma:


a11 a12 0 a 22 [A]+ = 0 a 32 0 a 42 a 13 a 14 a 23 a 24 a a 33 34 a a 43 44 b1 b 2 b 3 b 4

Repetindo os passos de 1 a 3 para a coluna 2: 1o Passo: Calcular p2 = mx { a , a , a } . Novamente p2 0, seno |A| = 0. Caso p2 |a21|, permutar 22 32 42 a 2a linha pela linha que contm p2. 2o Passo: Definir um multiplicador para cada linha:
a a m = 32 , m = 42 3 4 a a 22 22

(24)

3o Passo: Subtrair o produto do multiplicador pela 2a linha da 3a e da 4a linha: 3a Linha:


a a = a m a = a 32 a = 0 32 32 3 22 32 22 a 22 a = a m a 33 33 3 23 a = a m a 34 34 3 24 b = b m b 3 3 3 2

(25) (26) (27) (28)

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

4-5

4a Linha:

a a = a m a = a 42 a = 0 42 42 4 22 42 22 a 22 a = a m a 43 43 4 23 a = a m a 24 44 44 4 b = b m b 4 4 4 2

(29) (30) (31) (32)

A matriz aumentada agora tem a forma:


a11 a12 + = 0 a 22 [A] 0 0 0 0 a 13 a 14 a 23 a 24 a a 33 34 a a 43 44 b1 b2 b 3 b 4

(33)

Repetindo os passos 1 a 3 para as duas ltimas linhas: 1o Passo: Calcular p3 = mx { a , a } . Novamente p3 0, seno |A| = 0. Caso p3 |a31|, permutar a 3a 33 43 linha pela 4a linha. 2o Passo: Definir um multiplicador para a 4a linha:
a m = 43 4 a 33

(34)

3o Passo: Subtrair o produto do multiplicador pela 3a linha da 4a linha: 4a Linha:

a a = a m a = a 43 a = 0 43 43 4 33 43 33 a 33 a = a m a 34 44 44 4 b = b m b 4 4 4 3

(35) (36) (37)

A matriz aumentada toma a forma final:


a11 a12 0 a 22 [A]+ = 0 0 0 0 a 13 a 14 a 23 a 24 a a 33 34 0 a 44 b1 b 2 b 3 b 4

(38)

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

4-6

Re-escrevendo a matriz [A]+ triangularizada sem as linhas nos expoentes dos coeficientes aij e bj de modo a tornar mais clara as equaes:
a11 a12 0 a 22 [A]+ = 0 0 0 0 a 13 a 14 a 23 a 24 a 33 a 34 0 a 44 b1 b2 b3 b4

(39)

observando que os coeficientes aij e bj da matriz triangularizada acima no so os mesmos coeficientes da matriz [A]+ original. Resolvemos o sistema por recorrncia atravs da frmula:
4 bi a ij x j j= i +1 xi = , i = 4,3,2,1 a ii

(40)

O determinante da matriz de coeficientes [A] calculado a partir do produto dos coeficientes aii da diagonal principal: |A| = a ii = a11a 22 a 33a 44
i =1 4

(41)

Exemplo:
Seja o sistema de trs equaes e trs incgnitas:
2x1 + 3x2 -x1 + x3 = 0

x2 + 4x3 = 3 x3 = 1

x1 8x2 -

cuja matriz aumentada [A]+ descrita como: 3 1 0 2 1 1 [A]+ = 4 3 1 8 1 1 Utilizando o programa de clculo de eliminao gaussiana em preciso simples (com arredondamento de sete casas decimais), cuja listagem aparece adiante neste texto, obtm-se a matriz triangularizada:

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

4-7

3 1 2 0 [A] = 9 ,5 0,5 0 0,0000001 3,3684211 cujo determinante vale |A| = -64,0000009. A soluo do sistema calculada pelo mesmo programa resulta: 0 ,718750 [x] = 0,156250 0,968750 Observar que a soluo do problema exata, exceto pelo valor do determinante da matriz [A], cuja soluo exatamente 64. O algarismo 9 na stima casa decimal resultado do erro de arredondamento pelo clculo das variveis reais com preciso simples. Neste problema simples o erro de arredondamento no afetou o vetor soluo [x] do sistema, porm em problemas que envolvam um nmero maior de equaes ou em problemas cujos coeficientes da matriz [A] j possuam erro de arredondamento na sua formulao, acarretam em severo erro de arredondamento, inviabilizando a utilizao do mtodo de clculo direto de eliminao gaussiana. Nestes tipos de problema, um mtodo iterativo, como o mtodo de Gauss-Seidel apresentado a seguir, mais aconselhvel.

Listagens dos programas de eliminao gaussiana com pivoteamento


FORTRAN
PROGRAM ELIMINA PARAMETER (NMAX = 50) REAL A(NMAX,NMAX+1), X(NMAX+1) WRITE(*,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) CONTINUE 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 CONTINUE IF (BIG. EQ. 0.0) THEN WRITE(*,*) 'MATRIZ SINGULAR' STOP END IF IF (I .NE. L) THEN DO 540 J = 1, NN+1

10

510 500

530

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

4-8

540

560 550 520

580 570

600 590

610

620 50 60 65 70 80 100

TEMP = A(I,J) A(I,J) = A(L,J) A(L,J) = TEMP 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) CONTINUE CONTINUE 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) CONTINUE END IF X(IREV) = Y / A(IREV,IREV) CONTINUE WRITE(*,60) WRITE(*,65) DO 590 I = 1, NN DO 600 J = 1, NN+1 WRITE(*,70) I, J, A(I,J) CONTINUE CONTINUE DET = 1.0 DO 610 I = 1, NN DET = DET * A(I,I) CONTINUE WRITE(*,80) DET DO 620 I = 1, NN WRITE(*,100) I, X(I) CONTINUE FORMAT(1X, 'A(',I2,',',I2,'): ') FORMAT(/10X,'SOLUCAO'/) FORMAT(/5X,'COEFICIENTES DA MATRIZ TRIANGULARIZADA'/) FORMAT(5X, 'A(',I2,',',I2,') = ',F12.7) FORMAT(1X/, 5X, 'DETERMINANTE DO SISTEMA = ', F12.7/) 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 int float float i, j, k, l; neq, nmais, last, rev; a[NMAX][NMAX+1], x[NMAX+1]; coef, big, term, temp, pivot, nextr, cnt, y;

void main() { printf("Numero de equacoes: "); scanf("%d", &neq); for(i = 1; i <= neq; i++) {

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

4-9

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]); } }

Mtodo Iterativo de Gauss-Seidel


Em sistemas com muitas equaes simultneas e, particularmente, em sistemas malcondicionados, a propagao do erro de arredondamento pode destruir a exatido da soluo.

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

410

Nestes casos podemos utilizar um mtodo iterativo que, em geral, no seja muito sensvel propagao de erros de arredondamento, desde que a soluo seja convergente. Entre os mtodos iterativos de resoluo de sistemas de equaes, vamos abordar o mtodo iterativo de Gauss-Seidel, que um dos mtodos iterativos mais comuns e simples para ser programado em computador. Como em todos os mtodos iterativos, o erro de arredondamento pequeno, mas o mtodo converge para a soluo somente sob certas condies e normalmente conduz a um nmero significativamente maior de operaes aritmticas em comparao aos mtodos de resoluo direta. Seja o sistema de equaes: a11x1 + a12x2 + a13x3 + ... + a1nxn = b1 a21x1 + a22x2 + a23x3 + ... + a2nxn = b2 a31x1 + a32x2 + a33x3 + ... + a3nxn = b3 an1x1 + an2x2 + an3x3 + ... + annxn = bn onde os termos da diagonal a11, a22, ..., ann so todos supostos no nulos; se necessrio, as equaes devem ser reordenadas para que todos estes termos sejam no nulos. Encontramos o valor de x1 a partir da primeira equao, x2 a partir da segunda e assim sucessivamente, para obtermos: x1 = (b1 - a12x2 - a13x3 - ... - a1nxn)/a11 x2 = (b2 - a21x1 - a23x3 - ... - a2nxn)/a22 x3 = (b3 - a31x1 - a32x2 - ... - a3nxn)/a33 xn = (bn - an1x1 - an2x2 - ... - an,n-1xn-1)/ann

(42) (43) (44) (45)


(k)

A iterao iniciada tomando-se um conjunto inicial de estimativas para todos os xi , onde k o nmero da iterao. Tomamos o valor inicial de x2, x3, ..., xn para calcular o valor de x1 na primeira equao acima. Com o valor de x1 calculado mais os valores iniciais de x3, x4, ..., xn calcula-se o novo valor de x2 na segunda equao e assim sucessivamente at a n-sima equao, quando ento obtemos o valor de xn (e, anteriormente, os valores de x1, x2, ..., xn-1) para a primeira iterao. Voltamos, ento, para a primeira equao e calculamos novamente x1 e sucessivamente todos os xi na segunda iterao. Este procedimento prossegue at que haja convergncia, isto , at que todos os valores de xi simultaneamente parem de variar. Deste modo, este mtodo exigir provavelmente muitas iteraes antes de obtermos uma exatido razovel. Alm disto, na maioria das vezes pode no ocorrer convergncia e os resultados se afastarem de um valor constante e finito. O problema da convergncia deste mtodo no simples e o principal empecilho ao seu uso. Podemos empregar alguns critrios para se verificar quando necessrio parar a iterao:

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

411

1. 2.

O nmero de iteraes excedeu um valor mximo m pr-determinado; As diferenas entre dois valores sucessivos de todos os xi so menores do que um valor pr-determinado : x1 - x1
(k) (k-1)

< , x2 - x2

(k)

(k-1)

< , ... xn - xn

(k)

(k-1)

<

(46)

Exemplo:
Seja o sistema de duas equaes:
2x + 3y = 4 -x + y = 1 (e1) (e2)

Podemos escrever as seguintes equaes para o clculo iterativo de x e y:


x = (4 - 3y)/2 y = (1 + x) (e3) (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:

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

412

Iterao 0 1 2 3 4 5

x 0 2 -2,5 4,25 -5,875 9,3125

x 2 4,5 6,75 10,125 15,1875

y 0 3 -1,5 5,25 -4,875 10,3125

y 3 4,5 6,75 10,125 15,1875

Observamos, dos dados da tabela, que o mtodo iterativo de Gauss-Seidel aplicado ao sistema de duas equaes diverge, pois os valores de erro x e y aumentam a cada iterao. Vamos agora inverter as duas equaes para obter as equaes do clculo iterativo, isto , a equao para o clculo de x ser a (2), enquanto a equao para y ser a (1):
x = (y - 1) y = (4 - 2x)/3 (e5) (e6)

Montamos a tabela contendo alguns dos valores calculados:


Iterao 0 1 2 3 4 5 6 7 x 0 -1 1 -0,33333 0,55556 -0,03704 0,35803 0,09465 y 0 2 0,66667 1,55556 0,96296 1,35803 1,09465 1,27023 x 1 2 1,33333 0,88889 0,59260 0,39507 0,26338 y 2 1,33333 0,88889 0,59260 0,39507 0,26338 0,17558
-5

A convergncia obtida aps 41 iteraes: x = 0,2 e y = 1,2 com erro de 10 . O problema da convergncia para este exemplo pode ser ilustrado na Fig. 1, onde so mostrados os grficos para as equaes (e1) e (e2). As linhas tracejadas e pontilhadas indicam, respectivamente, as iteraes divergentes, dada pelas equaes (e3) e (e4), e as iteraes convergentes dada pelas equaes (e5) e (e6).

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

413

(1)
3

(2)
-1

-2

-3

-2

-1

Fig.1 Representao grfica do Mtodo de Gauss-Seidel.

Como visto no exemplo, a convergncia das iteraes depende da ordem como as equaes esto escritas. Genericamente, para um sistema com n = 2, podemos escrever: a11x1 + a12x2 = b1 a21x1 + a22x2 = b2 de onde vem que, x1 x2 Se definirmos: x1 x2 Ento, a partir de (49) e (51) vem que: x1 e, de (50) e (52):
Clculo Numrico e Computacional C.Y. Shigue
(k) (k) (k) (k) (k)

(47) (48)

= [b1 - a12x2

(k-1) (k)

]/a11

(49) (50)

= [b2 - a21x1 ]/a22

= x1 - x1 = x2 - x2

(k) (k)

(51) (52)

= - a12/a11.x2

(k-1)

(53)

Sistemas de Equaes Lineares

414

x2 Combinando estas duas equaes, resulta: x1 Igualmente, pode-se escrever que x1 Prosseguindo desta maneira, resulta: x1 Analogamente, para a outra varivel, x2 Assim, se

(k)

= - a21/a22.x1

(k)

(54)

(k)

= a12a21/(a11a22).x1

(k-1)

(55)

(k)

= [a12a21/(a11a22)] x1

(k-2)

(56)

(k)

= [a12a21/(a11a22)] x1

(0)

(57)

(k)

= [a12a21/(a11a22)] x2

(0)

(58)

a12a21/a11a22 < 1 o mtodo iterativo de Gauss-Seidel converge para uma soluo de (47) e (48). Pode-se satisfazer (59), se a11 > a12 e a22 a21 ou se a11 a12 e a22 > a21

(59)

(60) (61)

(62) (63)

Isto significa que os termos da diagonal a11 e a22 devem ser dominantes, isto , eles devem ser pelo menos to grandes quanto os termos fora da diagonal e realmente maiores em pelo menos um caso. Para um sistema de n equaes podemos mencionar um teorema simples que fornece condies suficientes, mas no necessrias, para que haja convergncia: Teorema da convergncia do mtodo iterativo de Gauss-Seidel: A iterao do mtodo de Gauss-Seidel convergir se, no determinante caracterstico, cada termo da diagonal

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

415

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 convergncia se,
a ii >

j= 1 j i n

a ij

i = 1, 2, ... , n

(64)

e
a ii >

j= 1 j i

a ji

i = 1, 2, ... , n

(65)

O teorema no muito til a no ser que, de alguma maneira, possamos reordenar as equaes a fim de satisfazerem o teorema to bem quanto possvel e, geralmente, isto no tarefa simples. Pode ser necessrio rearranjar de vrias formas um sistema de equaes at encontrarmos, atravs do clculo iterativo, um arranjo que se aproxime das condies do teorema.

Exemplo:
Seja o seguinte sistema de equaes:
-x1 + 3x2 + 5x3 + 2x4 x1 + 9x2 + 8x3 + 4x4 x2 + x4 2x1 + x2 + x3 - x4 = = = = 10 15 2 -3

Se re-ordenarmos as equaes de modo a satisfazer da melhor forma o teorema da convergncia, obteremos o seguinte sistema de equaes:
2x1 + x2 + x3 x1 + 9x2 + 8x3 -x1 + 3x2 + 5x3 x2 x4 + 4x4 + 2x4 + x4 = = = = -3 15 10 2

de onde vem as equaes para o clculo iterativo de xi (i = 1, 2, 3 e 4):


x1 x2 x3 x4 = = = = (-3 - x2 - x3 + x4)/2 (15 - x1 - 8x3 - 4x4)/9 (10 + x1 - 3x2 - 2x4)/5 ( 2 - x2) .

cuja soluo, obtida aps 78 iteraes com clculo em preciso simples :

Clculo Numrico e Computacional

C.Y. Shigue

Sistemas de Equaes Lineares

416

x1 = -1; x2 = 0; x3 = 1 e x4 = 2

Observamos para este exemplo que o mtodo iterativo de Gauss-Seidel apresenta uma preciso superior ao mtodo de eliminao gaussiana. Entretanto, o nmero de iteraes relativamente alto (78 neste caso) e este nmero cresce substancialmente com o aumento do nmero de equaes. Esta limitao atualmente no restringe a aplicao do mtodo iterativo de Gauss-Seidel, devido elevada capacidade de processamento dos microcomputadores atuais. Usualmente, o mtodo de eliminao gaussiana usado numa etapa preliminar para obter os valores iniciais do mtodo de Gauss-Seidel que, ento, faz o refinamento da soluo.

Listagens dos programas do mtodo iterativo de Gauss-Seidel


Os seguintes programas em FORTRAN e C realizam 80 iteraes, definida pela varivel MAX, bastando alter-la para aumentar (ou diminuir) o nmero de iteraes. FORTRAN
C C PROGRAMA PARA O CALCULO ITERATIVO DE UM SISTEMA DE EQUACOES 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) CONTINUE WRITE(*,100) X1,X2,X3,X4 FORMAT(4F10.6) END

10 100

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); } }

Clculo Numrico e Computacional

C.Y. Shigue

Você também pode gostar