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


Julia LinearAlgebra.qr用法及代碼示例


用法一

qr(A::SparseMatrixCSC; tol=_default_tol(A), ordering=ORDERING_DEFAULT) -> QRSparse

計算稀疏矩陣 AQR 分解。使用 Fill-reducing 行和列排列,以便 F.R = F.Q'*A[F.prow,F.pcol] 。此類型的主要應用是解決 \ 的最小二乘或欠定問題。該函數調用 C 庫 SPQR。

注意

qr(A::SparseMatrixCSC) 使用作為 SuiteSparse 一部分的 SPQR 庫。由於此庫僅支持具有 Float64 ComplexF64 元素的稀疏矩陣,因此從 Julia v1.4 開始,qrA 轉換為類型為 SparseMatrixCSC{Float64}SparseMatrixCSC{ComplexF64} 的副本(視情況而定)。

例子

julia> A = sparse([1,2,3,4], [1,1,2,2], [1.0,1.0,1.0,1.0])
4×2 SparseMatrixCSC{Float64, Int64} with 4 stored entries:
 1.0   ⋅
 1.0   ⋅
  ⋅   1.0
  ⋅   1.0

julia> qr(A)
SuiteSparse.SPQR.QRSparse{Float64, Int64}
Q factor:
4×4 SuiteSparse.SPQR.QRSparseQ{Float64, Int64}:
 -0.707107   0.0        0.0       -0.707107
  0.0       -0.707107  -0.707107   0.0
  0.0       -0.707107   0.707107   0.0
 -0.707107   0.0        0.0        0.707107
R factor:
2×2 SparseMatrixCSC{Float64, Int64} with 2 stored entries:
 -1.41421    ⋅
   ⋅       -1.41421
Row permutation:
4-element Vector{Int64}:
 1
 3
 4
 2
Column permutation:
2-element Vector{Int64}:
 1
 2

用法二

qr(A, pivot = NoPivot(); blocksize) -> F

計算矩陣 A 的 QR 分解:正交(如果 A 為 complex-valued,則為酉)矩陣 Q 和上三角矩陣 R 使得

返回的對象 F 以打包格式存儲分解:

  • 如果 pivot == ColumnNorm() 那麽 F 是一個 QRPivoted 對象,

  • 否則,如果 A 的元素類型是 BLAS 類型( Float32 Float64 ComplexF32ComplexF64 ),則 F QRCompactWY 對象,

  • 否則 F 是一個 QR 對象。

可以通過屬性訪問器檢索分解F 的各個組件:

  • F.Q:正交/酉矩陣Q
  • F.R:上三角矩陣R
  • F.p :樞軸的排列向量(僅限 QRPivoted )
  • F.P :樞軸的置換矩陣(僅限 QRPivoted )

迭代分解產生組件 QR ,如果存在 p

以下函數可用於 QR 對象: inv size \ 。當A 為矩形時,\ 將返回一個最小二乘解,如果該解不是唯一的,則返回具有最小範數的解。當A 不是滿秩時,需要使用(列)旋轉進行分解以獲得最小範數解。

允許對完整/平方或非完整/平方Q 進行乘法運算,即支持F.Q*F.RF.Q*AQ 矩陣可以使用 Matrix 轉換為常規矩陣。此操作返回 "thin" Q 因子,即,如果 Am × nm>=n ,則 Matrix(F.Q) 產生一個具有正交列的 m × n 矩陣。要檢索 "full" Q 因子,即 m × m 正交矩陣,請使用 F.Q*Matrix(I,m,m) 。如果 m<=n ,則 Matrix(F.Q) 產生 m × m 正交矩陣。

pivot == NoPivot()A isa StridedMatrix{<:BlasFloat} 時,可以通過關鍵字參數 blocksize :: Integer 指定 QR 分解的塊大小。當 blocksize > minimum(size(A)) 時它被忽略。見 QRCompactWY

Julia 1.4

blocksize 關鍵字參數需要 Julia 1.4 或更高版本。

例子

julia> A = [3.0 -6.0; 4.0 -8.0; 0.0 1.0]
3×2 Matrix{Float64}:
 3.0  -6.0
 4.0  -8.0
 0.0   1.0

julia> F = qr(A)
LinearAlgebra.QRCompactWY{Float64, Matrix{Float64}}
Q factor:
3×3 LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}}:
 -0.6   0.0   0.8
 -0.8   0.0  -0.6
  0.0  -1.0   0.0
R factor:
2×2 Matrix{Float64}:
 -5.0  10.0
  0.0  -1.0

julia> F.Q * F.R == A
true

注意

qr 返回多種類型,因為 LAPACK 使用多種表示來最小化 Householder 基本反射器產品的內存存儲要求,因此可以將 QR 矩陣緊湊地存儲為兩個單獨的密集矩陣。

相關用法


注:本文由純淨天空篩選整理自julialang.org大神的英文原創作品 LinearAlgebra.qr — Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。