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


R lu-methods LU 分解的方法


R語言 lu-methods 位於 Matrix 包(package)。

說明

計算 實數矩陣 的旋轉 LU 分解,其具有一般形式

或(等效地)

其中 置換矩陣, 置換矩陣, 單位下梯形矩陣, 上梯形矩陣。

denseMatrix 的方法基於 LAPACK 例程 dgetrf 構建,該例程不會置換列,因此 是單位矩陣。

sparseMatrix 的方法基於 CSparse 例程 cs_lu 構建,該例程需要 ,因此 是三角矩陣。

用法

lu(x, ...)
## S4 method for signature 'dgeMatrix'
lu(x, warnSing = TRUE, ...)
## S4 method for signature 'dgCMatrix'
lu(x, errSing = TRUE, order = NA_integer_,
  tol = 1, ...)
## S4 method for signature 'dsyMatrix'
lu(x, cache = TRUE, ...)
## S4 method for signature 'dsCMatrix'
lu(x, cache = TRUE, ...)
## S4 method for signature 'matrix'
lu(x, ...)

參數

x

要進行因式分解的 finite 矩陣或 Matrix,如果稀疏,則必須是方陣。

warnSing

一個邏輯,指示是否應針對單數 x 發出 warning 信號。僅由用於稠密矩陣的方法使用。

errSing

一個邏輯,指示是否應針對單數 x 發出 error 信號。僅由稀疏矩陣的方法使用。

order

0:3 中的整數傳遞給 CSparse 例程 cs_sqr ,指示選擇列排列 的策略。 0 表示沒有列排列。圖 1、2 和 3 表示 的 fill-reducing 排序,其中 是刪除了 “dense” 行的 。如果是tol == 1,則NA(默認值)相當於 2,否則相當於 1。除非您知道 的列順序已經合理,否則請勿設置為 0。

tol

一個號碼。如果原始主元元素的絕對值超過 tol * a ,則使用原始主元元素,其中 a 是其他可能主元元素絕對值的最大值。僅當您知道自己在做什麽時才設置tol < 1

cache

指示結果是否應緩存在 x@factors[["LU"]] 中的邏輯。請注意,緩存是實驗性的,隻有擴展 compMatrix 的類的方法才會有此參數。

...

傳入或傳出方法的更多參數。

細節

x 被確定為 near-singular 時發生的情況因方法而異。類 dgeMatrix 的方法完成因式分解,如果 warnSing = TRUE 則發出警告,並且在任何情況下返回有效的 denseLU 對象。使用此方法的用戶可以使用合適的警告處理程序來檢測奇異的x;請參閱tryCatch。相反,類 dgCMatrix 的方法放棄進一步計算,如果 errSing = TRUE 則拋出錯誤,否則返回 NA 。此方法的用戶可以使用錯誤處理程序或通過設置 errSing = FALSE 並使用 is(., "sparseLU") 測試正式結果來檢測單個 x

表示分解的對象,繼承自虛擬類 LU 。特定類是 denseLU ,除非 x 繼承自虛擬類 sparseMatrix ,在這種情況下它是 sparseLU

例子


showMethods("lu", inherited = FALSE)
set.seed(0)

## ---- Dense ----------------------------------------------------------

(A1 <- Matrix(rnorm(9L), 3L, 3L))
(lu.A1 <- lu(A1))

(A2 <- round(10 * A1[, -3L]))
(lu.A2 <- lu(A2))

## A ~ P1' L U in floating point
str(e.lu.A2 <- expand2(lu.A2), max.level = 2L)
stopifnot(all.equal(A2, Reduce(`%*%`, e.lu.A2)))

## ---- Sparse ---------------------------------------------------------

A3 <- as(readMM(system.file("external/pores_1.mtx", package = "Matrix")),
         "CsparseMatrix")
(lu.A3 <- lu(A3))

## A ~ P1' L U P2' in floating point
str(e.lu.A3 <- expand2(lu.A3), max.level = 2L)
stopifnot(all.equal(A3, Reduce(`%*%`, e.lu.A3)))

參考

The LAPACK source code, including documentation; see https://netlib.org/lapack/double/dgetrf.f.

Davis, T. A. (2006). Direct methods for sparse linear systems. Society for Industrial and Applied Mathematics. doi:10.1137/1.9780898718881

Golub, G. H., & Van Loan, C. F. (2013). Matrix computations (4th ed.). Johns Hopkins University Press. doi:10.56021/9781421407944

也可以看看

denseLUsparseLU 及其方法。

dgeMatrixdgCMatrix

通用函數 expand1expand2 ,用於根據結果構造矩陣因子。

通用函數 CholeskyBunchKaufmanSchurqr 用於計算其他因式分解。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Methods for LU Factorization。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。