Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是大型拉普拉斯矩阵的快速简单解算器?_C++_Linear Algebra_Sparse Matrix_Numerical Methods - Fatal编程技术网

C++ 什么是大型拉普拉斯矩阵的快速简单解算器?

C++ 什么是大型拉普拉斯矩阵的快速简单解算器?,c++,linear-algebra,sparse-matrix,numerical-methods,C++,Linear Algebra,Sparse Matrix,Numerical Methods,我需要解一些在电阻网络研究中出现的大型(N~1e6)拉普拉斯矩阵。其余的网络分析都是用Booad图处理的,如果可能的话,我想留在C++中。我知道有很多C++的矩阵库,但似乎没有人在速度和可用性方面是一个明显的领导者。此外,在这里和其他地方,关于这一主题的许多问题似乎很快就演变成了实用性有限的清单。为了帮助我自己和其他人,我将尽量使问题简洁明了,易于回答: 能够有效处理以下需求的最佳库是什么 矩阵类型:对称对角占优/拉普拉斯 尺寸:非常大(N~1e6),无需动态调整大小 稀疏性:极端(每行/列最

我需要解一些在电阻网络研究中出现的大型(N~1e6)拉普拉斯矩阵。其余的网络分析都是用Booad图处理的,如果可能的话,我想留在C++中。我知道有很多C++的矩阵库,但似乎没有人在速度和可用性方面是一个明显的领导者。此外,在这里和其他地方,关于这一主题的许多问题似乎很快就演变成了实用性有限的清单。为了帮助我自己和其他人,我将尽量使问题简洁明了,易于回答:

能够有效处理以下需求的最佳库是什么

  • 矩阵类型:对称对角占优/拉普拉斯
  • 尺寸:非常大(N~1e6),无需动态调整大小
  • 稀疏性:极端(每行/列最多5个非零项)
  • 所需操作:求解A*x=b中的x和mat/vec乘法
  • 语言:C++(C行)
  • 优先级:代码的速度和简单性。我真的宁愿避免为这个问题学习一个全新的框架,或者手动编写太多的帮助程序代码

额外的爱,以最小的工作示例回答…

有很多相关的帖子,你可以看看。
我建议C++和Booo::UBLAS在

本征中使用是非常好的,也是我知道的最快的库之一:


如果您想编写自己的求解器,就简单性而言,很难击败迭代。更新步骤只有一行,并且可以很容易地并行化。(SOR)只是稍微复杂一点,收敛速度要快得多

代码也很简单,并且应该比其他迭代方法收敛得更快。需要注意的重要一点是,不需要形成完整的矩阵A,只需计算矩阵向量积A*b。一旦这起作用,您可以通过添加诸如SSOR(对称SOR)之类的预条件器再次提高收敛率

也许最快的解决方法,是合理的编写自己是一个基于傅立叶解算器。它基本上包括对右侧进行FFT,将每个值乘以其坐标的函数,然后进行逆FFT。您可以使用FFT库,如,也可以自己使用


Arieh Iseres是所有这些的一个很好的参考资料。

我相信KLU非常适合您的需要: