用法一
qr(A::SparseMatrixCSC; tol=_default_tol(A), ordering=ORDERING_DEFAULT) -> QRSparse
計算稀疏矩陣 A
的 QR
分解。使用 Fill-reducing 行和列排列,以便 F.R = F.Q'*A[F.prow,F.pcol]
。此類型的主要應用是解決 \
的最小二乘或欠定問題。該函數調用 C 庫 SPQR。
注意
qr(A::SparseMatrixCSC)
使用作為 SuiteSparse 一部分的 SPQR 庫。由於此庫僅支持具有 Float64
或 ComplexF64
元素的稀疏矩陣,因此從 Julia v1.4 開始,qr
將 A
轉換為類型為 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
、ComplexF32
或ComplexF64
),則F
是QRCompactWY
對象, -
否則
F
是一個QR
對象。
可以通過屬性訪問器檢索分解F
的各個組件:
迭代分解產生組件 Q
, R
,如果存在 p
。
以下函數可用於 QR
對象: inv
、 size
和 \
。當A
為矩形時,\
將返回一個最小二乘解,如果該解不是唯一的,則返回具有最小範數的解。當A
不是滿秩時,需要使用(列)旋轉進行分解以獲得最小範數解。
允許對完整/平方或非完整/平方Q
進行乘法運算,即支持F.Q*F.R
和F.Q*A
。 Q
矩陣可以使用 Matrix
轉換為常規矩陣。此操作返回 "thin" Q 因子,即,如果 A
是 m
× n
和 m>=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 基本反射器產品的內存存儲要求,因此可以將 Q
和 R
矩陣緊湊地存儲為兩個單獨的密集矩陣。
相關用法
- Julia LinearAlgebra.qr!用法及代碼示例
- Julia LinearAlgebra.BLAS.dot用法及代碼示例
- Julia LinearAlgebra.bunchkaufman用法及代碼示例
- Julia LinearAlgebra.cholesky!用法及代碼示例
- Julia LinearAlgebra.istriu用法及代碼示例
- Julia LinearAlgebra.istril用法及代碼示例
- Julia LinearAlgebra.stride1用法及代碼示例
- Julia LinearAlgebra.svd用法及代碼示例
- Julia LinearAlgebra.logdet用法及代碼示例
- Julia LinearAlgebra.eigen用法及代碼示例
- Julia LinearAlgebra.BLAS.dotu用法及代碼示例
- Julia LinearAlgebra.ldlt!用法及代碼示例
- Julia LinearAlgebra.I用法及代碼示例
- Julia LinearAlgebra.Transpose用法及代碼示例
- Julia LinearAlgebra.det用法及代碼示例
- Julia LinearAlgebra.tril!用法及代碼示例
- Julia LinearAlgebra.schur!用法及代碼示例
- Julia LinearAlgebra.tr用法及代碼示例
- Julia LinearAlgebra.axpby!用法及代碼示例
- Julia LinearAlgebra.adjoint!用法及代碼示例
- Julia LinearAlgebra.eigvecs用法及代碼示例
- Julia LinearAlgebra.LU用法及代碼示例
- Julia LinearAlgebra.isposdef!用法及代碼示例
- Julia LinearAlgebra.LQ用法及代碼示例
- Julia LinearAlgebra.normalize用法及代碼示例
注:本文由純淨天空篩選整理自julialang.org大神的英文原創作品 LinearAlgebra.qr — Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。