當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。