我正在编译并尝试在平台上运行UMfPackLU<SparseMatrix<>>
例程Eigen 3.2.9
和UMFPACK v4.5
库。但我正在接受。TDM-GCC 5.1.0
Win64
Appcrash
exception code c0000005
我需要实现的是以下内容:
_ _ _ _
A = | P |, B = | R |, where P and Q are sparse and Z is 0 with 3 cols
| Q | | Z |
|_ _| |_ _|
X = A\B;
我在做什么(仅摘录)如下:
#define num_t double
...
SparseMatrix<num_t,RowMajor> A(P.rows()+Q.rows(), P.cols());
A.topRows(P.rows()) = P;
A.bottomRows(Q.rows()) = Q;
Matrix<num_t, Dynamic, 3> B(P.rows()+Q.rows(), 3);
B.topLeftCorner(P.rows(), 3) = R;
B.bottomLeftCorner(Q.rows(), 3) = S;
UmfPackLU<SparseMatrix<num_t>> solver(A.transpose()*A);
auto AtB = A.transpose()*B;
X.col(0) = solver.solve(AtB.col(0)); // @@@ segmentation error here @@@
X.col(1) = solver.solve(AtB.col(1));
X.col(2) = solver.solve(AtB.col(2));
注意SparseMatrix<>
是RowMajor
格式。
在调试时gdb
:我得到Program received signal SIGSEGV, Segmentation fault.
了上面标记的行。
而不是UmfPackLU<SparseMatrix<>>
, 解决SimplicialLLT<SparseMatrix<>>
,SimplicialLDLT<SparseMatrix<>>
或CholmodDecomposition<SparseMatrix<>>
工作正常。
提前感谢您的帮助。