运行时的Eigen Assertion错误

时间:2013-06-02 14:44:27

标签: c++ eigen

我正在编译一个使用多个Eigen :: MatrixXd方法的程序,虽然在编译时没有出现任何错误但运行它我得到以下错误:

darwin-pi2: /usr/include/Eigen/src/Core/Assign.h:498: Derived& Eigen::DenseBase<Derived>::lazyAssign(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Matrix<double, -1, -1>; Derived = Eigen::Matrix<double, 15, 15, 0, 15, 15>]: Assertion `rows() == other.rows() && cols() == other.cols()' failed.

我想这与Eigen矩阵有关,但我不明白Assertion rows() == other.rows() && cols() == other.cols()' failed的含义。

2 个答案:

答案 0 :(得分:1)

因为Eigen::MatrixXd具有在运行时确定的维度,所以编译时大小检查全部被禁用并延迟到运行时。

在这种情况下,您看起来像是从动态大小矩阵分配到15x15矩阵。尝试仔细检查并调试该动态的大小。

答案 1 :(得分:0)

在matlab中,矩阵m的索引从1开始。但在本征中,它从0开始。显示一个简单的例子。

#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
int main()
{
  MatrixXd m(2,2);
  m(0,0) = 3;  //  INDEX starts from 0, not 1
  m(1,0) = 2.5;
  m(0,1) = -1;
  m(1,1) = m(1,0) + m(0,1);
  std::cout << m << std::endl;
}

有关详细信息,请单击docs