用法一
svd(A; full::Bool = false, alg::Algorithm = default_svd_alg(A)) -> SVD
計算 A
的奇異值分解 (SVD) 並返回 SVD
對象。
U
、 S
、 V
和 Vt
可以從具有 F.U
、 F.S
、 F.V
和 F.Vt
的因式分解 F
獲得。這樣 A = U * Diagonal(S) * Vt
。該算法產生 Vt
,因此 Vt
比 V
更有效地提取。 S
中的奇異值按降序排列。
迭代分解生成組件 U
、 S
和 V
。
如果 full = false
(默認),則返回 "thin" SVD。對於 矩陣 A
,在完整的因式分解中 U
是 M \times M
並且 V
是 N \times N
。而在細分解中,U
是 M \times K
和 V
是 N \times K
,其中 K = \min(M,N)
是奇異值的數量。
如果alg = DivideAndConquer()
使用分治算法來計算 SVD。另一個(通常較慢但更準確)選項是 alg = QRIteration()
。
Julia 1.3
alg
關鍵字參數需要 Julia 1.3 或更高版本。
例子
julia> A = rand(4,3);
julia> F = svd(A); # Store the Factorization Object
julia> A ≈ F.U * Diagonal(F.S) * F.Vt
true
julia> U, S, V = F; # destructuring via iteration
julia> A ≈ U * Diagonal(S) * V'
true
julia> Uonly, = svd(A); # Store U only
julia> Uonly == U
true
用法二
svd(A, B) -> GeneralizedSVD
計算 A
和 B
的廣義 SVD,返回 GeneralizedSVD
分解對象 F
使得 [A;B] = [F.U * F.D1; F.V * F.D2] * F.R0 * F.Q'
U
是一個M-by-M正交矩陣,V
是一個P-by-P正交矩陣,Q
是一個N-by-N正交矩陣,D1
是一個 M-by-(K+L) 對角矩陣,前 K 個條目中有 1,D2
是一個P-by-(K+L) 矩陣,其右上角L-by-L 塊是對角線,R0
是一個 (K+L)-by-N 矩陣,其最右邊的 (K+L)-by-(K+L) 塊是非奇異的上塊三角形,
K+L
是矩陣 [A; B]
的有效數值秩。
迭代分解產生組件 U
、 V
、 Q
、 D1
、 D2
和 R0
。
廣義 SVD 用於以下應用,例如當一個人想要比較多少屬於 A
與多少屬於 B
時,如人類與酵母基因組,或信號與噪聲,或集群之間與集群內。 (參見 Edelman 和 Wang 的討論:https://arxiv.org/abs/1901.00485)
它將 [A; B]
分解為 [UC; VS]H
,其中 [UC; VS]
是 [A; B]
的列空間的自然正交基,而 H = RQ'
是 [A;B]
的行空間的自然非正交基,其中頂部行最接近地歸因於A
矩陣,底部歸因於B
矩陣。 multi-cosine/正弦矩陣 C
和 S
提供 multi-measure 多少 A
與多少 B
,並且 U
和 V
提供測量這些方向的方向。
例子
julia> A = randn(3,2); B=randn(4,2);
julia> F = svd(A, B);
julia> U,V,Q,C,S,R = F;
julia> H = R*Q';
julia> [A; B] ≈ [U*C; V*S]*H
true
julia> [A; B] ≈ [F.U*F.D1; F.V*F.D2]*F.R0*F.Q'
true
julia> Uonly, = svd(A,B);
julia> U == Uonly
true
相關用法
- Julia LinearAlgebra.svdvals用法及代碼示例
- Julia LinearAlgebra.stride1用法及代碼示例
- Julia LinearAlgebra.schur!用法及代碼示例
- Julia LinearAlgebra.sylvester用法及代碼示例
- Julia LinearAlgebra.schur用法及代碼示例
- Julia LinearAlgebra.BLAS.dot用法及代碼示例
- Julia LinearAlgebra.bunchkaufman用法及代碼示例
- Julia LinearAlgebra.cholesky!用法及代碼示例
- Julia LinearAlgebra.istriu用法及代碼示例
- Julia LinearAlgebra.istril用法及代碼示例
- 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.tr用法及代碼示例
- Julia LinearAlgebra.axpby!用法及代碼示例
- Julia LinearAlgebra.adjoint!用法及代碼示例
- Julia LinearAlgebra.eigvecs用法及代碼示例
- Julia LinearAlgebra.LU用法及代碼示例
- Julia LinearAlgebra.isposdef!用法及代碼示例
- Julia LinearAlgebra.LQ用法及代碼示例
注:本文由純淨天空篩選整理自julialang.org大神的英文原創作品 LinearAlgebra.svd — Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。