R solve Function


solve() function solves equation a %*% x = b for x, where b is a vector or matrix.

solve(a, b, tol, LINPACK = FALSE, ...)

• a: coefficients of the equation
• b: vector or matrix of the equation right side
• tol: the tolerance for detecting linear dependencies in the columns of a
• LINPACK: logical. Defunct and ignored
...

5x = 10, what's x?
>solve(5,10)
[1] 2

Let's see two variables examples:
3x + 2y = 8
x + y =2
What's x and y?

In above equations, matrix a is:
  3 2
  1 1
Matrix b is:
  8
  2
> a <- matrix(c(3,1,2,1),nrow=2,ncol=2)
> a
     [,1] [,2]
[1,]    3    2
[2,]    1    1
> b <- matrix(c(8,2),nrow=2,ncol=1)
> b
     [,1]
[1,]    8
[2,]    2
> solve(a,b)
     [,1]
[1,]    4
[2,]   -2

So x = 4, y = -2.

If b is absent, the default is a unit matrix.
> x <- stats::rnorm(16)
> dim(x) <- c(4,4)
> x
           [,1]       [,2]        [,3]         [,4]
[1,] -0.3017359 -0.4687800  0.66832626  0.003768864
[2,] -0.8327101  0.7754996 -0.04494932  1.900833149
[3,] -0.1948664 -0.9313664 -0.47685005 -0.123290962
[4,]  1.2502012 -1.0014304  1.61952675  1.119330272

> solve(x)
           [,1]        [,2]        [,3]        [,4]
[1,] -1.0175034 -0.23116550 -0.09488446  0.38553721
[2,] -0.2013479  0.03601077 -0.78443594 -0.14687844
[3,]  0.8975934 -0.08140970 -0.59455159  0.06973859
[4,] -0.3423730  0.40820022  0.26440712  0.23046715

Get the inverse matrix of matrix x:
> solve(x) %*% x
              [,1]          [,2]          [,3]          [,4]
[1,]  1.000000e+00  0.000000e+00 -2.220446e-16  2.775558e-16
[2,]  8.881784e-16  1.000000e+00 -8.881784e-16  2.220446e-16
[3,] -8.881784e-16  0.000000e+00  1.000000e+00 -4.440892e-16
[4,]  0.000000e+00 -2.775558e-17  2.775558e-17  1.000000e+00