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:
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.92)
O algoritmo para a solução do sistema tridiagonal (4.91) 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.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 :
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.103)
A penúltima linha diz
(4.104)
Esse mesmo procedimento aplicado à linha
, nos
dá
(4.105)
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 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
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:
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