用法一
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
