我正在使用 Eigen,试图最小化内存分配,并想做这样的事情:
Eigen::SparseMatrix A(...);
A.setFromTriplets(...);
Eigen::MatrixXd X = <here some data>;
Eigen::SparseLU<Eigen::SparseMatrix<double>> solver;
solver.compute(A);
// here comes the crucial thing I want to do:
X = solver.solve(X);
文档没有说太多。我已经用许多矩阵A
和向量对它进行了测试X
,这似乎有效,但对于矩阵还没有X
。我也没有测试 Eigen 是否检测到这一点,然后默默地分配一个临时的。
此外,知道这应该有效还是不应该有效,我会感到更安全。
由于 SparseLU 有方法matrixL()
,而matrixU()
后者又有方法solveInPlace()
,我想答案是肯定的。但不幸的是,我不能简单地使用这些方法,因为我还必须应用排列。