PROPACK


http://stats.stackexchange.com/questions/159325/what-fast-algorithms-exist-for-computing-truncated-svd

快速计算truncated svd的算法有哪些?

宽泛地讲,有两种方法计算特征值分解和奇异值分解:一种是对角化矩阵,并且产生所有特征值或者奇异值;另一种是用迭代的算法产生部分特征值或者奇异值。

 

有两种对称化矩阵的方法例如:

 

因此,truncate svd,可以转化为特征值分解问题。

求特征值特征向量方法中,最简单迭代算法是幂法。

1.    Initialize random x.

2.    Update xAx.

3.    Normalize xx/x.

4.    Goto step #2 unless converged.

所有更复杂的算法都是基于幂法迭代的思想。比如,针对稀疏非对称矩阵的Arnoldiiteration 方法,针对稀疏对称矩阵的 Lanczos  iteration 方法,还有其他变种方法。

 

下列几本参考书中都有介绍:(其中第一本很经典)

  1. Golub & Van Loan, Matrix Computations
  2. Trefethen & Bau, Numerical Linear Algebra
  3. Demmel, Applied Numerical Linear Algebra
  4. Saad, Numerical Methods for Large Eigenvalue Problems

     几乎所有的数理统计包(Matlab,R, Python numpy 里面的库)都是用的同样的Fortran库来实现特征值或者奇异值分解,这些库就是 LAPACK和 ARPACK. ,其中ARPACK.主要是Arnoldi/Lanczositerations实现 。例如在matlab中的函数:eig, eigs, svd, svds.  svd是利用lapack实现了全分解,svds利用ARPACK实现部分分解,但实际上是eigs.对称化矩阵的封装而已。

      还有一个Fortran库是PROPACK,它包括一系列计算大的稀疏矩阵奇异值分解方法,svd子程序是基于部分重正交化的lanczos双对角算法实现的。具体内容可以参考一下几篇论文,

1.         Lanczos bidiagonalizationwith partial reorthogonalization   (Rasmus Larsen 1998)

2.        Augmentedimplicitly restarted Lanczos bidiagonalization methods ( Baglama& Reichel, 2005)

3.         Finding structure with randomness:Probabilistic algorithms for constructing approximate matrix decompositions.(Halko et al. 2009)

                                    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值