Use o botão abaixo para reportar erros ou dar sugestões.

Cálculo Numérico - Versão GNU Octave

4.5 Método da matriz tridiagonal


O método da matriz tridiagonal ou algoritmo de Thomas8 ou ainda TDMA (do inglês tridiagonal matrix algorithm) é o caso particular da eliminação gaussiana aplicada a matrizes tridiagonais.

Uma matriz tridiagonal é uma matriz quadrada cujos únicos elementos não nulos estão na diagonal principal e nas diagonais imediatamente acima e abaixo da principal. Um sistema tridiagonal é um sistema de equações lineares cuja matriz associada é tridiagonal, conforme a seguir: b1 c1 a2 b2 c2 a3 b3 ⋱ ⋱ ⋱ c n−1 an bn x1 x2 x3 ⋮ x n = d1 d2 d3 ⋮ d n . (4.91)

Observamos que não é necessário armazenar todos os n2 elementos da matriz em memória, sendo suficiente armazenar os vetores an, bn e cn. Por conveniência, a partir daqui, definiremos os elementos inexistentes na matriz a1 e cn como zero:

a1 = cn = 0. (4.92)

O algoritmo para a solução do sistema tridiagonal (4.91) pelo algoritmo de Thomas é dada pelas seguintes expressões: ci′ = ci bi, i = 1 ci bi−aici−1′,i = 2, 3,…,n − 1 (4.93) e di′ = di bi , i = 1 di−aidi−1′ bi−aici−1′,i = 2, 3,…,n. (4.94)

Finalmente a solução final é obtida por substituição reversa: xn = dn′ (4.95) xi = di′ − c i′x i+1,i = n − 1,n − 2,…, 1. (4.96)

Teorema 4.5.1. A aplicação da eliminação gaussiana sem pivotamento ao sistema (4.91) produz o algoritmo dado em (4.93) e (4.95).

Demonstração. O primeiro passo consiste em dividir todos os elementos da primeira linha de (4.91) por b1: 1 c1′ a2 b2 c2 a3 b3 ⋱ ⋱ ⋱ c n−1 an bn x1 x2 x3 ⋮ x n = d1′ d2 d3 ⋮ d n , (4.97)

onde c1′ = c1 b1 e d1′ = d1 b1 .

O segundo passo consiste em substituir a segunda linha por ela mesma subtraída da linha 1 multiplicada por a2 (l2 ← l2 − a2l1): 1 c1′ 0 b2 − a2c1′ c 2 a3 b3 ⋱ ⋱ ⋱ c n−1 an bn x1 x2 x3 ⋮ x n = d1′ d2 − a2d1′ d3 ⋮ d n . (4.98)

Em seguida, dividimos a segunda linha por b2 − a2c1′, a fim de normalizar a diagonal principal: 1 c1′ 0 1 c2′ a3 b3 ⋱ ⋱ ⋱ c n−1 an bn x1 x2 x3 ⋮ x n = d1′ d2′ d3 ⋮ d n . (4.99)

onde c2′ = c2 b2−a2c1′ e d2′ = d2−a2d1′ b2−a2c1′.

O próximo passo consiste em substituir a terceira linha por ela mesma subtraída da linha 2 multiplicada por a3 (l3 ← l3 − a3l2): 1 c1′ 0 1 c2′ 0 b3 − a3c2′ ⋱ ⋱ ⋱ cn−1 an bn x1 x2 x3 ⋮ x n = d1′ d2′ d3 − a3d2′ ⋮ d n . (4.100)

A fim de normalizar o elemento da diagonal da terceira linha, dividimos toda a linha por d3 − a3d2′: 1 c1′ 0 1 c2′ 0 1 ⋱ ⋱ ⋱ c n−1 an bn x1 x2 x3 ⋮ x n = d1′ d2′ d3′ ⋮ d n . (4.101)

Este procedimento é realizado até que se atinja a última linha e temos o seguinte sistema: 1 c1′ 0 1 c2′ 0 1 ⋱ ⋱ ⋱ cn−1′ 0 1 x1 x2 x3 ⋮ x n = d1′ d2′ d3′ ⋮ dn′ . (4.102)

Neste estágio, podemos encontrar os xn através de substituição reversa, isto é: a última linha diz

xn = dn′. (4.103)

A penúltima linha diz

xn−1 + cn−1′x n = dn−1′⇒x n−1 = dn−1′ − c n−1′x n. (4.104)

Esse mesmo procedimento aplicado à linha i = 1,…n − 1, nos dá

xi = di′ − c i′x i+1. (4.105)

■

Exemplo 4.5.1. Considere a resolução do seguinte sistema tridiagonal pelo algoritmo de Thomas: 2 1 0 0 0 1 2 1 0 0 0 1 2 1 0 0 0 1 2 1 0 0 0 1 2 x1 x2 x3 x4 x5 = 4 4 0 0 2 . (4.106)

Primeiramente identificamos os vetores a, b, c e d: a = (0, 1, 1, 1, 1) (4.107) b = (2, 2, 2, 2, 2) (4.108) c = (1, 1, 1, 1, 0) (4.109) d = (4, 4, 0, 0, 2) (4.110)

