特征向量:Mathematica 与 LAPACK dgeev

计算科学 正则 拉帕克 特征值
2021-12-19 17:17:37

在过去的几个月里,我一直dgeev在 FORTRAN 中使用 LAPACK,花费数小时对 ~4000*4000 矩阵进行对角化。以这种方式求特征值和特征向量大约需要 2'75 小时。我认为 FORTRAN 应该比 Mathematica 更快,因为它通常用于此类任务。经过所有这些艰苦的工作和编码工作,我刚刚意识到 Mathematica 在不到 15 分钟的时间内完成了同样的工作。怎么了?

3个回答

LAPACK 例程 dgeev 依次调用 BLAS 库中的例程来执行更基本的线性代数,例如矩阵-矩阵乘法。dgeev 在您的问题上的缓慢性能很可能是由使用未高度优化的 BLAS 库引起的。

您知道您在 Fortran 代码中使用的是哪种 BLAS 实现?

dgeev 适用于需要所有特征值的小型矩阵。可能 Mathematica 正在使用更智能但完全不同的方法,例如 Krylov 子空间方法来为您的矩阵生成特征值。

LAPACK/BLAS 实现确实很重要,但即使使用参考 BLAS(通过 Numpy python 库),也只需不到 15 分钟(在 Core i7 笔记本电脑上)计算随机 4000*4000 实矩阵的特征值。

你的矩阵是真实的还是复杂的?你能从例如检查性能吗?R 或 python,只是为了排除 Fortran 代码出错的可能性?