Baixe o app para aproveitar ainda mais
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); } }
Compartilhar