Matrix inversion is usually a costly computation and there may be some benefit . # to caching the inverse of a matrix rather than compute it repeatedly. The following two functions are used to cache the inverse of a matrix. 1. set the value of the matrix 2. get the value of the matrix 3. set the value of the inverse of the matrix 4. get the value of the inverse of the matrix

makeCacheMatrix <- function(x = matrix()) {
  inv <- NULL
  set <- function(y) {
    x <<- y
    inv <<- NULL
  }
  get <- function() x
  setinverse <- function(inverse) inv <<- inverse
  getinverse <- function() inv
  list(set=set, get=get, setinverse=setinverse, getinverse=getinverse)
}

The following function returns the inverse of the matrix. It first checks if the inverse has already been computed. If so, it gets the result and skips the computation. If not, it computes the inverse, sets the value in the cache via setinverse function. This function assumes that the matrix is always invertible.

cacheSolve <- function(x, ...) {
  inv <- x$getinverse()
  if(!is.null(inv)) {
    message("getting cached data.")
    return(inv)
  }
  data <- x$get()
  inv <- solve(data)#solve() will return the inverse of matrix data
  x$setinverse(inv)
  inv
}
x = rbind(c(1, -1/2), c(-1/2, 1))
m = makeCacheMatrix(x)
cacheSolve(m)
##           [,1]      [,2]
## [1,] 1.3333333 0.6666667
## [2,] 0.6666667 1.3333333
cacheSolve(m)
## getting cached data.
##           [,1]      [,2]
## [1,] 1.3333333 0.6666667
## [2,] 0.6666667 1.3333333