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


Julia LinearAlgebra.svd用法及代碼示例


用法一

svd(A; full::Bool = false, alg::Algorithm = default_svd_alg(A)) -> SVD

計算 A 的奇異值分解 (SVD) 並返回 SVD 對象。

USVVt 可以從具有 F.UF.SF.VF.Vt 的因式分解 F 獲得。這樣 A = U * Diagonal(S) * Vt 。該算法產生 Vt ,因此 VtV 更有效地提取。 S 中的奇異值按降序排列。

迭代分解生成組件 USV

如果 full = false(默認),則返回 "thin" SVD。對於 M \times N 矩陣 A ,在完整的因式分解中 UM \times M 並且 VN \times N 。而在細分解中,UM \times KVN \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

計算 AB 的廣義 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] 的有效數值秩。

迭代分解產生組件 UVQD1D2R0

廣義 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/正弦矩陣 CS 提供 multi-measure 多少 A 與多少 B ,並且 UV 提供測量這些方向的方向。

例子

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

相關用法


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