INVERSÃO DE MATRIZES Para o cálculo da inversa de uma dada matriz [A] quadrada, temos de relembrar que a sua matriz inversa, [A]-1 (tambem quadrada), deverá respeitar a seguinte condição: [A][A]-1=[A]-1[A]=[I] (1) sendo [I] a matriz identidade. Um dos métodos é o da aplicação da eliminação de Gauss-Jordan à matriz aumentada constituída pela matriz de coeficientes e pela matriz identidade, ou seja, se a matriz dos coeficientes for: 7 2 −3 [A] = 2 5 −3 ⇒ a matriz aumentada será 1 −1 −6 7 2 −3¦1 0 0 2 5 −3¦0 1 0 1 −1 −6¦0 0 1 e por aplicação da eliminação ascendente e descendente chegamos a: −0, 078125 −0, 046875 1 0 0¦ 0,17188 0 1 0¦ −0, 046875 0, 203125 −0, 078125 0 0 1¦0, 0364583 −0, 046875 −0,161458 sendo a matriz à direita a inversa da matriz original. Com a ajuda de uma máquina de calcular podemos verificar a condição (1) acima descrita; 0 0 1 [A][A] = 0 1 0 . −1E-12 0 1 -1 Neste caso o resultado é bastante próximo da identidade e demonstra que a utilização de muitos algarismos significativos é, em alguns casos, necessária para chegar a uma solução que realmente satisfaça as condições do problema. Em computação, a inversa pode ser calculada gerando várias soluções para a equação [A]{x}={b} (2), usando para valores de {b} as colunas da matriz identidade como vectores unitários, isto é, se o vector unitário for,{b} = [1 0 0] T a solução de (2) será a primeira coluna da matriz inversa. Do mesmo modo, se ,{b} = [ 0 1 0] T a solução de (2) é a segunda coluna de [A]-1, e assim por diante. Para implementar este método podemos recorrer ao algoritmo da decomposição LU, pois uma das suas vantagens é a de, eficientemente, servir como meio de avaliação de vários vectores {b} para a equação (2). Exemplo João Minas FAC (DFUC) - 2001/2002 1/5 Utilizando a decomposição LU,determine a matriz inversa para a seguinte matriz: 3 −0,1 −0, 2 [A] = 0,1 7 −0,3 . 0,3 −0, 2 10 Por aplicação da decomposição obtemos, −0,1 −0, 2 3 [U] = 0 7, 00333 −0, 293333 0 0 10, 0120 e 1 0 0 [L] = 0, 0333333 1 0 . 0,1 −0, 0271300 1 Para determinar a primeira coluna de [A]-1, substituímos {b} pela primeira coluna de [I]. Deste modo encontramos o vector auxiliar {d} por substituição descendente, pois o sistema [L]{d} = {b} (2) é triangular inferior, com 1’s na diagonal principal; assim se obtém, 1 {d} = −0, 03333 . −0,1001 Agora podemos usar este vector auxiliar para resolver o sistema [U]{x} = {d}, que por substituição ascendente permite chegar ao seguinte resultado: 0,33249 {x} = −0, 00518 . −0, 01008 Repetindo este processo para as restantes colunas de [I] determinamos a matriz inversa de [A], ou seja; 0,33249 0, 004944 0, 006798 -1 [A] = −0, 00518 0,142903 0, 004183 . −0, 01008 0, 00271 0, 09988 Tentando novamente verificar (1), usando o Excel: 1 -1.73472E-18 1.38778E-17 , 1 0 [A][A] = 2.1684E-18 -3.46945E-18 0 1 -1 observamos que o resultado, ainda que bastante próximo do esperado, apresenta erros resultantes da manipulação dos coeficientes de cada matriz. Novamente, como no caso de exemplo anterior, reflecte-se a necessidade de utilizar alguns algarismos significativos para encontrar uma solução realmente válida para o problema em vista. Um pseudocódigo para gerar a matriz inversa poderá ser: João Minas FAC (DFUC) - 2001/2002 2/5 SUB Ludecomp(a,b,n,tol,x,er) DIM on, sn Er = 0 CALL Decompose(a,n,tol,o,s,er) IF er <> -1 THEN CALL Substitute(a,o,n,b,x) END IF END Ludecomp SUB Decompose(a,n,tol,o,s,er) DO i = 1,n oi = i si = ABS(ai,1) DO j = 2,n IF ABS(ai,j) > si THEN si = ABS(ai,j) END DO END DO DO k = 1,n-1 CALL Pivot(a,o,s,n,k) IF ABS(ao(k),k / so(k)) < tol THEN er = -1 PRINT ao(k),k / so(k) EXIT DO END IF DO i = k+1,n Factor = ao(i)k / ao(k),k ao(i),k = factor DO j = k + 1,n ao(i),j = ao(i),j – factor * ao(k),j END DO END DO END DO IF ABS(ao(k),k / so(k)) < tol THEN Er = -1 PRINT ao(k),k / so(k) END IF END Decompose SUB Pivot(a,o,s,n,k) p = k big = ABS(ao(k),k / so(k)) DO ii = k + 1,n Dummy = ABS(ao(ii),k / so(ii)) IF dummy > big THEN big = dummy p = ii END IF END DO dummy = op op = ok ok = dummy END Pivot SUB Substitute(a,o,n,b,x) DO i =2,n sum = bo(i) DO j =1, i - 1 sum = sum - ao(i),j * bo(j) END DO bo(i) = sum END DO João Minas FAC (DFUC) - 2001/2002 3/5 xn = bo(n) / ao(n),n DO i = n – 1, 1, - 1 sum = 0 DO j = i + 1, n sum = sum + ao(i)j * xj END DO xi = (bo(i) – sum) / ao(i),j END DO END Substitute (as subrotinas Decompose e Substitute podem ser analisadas com maior detalhe na bibliografia). O esforço, em número de operações, necessário para este algoritmo pode ser visto como: n3 n 4n 3 n - + n n2 = 3 3 3 3 ( ) onde n representa o número de operações para completar a eliminação. A primeira parcela representa o esforço para a decomposição LU e a segunda representa o esforço para a substituição (cada substituição nos vectores unitários envolve n2 operações de multiplicar/dividir com virgula flutuante). Este método é mais eficiente que o método da eliminação de Gauss-Jordan porque o passo de eliminação deste último requere 50% mais operacoes. Para além das aplicações em engenharia, a inversa pode indicar se um dado sistema de equações é ou não mal-condicionado. Para este propósito existem três métodos: Factorizam-se os elementos de [A], de modo a que o maior elemento em cada linha seja 1. Inverte-se esta última matriz e se os elementos dessa matriz inversa, forem superiores a 1 por várias ordens de grandeza, é muito provável que o sistema seja mal-condicionado. Multiplicar a matriz inversa pela sua original, ou seja, [A][A]-1 e verificar se a matriz resultante é proxima de [I]. Se isso não acontecer o sistema é malcondicionado. Inverter a matriz inversa e verificar se a matriz resultante é suficientemente próxima da matriz original. Se não acontecer o sistema é mal-condicionado. • A - Sistemas de equações mal-condicionados A solução de um dado sistema depende das condições do mesmo. Sistemas bem-condicionados são aqueles onde uma pequena alteração em um ou mais coeficientes resulta numa pequena alteração na solução. Pelo contrário, sistemas malcondicionados são aqueles onde pequenas alterações nos coeficientes resultam em grandes mudancas na solução. Uma interpretação alternativa para este tipo de sistemas é a de que um grande e variado leque de soluções pode, aproximadamente, satifazer o sistema de equações. Como os erros de arredondamento podem induzir pequenas alterações nos coeficientes, então essas alterações podem provocar grandes erros nas soluções de sistemas mal-condicionados. Exemplo João Minas FAC (DFUC) - 2001/2002 4/5 Resolva o seguinte sistema: x1 + 2x2 = 10 1,1x1 + 2x2 =10,4. A seguir resolva o mesmo sistema mas desta vez com o coeficiente de x1, da segunda equacão, alterado para 1,05. Como o sistema só tem duas equacões podemos encontrar as duas solucões pelo método da substituição, ou seja, x1 = 2 (10) - 2 (10,4) =4 1 (2) - 2 (1,1) e x2 = 1 (10,4) - 1,1 (10) = 3. 1 (2) - 2 (1,1) Se tentarmos resolver novamente o sistema, com o valor de x2 alterado para 1,05, usando o mesmo método chegamos a: x1 = 2 (10) - 2 (10,4) =8 1 (2) - 2 (1,05) e x2 = 1 (10,4) - 1,1 (10) = 1. 1 (2) - 2 (1,05) Note-se que a razão principal para a discrepância entre os dois resultados é a de que o denominador representa a subtracção de duas quantidades muito próximas, sendo este tipo de operações muito susceptível a pequenas variações nas parcelas. A maior dificuldade neste tipo de sistemas encontra-se na verificação das soluções. Se tentarmos por substituição nas equações originais, obteremos para o exemplo: 8 + 2 (1) = 10 =10 1,1 (8) + 2 (1) = 10,8 ≅ 10,4 Conclui-se: - ser difícil chegar a uma conclusão suficientemente clara para a validar a técnica; - surgirem erros (acumulação) no decorrer dos procedimentos. João Minas FAC (DFUC) - 2001/2002 5/5