【发布时间】:2022-08-14 01:29:36
【问题描述】:
假设我们已经计算了svdJulia 中的矩阵 A 通过svd(A)。我们如何计算排名r考虑到我们已经有了它的奇异值分解,在 Julia 中该矩阵 A 的近似值?
标签: matrix julia linear-algebra numerical-methods
假设我们已经计算了svdJulia 中的矩阵 A 通过svd(A)。我们如何计算排名r考虑到我们已经有了它的奇异值分解,在 Julia 中该矩阵 A 的近似值?
标签: matrix julia linear-algebra numerical-methods
我建议如下:
using LinearAlgebra
A=rand(10,20)
svd_fact = svd(A)
function r_rank_approx(svd::SVD,r::Int)
@assert 1 ≤ r
n,m = size(svd)
u,s,v = svd
r = min(r,min(n,m))
u[:,1:r]*Diagonal(s[1:r])*v[:,1:r]'
end
r_rank_approx(svd_fact,2)
这个想法是只使用完整 SVD 中的第一个 r 奇异值。
笔记:如果您有大矩阵,则有专门的算法可以直接计算截断的 SVD,请参见 TSVD.jl 示例。
【讨论】: