我需要将 MATLAB 代码转换成 C++,但我坚持使用这条指令:
a = K\F
,其中 K
是一个大小为 n x n 的稀疏矩阵,F
是大小为 n 的列 vector 。
我知道使用 Eigen 库很容易解决这个问题 - 我试过 fullPivLu()
方法,我已经能够使用 Matrix 和 Vector 构建一个工作片段。
但是,我的K
是 SparseMatrix<double>
(而 F
是一个 VectorXd
)。我的声明:
SparseMatrix<double> K(nec, nec);
VectorXd F(nec);
似乎 SparseMatrix 没有 fullPivLu()
方法,也不是 lu()
一个。
事实上,我已经尝试了这两种不同的方法,取自文档:
//1.
MatrixXd x = K.fullPivLu().solve(F);
//2.
VectorXf x;
K.lu().solve(F, &x);
它们不起作用,因为 fullPivLu()
和 lu()
不是 'Eigen::SparseMatrix<_Scalar>'
的成员
所以,我想问:有没有办法使用 C++ 的 Eigen 求解线性方程组(MATLAB 的 mldivide,或“\”),其中 K 是一个稀疏矩阵?
感谢您的帮助。
最佳答案
Eigen::SparseLU 适合你吗?
关于c++ - 我可以使用 Eigen 求解线性方程组,形式为 Ax = b,A 是稀疏的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831716/