我需要解决在电阻网络研究中出现的一些大的(N~1e6)拉普拉斯矩阵。其余的网络分析正在使用boost图进行处理,如果可能的话我想保留C ++。我知道有很多很多C ++矩阵库,但似乎没有人在速度或可用性方面成为明确的领导者。此外,关于该主题的许多问题,在这里和其他地方似乎迅速转变为具有有限效用的洗衣清单。为了帮助自己和他人,我会尽量使问题简洁明了:
什么是能够有效处理以下要求的最佳库?
用最小的工作范例对答案充满热爱......
答案 0 :(得分:2)
Eigen非常好用,是我所知道的最快的库之一:
答案 1 :(得分:2)
如果你想编写自己的求解器,就简单性而言,很难超越Gauss-Seidel次迭代。更新步骤是一行,可以轻松并行化。 Successive over-relaxation(SOR)只是稍微复杂一点,收敛得更快。
Conjugate gradient编码也很简单,并且应该比其他迭代方法快得多。需要注意的重要一点是,您不需要形成完整的矩阵A,只需计算矩阵向量乘积A * b。一旦有效,您可以通过添加SSOR(对称SOR)等预处理器来再次提高融合率。
自己编写合理的最快解决方法可能是基于傅立叶的求解器。它主要涉及对右侧进行FFT,将每个值乘以其坐标的函数,并采用逆FFT。您可以使用像FFTW这样的FFT库,也可以自己动手。
所有这些的一个很好的参考是Arieh Iserles A First Course in the Numerical Analysis of Differential Equations。
答案 2 :(得分:0)
有很多相关的帖子,你可以看看。 我建议使用UMFPACK and BOOST's uBLAS Sparse Matrix
中使用的C ++和Boost :: ublas