No artigo anterior, apresentamos como se processa a resolução de sistemas lineares pelo método direto denominado Triangularização de Gauss. Agora, vamos para a prática em computador, com a descrição de um script em linguagem R. Doravante, os nossos scripts serão numerados sequencialmente, começando por este Script GK1.
![](https://geokrigagem.com.br/wp-content/uploads/2020/07/Screenshot_1.png)
Como exemplo para aplicação desse script, vamos usar os mesmos dados de um sistema de equações lineares 3 X 3 (Dunn e Parberry, 2011, p. 131). A matriz dos coeficientes é definida como um data frame, que contém a matriz dos coeficientes A e o vetor b (Linha 1).
Para fins de convenção, adota-se escrever Linha para se referir à linha do script e linha para a matriz dos coeficientes. O número de linhas é lido diretamente do data frame (Linha 2) e o número de colunas é o número de linhas mais um, porque o vetor b foi adicionado (Linha 3).
Entre as Linhas 4 e 17, tem-se um comando em laço que percorre a diagonal principal de 1 até (n-1). Agora, entre as Linhas 5 e 16 há outro comando em laço percorrendo as linhas abaixo da diagonal principal (k).
Em seguida, entre as Linhas 6 e 12, faz-se a condensação pivotal, se for o caso, ou seja, quando o elemento abaixo da diagonal principal (A[i,k]) for maior que o elemento da diagonal principal (A[k,k]).
Para fazer a permutação de linhas, cria-se um objeto de armazenamento temporário chamado (xtemp).
Nas Linhas 13 a 15, executa-se a multiplicação da linha que está sobre a diagonal principal pelo multiplicador (mult) e se soma à linha i, conforme o comando em laço que começa na Linha 5.
Feito isso, o elemento abaixo da diagonal principal foi zerado. Repete-se esse procedimento para todas as demais linhas abaixo da diagonal principal. Assim, tem-se a matriz dos coeficientes como uma matriz triangular superior, ficando a n-ésima equação do sistema com apenas uma incógnita, que é determinada na Linha 20.
Em seguida, faz-se a substituição reversa se calculando a (n-1)-ésima incógnita, conhecida a n-ésima e assim por diante.
> A
c..5..2..1. c.1..2..0. c.1..4...3. c..10..12..9.
1 -5 1.0 1.000000 -10.000000
2 0 2.4 4.400000 8.000000
3 0 0.0 -3.166667 6.333333
> x
[1] 3 7 -2
>
Os resultados obtidos conferem com aqueles apresentados por Dunn e Parberry (2011, p. 131). Na linguagem R, tem-se a função solve() que resolve sistemas de equações lineares, como se pode verificar no Script GK2.
A=matrix(c(2,2,4,-5,1,1,1,0,-3),nrow=3,ncol=3,byrow=TRUE)
b=matrix(c(12,-10,9),nrow=3,ncol=1)
X=solve(A,b)
X
Como se pode verificar a seguir, os resultados foram absolutamente iguais aos obtidos no script GK1, validando o algoritmo descrito e programado em R.
> X
[,1]
[1,] 3
[2,] 7
[3,] -2
>
Este foi um dos algoritmos que a Geokrigagem está migrando para a linguagem R, conforme a decisão publicada no artigo: “Migração de algoritmos para a linguagem R”.
Referências bibliográficas
Dunn, F.; Parberry, I. 2011. 3D Math primer for graphics and game development. Boca Raton, CRC Press. 824p.
Press, W.H.; Flannery, B.P.; Teukolsky, S.A.; Vetterling, W.T. 1989. Numerical recipes in Pascal. New York, Cambridge University Press. 759p.
Próximo artigo
Esse artigo é uma continuação do Método de Triangularização de Gauss – Parte 1.
No próximo artigo vamos aplicar o sistema gerador de equações lineares associado à solução pelo método de triangularização de Gauss, para qualquer dimensão.
Observações importantes:
- Os Scripts Gk1 e Gk2 foram executados sob a versão 4.0.0 da linguagem R.
- Este artigo foi derivado de um capítulo de um livro em preparação Yamamoto, J.K. 2020. R na prática. São Paulo, JK Yamamoto-EIRELI.