Agora, calculamos os vetores c′ e d′: c1′ = c1 b1 = 1 2 (4.111) c2′ = c2 b2 − a2c1′ = 1 2 − 1 ⋅ 1 2 = 2 3 (4.112) c3′ = c3 b3 − a3c2′ = 1 2 − 1 ⋅ 2 3 = 3 4 (4.113) c4′ = c4 b4 − a4c3′ = 1 2 − 1 ⋅ 3 4 = 4 5 (4.114) d1′ = d1 b1 = 4 2 = 2 (4.115) d2′ = d2 − a2d1′ b2 − a2c1′ = 4 − 1 ⋅ 2 2 − 1 ⋅ 1 2 = 4 3 (4.116) d3′ = d3 − a3d2′ b3 − a3c2′ = 0 − 1 ⋅ 4 3 2 − 1 ⋅ 2 3 = −1 (4.117) d4′ = d4 − a4d3′ b4 − a4c3′ = 0 − 1 ⋅ (−1) 2 − 1 ⋅ 3 4 = 4 5 (4.118) d5′ = d5 − a5d4′ b5 − a5c4′ = 2 − 1 ⋅ 4 5 2 − 1 ⋅ 4 5 = 1 (4.119)

Finalmente, calculamos o vetor x: x5 = d5′ = 1 (4.120) x4 = d4′ − c 4′ ⋅ x 5 = 4 5 − 4 5 ⋅ 1 = 0 (4.121) x3 = d3′ − c 3′ ⋅ x 4 = −1 − 3 4 ⋅ 0 = −1 (4.122) x2 = d2′ − c 2′ ⋅ x 3 = 4 3 − 2 3 ⋅ (−1) = 2 (4.123) x1 = d1′ − c 1′ ⋅ x 2 = 2 − 1 2 ⋅ 2 = 1 (4.124)

E assim, obtemos o vetor x = [1, 2,−1, 0, 1].

Código GNU Octave: Método da matriz tridiagonal

function [x] = TDMA(a,b,c,d)  
 
  n=size(a,1);   %Recupera ordem do sistema.  
 
  cl=zeros(n,1); %Inicializa cl  
  dl=zeros(n,1); %Inicializa dl  
  x=zeros(n,1);  %Inicializa x  
 
  cl(1)=c(1)/b(1);  
  for i=2:n-1  
    cl(i)=c(i)/(b(i)-a(i)*cl(i-1));  
  end  
 
  dl(1)=d(1)/b(1);  
  for i=2:n  
    dl(i)=(d(i)-a(i)*dl(i-1))/(b(i)-a(i)*cl(i-1));  
  end  
 
  x(n)=dl(n)   ;  
  for i=n-1:-1:1  
  x(i)=dl(i)-cl(i)*x(i+1);  
  end  
endfunction

Nesse código, usou-se cl e dl para denotar c′ e d′. Observe que se for desnecessário preservar os valores originais dos vetores c e d, eles podem, com economia de memória e simplicidade de código, ser sobrescritos pelos vetores c′ e d′, respectivamente. Eis uma nova implementação:

function [x] = TDMA2(a,b,c,d)  
 
  n=size(a,1);   %Recupera ordem do sistema.  
  x=zeros(n,1);  %Inicializa x  
 
  c(1)=c(1)/b(1);  
  for i=2:n-1  
    c(i)=c(i)/(b(i)-a(i)*c(i-1));  
  end  
 
  d(1)=d(1)/b(1);  
  for i=2:n  
    d(i)=(d(i)-a(i)*d(i-1))/(b(i)-a(i)*c(i-1));  
  end  
 
  x(n)=d(n)   ;  
  for i=n-1:-1:1  
  x(i)=d(i)-c(i)*x(i+1);  
  end  
endfunction

A solução do sistema do Exemplo 4.5.1 pode ser obtida através dos seguintes comandos:

>>a=[0; 1; 1; 1; 1]  
>>b=[2; 2; 2; 2; 2]  
>>c=[1; 1; 1; 1; 0]  
>>d=[4; 4; 0; 0; 2]  
>>TDMA(a,b,c,d)

E 4.5.1. Considere o problema linear tridiagonal dado por 5 4 0 0 0 0 1 3 1 0 0 0 0 2 4 1 0 0 0 0 1 2 1 0 0 0 0 2 3 2 0 0 0 0 1 2 x1 x2 x3 x4 x5 x6 = 13 10 20 16 35 17 . (4.125)

Identifique os vetores a, b, c e d relativos ao algoritmo da matriz tridiagonal. Depois resolva o sistema usando o computador.

Resposta. a = (0, 1, 2, 1, 2, 1) (4.126) b = (5, 3, 4, 2, 3, 2) (4.127) c = (4, 1, 1, 1, 2, 0) (4.128) d = (13, 10, 20, 16, 35, 17) (4.129) x = (1, 2, 3, 4, 5, 6) (4.130)

E 4.5.2. Considere o seguinte sistema de equações lineares: x1 − x2 = 0 −xj−1 + 5xj − xj+1 = cos(j∕10),2 ≤ j ≤ 10 x11 = x10∕2 (4.131)

Identifique os vetores a, b, c e d relativos ao algoritmo da matriz tridiagonal no sistema linear dado. Depois resolva o sistema usando o computador. Veja também Exercício 4.7.4

Resposta. a = (0,−1,−1,−1,−1,−1,−1,−1,−1,−1,−1∕2) (4.132) b = (1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1) (4.133) c = (−1,−1,−1,−1,−1,−1,−1,−1,−1,−1, 0) (4.134) d = (0, cos(2∕10), cos(3∕10), cos(4∕10), cos(5∕10), (4.135) cos(6∕10), cos(7∕10), cos(8∕10), cos(9∕10), cos(1),0) (4.136) x = (0,324295, 0,324295, 0,317115, 0,305943, 0,291539, (4.137) 0,274169, 0,253971, 0,230846, 0,20355, 0,165301, 0,082650) (4.138)

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 19/8/2020 às 17:36:34.

Informe erros ou edite você mesmo!