Um dos pacotes para a solução de sistemas de equações lineares é o matlib, que é bastante útil para o estudo de Álgebra Linear e estatísticas multivariadas. O pacote precisa ser instalado antes do primeiro uso. Após, basta carregar com a função library()2.
# install.packages("matlib")
library(matlib)
O objetivo desta nota é apresentar, por meio de exemplos baseados no livro de Boldrini et al. (1980), algumas das funcionalidades do pacote. Um possível sistema com duas equações é dado por:
A <- matrix(c(2,-7,1,4,−1,-10,-5,16), nrow= 4, ncol = 2)
b <- matrix(c(3,-12,1,8),ncol = 1)
showEqn(A,b) # Mostra a estrutura do sistema de equações
## 2*x1 - 1*x2 = 3
## -7*x1 - 10*x2 = -12
## 1*x1 - 5*x2 = 1
## 4*x1 + 16*x2 = 8
plotEqn(A,b) # Desenha as retas num gráfico com duas variáveis
## 2*x[1] - 1*x[2] = 3
## -7*x[1] - 10*x[2] = -12
## x[1] - 5*x[2] = 1
## 4*x[1] + 16*x[2] = 8
Figure 1.1: Elaboração própria.
A partir da Figura 1.1, pode-se perceber que há duas equações que são combinações lineares das demais.
Também é possível elaborar um sistema com três variáveis, resolver e fazer sua representação gráfica3:
A <- matrix(c(1,2,1,4,5,-3,3,4,-2), ncol = 3)
b <- c(1,4,5)
showEqn(A,b) # Mostra a estrutura do sistema de equações
## 1*x1 + 4*x2 + 3*x3 = 1
## 2*x1 + 5*x2 + 4*x3 = 4
## 1*x1 - 3*x2 - 2*x3 = 5
ampliada <- cbind(A,b) # Matriz ampliada do sistema
echelon(ampliada,verbose = T,fractions = T) # Resolve por eliminação gaussiana
##
## Initial matrix:
## b
## [1,] 1 4 3 1
## [2,] 2 5 4 4
## [3,] 1 -3 -2 5
##
## row: 1
##
## exchange rows 1 and 2
## b
## [1,] 2 5 4 4
## [2,] 1 4 3 1
## [3,] 1 -3 -2 5
##
## multiply row 1 by 1/2
## b
## [1,] 1 5/2 2 2
## [2,] 1 4 3 1
## [3,] 1 -3 -2 5
##
## subtract row 1 from row 2
## b
## [1,] 1 5/2 2 2
## [2,] 0 3/2 1 -1
## [3,] 1 -3 -2 5
##
## subtract row 1 from row 3
## b
## [1,] 1 5/2 2 2
## [2,] 0 3/2 1 -1
## [3,] 0 -11/2 -4 3
##
## row: 2
##
## exchange rows 2 and 3
## b
## [1,] 1 5/2 2 2
## [2,] 0 -11/2 -4 3
## [3,] 0 3/2 1 -1
##
## multiply row 2 by -2/11
## b
## [1,] 1 5/2 2 2
## [2,] 0 1 8/11 -6/11
## [3,] 0 3/2 1 -1
##
## multiply row 2 by 5/2 and subtract from row 1
## b
## [1,] 1 0 2/11 37/11
## [2,] 0 1 8/11 -6/11
## [3,] 0 3/2 1 -1
##
## multiply row 2 by 3/2 and subtract from row 3
## b
## [1,] 1 0 2/11 37/11
## [2,] 0 1 8/11 -6/11
## [3,] 0 0 -1/11 -2/11
##
## row: 3
##
## multiply row 3 by -11
## b
## [1,] 1 0 2/11 37/11
## [2,] 0 1 8/11 -6/11
## [3,] 0 0 1 2
##
## multiply row 3 by 2/11 and subtract from row 1
## b
## [1,] 1 0 0 3
## [2,] 0 1 8/11 -6/11
## [3,] 0 0 1 2
##
## multiply row 3 by 8/11 and subtract from row 2
## b
## [1,] 1 0 0 3
## [2,] 0 1 0 -2
## [3,] 0 0 1 2
plotEqn3d(A,b) # Desenha as retas num gráfico em três dimensões numa popup
Outra forma de resolver o sistema se dá com o comando solve, desde que o sistema seja possível e determinado:
A <- matrix(c(1,2,1,4,5,-3,3,4,-2), ncol = 3)
b <- c(1,4,5)
solve(A,b)
## [1] 3 -2 2
Este pequeno resumo pode ajudar na resolução de sistemas simples ligados à álgebra linear, auxiliando no aprendizado e na resolução de exercícios.
Boldrini, José Luiz, Sueli I. Rodrigues Costa, Vera Lúcia Figueiredo, and Henri G. Wetzler. 1980. Algebra Linear. 3a ed. São Paulo - BRA: Harper & Row do Bra.
Doutorando em Economia pela Universidade de Brasília. Pode ser contatado em rafaeldeacyprestemr@gmail.com.↩
Para acessar detalhes das funções do pacote, basta digitar ?nome da função. Na aba ajuda, aparecerão informações da função e, normalmente, algumas aplicações↩
A representação gráfica é mostrada apenas em pop-up quando o código é rodado no R. O leitor pode copiar os códigos desta nota e rodar em sua própria máquina para verivicar o resultado.↩