我想解決C++中非常大且稀疏的線性方程組系統。目前,我從eigen使用BiCGSTAB。它適用於小矩陣,但它需要的時間太長,我需要的矩陣大小爲40804x40804(未來可能會更大)。C++如何解決非常大的稀疏線性系統系統
我有一個很長的腳本,但我只是用的格式如下:
SparseMatrix<double> sj(40804,40804);
VectorXd c_(40804), sf(40804);
sj.reserve(VectorXi::Constant(40804,36)); //This is a very good estimate of how many non zeros in each column
//...Fill in actual number in sj
sj.makeCompressed();
BiCGSTAB<SparseMatrix<double> > handler;
//...Fill in sj, only in the entries that have been initialized previously
handler.analyzePattern(sj)
handler.factorize(sj);
c_.setZero();
c_=handler.solve(sf);
這需要的時間太長了!是的,該解決方案確實存在。 matlab中的稀疏函數似乎很好地處理了這個問題,但我需要在C++中才能連接到服務器。
我真的很感激你可以幫助我!
如果MATLAB做的做好你爲什麼不使用它在C++。 [鏈接](https://www.mathworks.com/help/matlab/matlab_external/calling-matlab-software-from-ac-application.html) – Logman
如果連接到服務器是至關重要的,也許你應該嘗試使用pari/gp ... – jaroslawj
確保在編譯器優化ON的情況下進行編譯,然後您可以嘗試直接求解像'Eigen :: SparseLU'(只需用'SparseLU'替換BiCGSTAB')或使用'IncompleteLUT'預處理程序在BICGSTAB。 – ggael