solve
Solve a System of Equations
This generic function solves the equation a %*% x = b
for x
,
where b
can be either a vector or a matrix.
- Keywords
- algebra
Usage
solve(a, b, …)# S3 method for default
solve(a, b, tol, LINPACK = FALSE, …)
Arguments
- a
a square numeric or complex matrix containing the coefficients of the linear system. Logical matrices are coerced to numeric.
- b
a numeric or complex vector or matrix giving the right-hand side(s) of the linear system. If missing,
b
is taken to be an identity matrix andsolve
will return the inverse ofa
.- tol
the tolerance for detecting linear dependencies in the columns of
a
. The default is.Machine$double.eps
. Not currently used with complex matricesa
.- LINPACK
logical. Defunct and ignored.
- …
further arguments passed to or from other methods
Details
a
or b
can be complex, but this uses double complex
arithmetic which might not be available on all platforms.
The row and column names of the result are taken from the column names
of a
and of b
respectively. If b
is missing the
column names of the result are the row names of a
. No check is
made that the column names of a
and the row names of b
are equal.
For back-compatibility a
can be a (real) QR decomposition,
although qr.solve
should be called in that case.
qr.solve
can handle non-square systems.
Unsuccessful results from the underlying LAPACK code will result in an error giving a positive error code: these can only be interpreted by detailed study of the FORTRAN code.
References
Anderson. E. and ten others (1999) LAPACK Users' Guide. Third Edition. SIAM. Available on-line at http://www.netlib.org/lapack/lug/lapack_lug.html.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
See Also
solve.qr
for the qr
method,
chol2inv
for inverting from the Choleski factor
backsolve
, qr.solve
.
Examples
library(base)
# NOT RUN {
hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }
h8 <- hilbert(8); h8
sh8 <- solve(h8)
round(sh8 %*% h8, 3)
A <- hilbert(4)
A[] <- as.complex(A)
## might not be supported on all platforms
try(solve(A))
# }