如何修复 Eigen::<int>NaturalOrdering>::MatrixType' 没有名为 'isCompressed' 的成员
How to Fix Eigen::NaturalOrdering<int> >::MatrixType' has no member named 'isCompressed'
我想使用 SparseQR 或 SparseLU 方法来求解具有稀疏矩阵的线性系统。我正在使用特征库来实现此目的。问题是此方法会给出错误,代码不起作用。 我正在使用 Eclipse C++ 编程,使用 MinGW 编译器
我已经使用了 Eigen 库中的 bicgstab 方法并且它正在工作,但现在使用稀疏方法出现了错误。
这是我想用于求解线性系统的代码,只是更改方法名称和参数之一,它适用于其他方法,但不适用于稀疏方法
SparseQR<MatrixXd, NaturalOrdering<int>> solver;
solver.analyzePattern(A);
solver.factorize(A);
x = solver.solve(y);
x,A 和 y 属于 MatrixXd 类。
此代码适用于 bicgstab 方法,语法相同。问题是出现以下错误:
src/src/SparseQR/SparseQR.h:381:66: error: 'const class Eigen::SparseQR<Eigen::Matrix<double, -0x000000001, -0x000000001>,Eigen::NaturalOrdering<int> >::MatrixType' has no member named 'isCompressed' src/src/SparseQR/SparseQR.h:381:66: error: 'const class Eigen::SparseQR<Eigen::Matrix<double, -0x000000001, -0x000000001>,Eigen::NaturalOrdering<int> >::MatrixType' has no member named 'outerIndexPtr'
,我不知道热修复它。
如果您对可能的解决方案有任何想法,我将不胜感激。感谢您抽出宝贵时间
如评论中所述,SparseQR
仅适用于稀疏矩阵。如果出于某种原因,您的输入矩阵A
作为密集矩阵传递,您可以使用A.sparseView()
进行转换,但您首先应该更喜欢将其存储为(压缩的(稀疏矩阵。另请注意,SparseQR
的模板参数必须是SparseMatrix
:
void foo(Eigen::MatrixXd const &A, Eigen::VectorXd const &y, Eigen::VectorXd& x)
{
Eigen::SparseQR<Eigen::SparseMatrix<double>, Eigen::NaturalOrdering<int> > solver;
solver.compute(A.sparseView());
x = solver.solve(y);
}
如果您的矩阵A
实际上是密集的(或"不是很稀疏"(,那么通常只使用密集求解器会更有效,例如
void foo(Eigen::MatrixXd const &A, Eigen::VectorXd const &y, Eigen::VectorXd& x)
{
Eigen::FullPivHouseholderQR<Eigen::MatrixXd> solver;
solver.compute(A);
x = solver.solve(y);
}
相关文章:
- EASTL矢量<向量<int>>连续的
- 如何修复 Eigen::<int>NaturalOrdering>::MatrixType' 没有名为 'isCompressed' 的成员
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- C 字符串比较“祝您好运”&gt;“再见”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- C 操作员&gt;&gt;与突变器过载
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 是否需要使用 - &gt;运算符在C 中调用成员函数时
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- 错误c++visual studio c2227左侧'->;Init';必须指向类/结构/联合/泛型类型
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- ``这个''不能用this-&gt;指针变量
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 使用shared_ptr<字符串>转换为一个无序集合<字符串>
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