Universidade Federal da Paraíba

Programa de Pós-Graduação em Economia

#-------------------------------------------------------
# Hilton M B Ramalho - PPGE/UFPB
# Função para resolução de sistemas lineares
# n equações e n variáveis
# Método - inversão de matrizes
#-------------------------------------------------------

rsistema <-  function(A,x=NULL) {
  
  # total de colunas
  n <- ncol(A)
  d <- dim(A[,-n])
  
  if(d[1]!=d[2]) stop("A matriz dos coeficientes ponderados precisa ser quadrada!")
  
  # solução x = A-1*b
  xs <- round(solve(A[,-n])%*%A[,n])
  
  if(!is.null(x)) {
  # aplicar nomes
  rownames(xs) <- x
  colnames(xs) <- "solução"
               }
  return(xs)
  
}

# Exemplo 2
# Considere o sistema Ax = b -> n equações e n variáveis
# x1 + 2x2 - 2x3 = 1
# -2x1 + x2 - x3 = 0
# 3x1 - x2 + 2x3 = 1

# Entrar com colunas da matriz dos coeficientes do sistema
c1 <- c(1,2,-2)
c2 <- c(-2,1,-1)
c3 <- c(3,-1,2)

# Entrar com matriz dos coeficientes independentes
b <- c(1,0,1)

# criar matriz dos coeficientes
A <- matrix(nrow=3,ncol=3,data = cbind(c1,c2,c3))
A
##      [,1] [,2] [,3]
## [1,]    1   -2    3
## [2,]    2    1   -1
## [3,]   -2   -1    2
# calcular determinante
det(A)
## [1] 5
# calcular matriz inversa
solve(A)
##      [,1] [,2] [,3]
## [1,]  0.2  0.2 -0.2
## [2,] -0.4  1.6  1.4
## [3,]  0.0  1.0  1.0
# resolver diretamente
solve(A,b)
## [1] 0 1 1
# Usando a função rsistema

# Definir matriz de variáveis do sistema
x <- c("x1","x2","x3")

# Definir matriz ampliada do sistema
C <- cbind(A,b)

# resolver sistema por inversão de matriz
rsistema(C,x)
##    solução
## x1       0
## x2       1
## x3       1