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