当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R solve 求解方程组


R语言 solve 位于 base 包(package)。

说明

此通用函数可求解方程 a %*% x = b 得到 x ,其中 b 可以是向量或矩阵。

用法

solve(a, b, ...)

## Default S3 method:
solve(a, b, tol, LINPACK = FALSE, ...)

参数

a

包含线性系统系数的方数值或复矩阵。逻辑矩阵被强制转换为数字。

b

给出线性系统右侧的数值或复数向量或矩阵。如果丢失, b 被视为单位矩阵,并且 solve 将返回 a 的逆矩阵。

tol

检测 a 列中线性相关性的容差。默认为 .Machine$double.eps

LINPACK

合乎逻辑的。失效并出现错误。

...

传递给其他方法或从其他方法传递的进一步参数

细节

ab 可能很复杂,但这使用双复数算术,可能并非在所有平台上都可用。

结果的行名称和列名称分别取自ab的列名称。如果 b 丢失,则结果的列名称是 a 的行名称。不检查 a 的列名称是否与 b 的行名称匹配。

为了向后兼容,a 可以是(真正的)QR 分解,尽管在这种情况下应该调用 qr.solveqr.solve可以处理非方形系统。

底层 LAPACK 代码的不成功结果将导致错误,并给出正错误代码:这些只能通过详细研究 FORTRAN 代码来解释。

如果 a 和/或 b 包含缺失、NaN 或无限值,会发生什么情况取决于平台,包括正在使用的 LAPACK 版本。

tol 是(估计的 1-范数)‘倒数条件数’的容差:如果 tol <= 0 则跳过检查。

由于历史原因,默认方法接受 a 作为类 "qr" 的对象(带有警告)并将其传递给 solve.qr

例子

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

来源

默认方法是 LAPACK 例程 DGESVZGESV 的接口。

LAPACK 来自https://netlib.org/lapack/

参考

Anderson. E. and ten others (1999) LAPACK Users' Guide. Third Edition. SIAM.
Available on-line at https://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.

也可以看看

solve.qr 用于 qr 方法,chol2inv 用于从 Cholesky 因子反转 backsolveqr.solve

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Solve a System of Equations。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。