Use o botão abaixo para reportar erros ou dar sugestões.
Cálculo Numérico - Versão Scilab
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:
Observamos que não é necessário armazenar todos os
elementos da matriz em memória, sendo suficiente armazenar os vetores
,
e
. Por
conveniência, a partir daqui, definiremos os elementos inexistentes na matriz
e
como
zero:
(4.110)
O algoritmo para a solução do sistema tridiagonal (4.109) pelo algoritmo de
Thomas é dada pelas seguintes expressões:
Finalmente a solução final é obtida por substituição reversa:
Teorema 4.5.1.A aplicação da eliminação gaussiana sem pivotamentoao sistema (4.109) produz o algoritmo dado em (4.111) e (4.113).
Demonstração. O primeiro passo consiste em dividir todos os elementos da primeira
linha de (4.109) por :
onde
e
O segundo passo consiste em substituir a segunda linha por ela mesma subtraída da linha
1 multiplicada por
():
Em seguida, dividimos a segunda linha por
, a fim
de normalizar a diagonal principal:
onde
e .
O próximo passo consiste em substituir a terceira linha
por ela mesma subtraída da linha 2 multiplicada por
():
A fim de normalizar o elemento da diagonal da terceira linha, dividimos toda a
linha por :
Este procedimento é realizado até que se atinja a última linha e temos o
seguinte sistema:
Neste estágio, podemos encontrar os
através de substituição reversa, isto é: a última linha diz
(4.121)
A penúltima linha diz
(4.122)
Esse mesmo procedimento aplicado à linha
, nos
dá
(4.123)
Exemplo 4.5.1. Considere a resolução do seguinte sistema tridiagonal pelo
algoritmo de Thomas:
Primeiramente identificamos os vetores
,
,
e
:
Agora, calculamos os vetores
e :
Finalmente, calculamos o vetor :
E assim, obtemos o vetor .
Código Scilab: Método da matriz tridiagonal
//entradas: vetores coluna a,b,c,d //saida: vetor coluna x 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
e
.
Observe que se for desnecessário preservar os valores originais dos vetores
e
, eles
podem, com economia de memória e simplicidade de código, ser sobrescritos pelos
vetores e
,
respectivamente. Eis uma nova implementação:
//entradas: vetores coluna a,b,c,d //saida: vetor coluna x 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:
E 4.5.1.Considere o problema linear tridiagonal dado por
Identifique os vetores ,
,
e
relativos ao algoritmo da matriz tridiagonal. Depois resolva o sistema usando o
computador.
Resposta.
E 4.5.2. Considere o seguinte sistema de equações lineares:
Identifique os vetores ,
,
e
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