我正在研究一个电路项目,我正在尝试计算电路所有节点的电压。我知道电路是一个完美的网格,所以每个节点最多只能接触 8 个其他节点。这意味着我最终试图解决一个系统:
L v = i
其中L至少有一个 1000x1000 矩阵,其中每行只有 9 个非零。所以,它真的很稀疏。
我尝试使用SoPlex、LaPACK和SuperLU(最后两个通过Armadillo)解决它。但一切都太慢了。在 10000x10000 上,我最好的是 18 秒。
我知道还有另一种软件可以完成与我相同的任务,它是用 Python 编写的,它使用 Scipy(scipy.sparse.linalg准确地说)速度快得离谱(可以在不到一秒的时间内解决这些系统)。
是否有与 Scipy 等效的库或将 Scipy 移植到 C++ 的方法?由于其他原因,我需要用 C++ 编写软件...
编辑:我通过犰狳调用 SuperLU/LaPACK 的代码很简单:
voltages[i] = spsolve(laplacians[i],iflow[i],"lapack");
或者
voltages[i] = spsolve(laplacians[i],iflow[i],"superlu");
之前没有给出任何选项。