em ,

Método de Triangularização de Gauss – Parte 2

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.

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.

Escrito por Jorge Kazuo Yamamoto

Prof. Dr. Jorge Kazuo Yamamoto, fundador da Geokrigagem, é geólogo, foi pesquisador do IPT e docente do Instituto de Geociências da USP, onde se aposentou como Professor Titular do Departamento de Geologia Sedimentar e Ambiental. Atualmente, atua como Professor Sênior do Departamento de Engenharia de Minas e de Petróleo – Escola Politécnica – USP. É responsável pela disciplina “Métodos geoestatísticos” na Pós-Graduação do IPT – Investigação do subsolo: Geotecnia e Meio Ambiente. Dedica-se ao ensino de geoestatística, com ênfase no desenvolvimento de algoritmos e pesquisa de novas aplicações, tais como: variância de interpolação, cálculo da variância global de depósitos minerais e correção do efeito de suavização da krigagem. Ultimamente, seu interesse está voltado para o ensino e divulgação da linguagem R.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Método de Triangularização de Gauss – Parte 1

Script em R para Gerar Sistemas Lineares e Resolução por Triangularização de Gauss