Solve a System of Equations (original) (raw)
solve {base} | R Documentation |
---|
Description
This generic function solves the equation a %*% x = b
for x
, where b
can be either a vector or a matrix.
Usage
solve(a, b, ...)
## Default S3 method:
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 and solve will return the inverse of a. |
tol | the tolerance for detecting linear dependencies in the columns of a. The default is .Machine$double.eps. |
LINPACK | logical. Defunct and an error. |
... | 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
match the row names of b
.
For back-compatibility a
can be a (real) QR decomposition, although [qr.solve](../../base/help/qr.solve.html)
should be called in that case.[qr.solve](../../base/help/qr.solve.html)
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.
What happens if a
and/or b
contain missing, NaN
or infinite values is platform-dependent, including on the version of LAPACK is in use.
tol
is a tolerance for the (estimated 1-norm) ‘reciprocal condition number’: the check is skipped iftol <= 0
.
For historical reasons, the default method accepts a
as an object of class "[qr](../../base/help/qr.html)"
(with a warning) and passes it on to[solve.qr](../../base/help/solve.qr.html)
.
Source
The default method is an interface to the LAPACK routines DGESV
and ZGESV
.
LAPACK is from https://netlib.org/lapack/.
References
Anderson. E. and ten others (1999)LAPACK Users' Guide. Third Edition. SIAM.
Available on-line athttps://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](../../base/help/solve.qr.html)
for the qr
method,[chol2inv](../../base/help/chol2inv.html)
for inverting from the Cholesky factor[backsolve](../../base/help/backsolve.html)
, [qr.solve](../../base/help/qr.solve.html)
.
Examples
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))
[Package _base_ version 4.6.0 Index]