matlab并行特征值分解

时间:2013-10-10 00:35:54

标签: matlab parallel-processing eigenvector eigenvalue decomposition

我试图想出一个并行特征值分解的算法,但是我试过的算法没有超过matlab的eig算法,所以有谁知道matlab使用哪个算法用于eig函数? 还是有人能建议我一个很好的并行算法进行特征值分解吗?

2 个答案:

答案 0 :(得分:4)

MATLAB将LAPACK用于更高级别的线性代数。根据MATLAB的版本命令,它是英特尔的数学核心库(MKL):

>> version('-lapack')
ans =
Intel(R) Math Kernel Library Version 11.0.2 Product Build 20130124 for Intel(R) 64 architecture applications
Linear Algebra PACKage Version 3.4.1

英特尔MKL包含非常快速的BLAS和LAPACK实现,但它不是免费的。对于开源选项,请尝试EigenArmadillo。他们的API非常直观,而且非常快。如果你相信Eigen's claims,它们是最快的开放BLAS,它具有优于参考netlib LAPACK的API(IMO,一旦你查看Fortran版本,API声明就非常明显了!)

答案 1 :(得分:3)

您可以将ArmadilloOpenBLAS一起使用。两者都是开源的。最新版本的OpenBLAS还提供LAPACK功能。 OpenBLAS使用多个核心(即并行运行)。

使用Armadillo的eig_sym()功能时,请指定使用分而治之的方法。这对大型矩阵产生了很大的影响。例如:

eig_sym(eigval, eigvec, X, "dc")
不过,您还可以将基于Armadillo的代码与英特尔MKL而不是OpenBLAS相关联。 MKL还提供高度优化的LAPACK功能。