R: Solve a System of Equations

solve {base} | R Documentation

## Solve a System of Equations

### 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`. Not currently used with complex matrices `a`.
`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 and LAPACK will always be used.

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.

### Source

The default method is an interface to the LAPACK routines `DGESV` and `ZGESV`.

LAPACK is from http://www.netlib.org/lapack.

### 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

    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 3.1.2 Index]