2

我正在编译一个使用多个 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.

我想这与特征矩阵有关,但我不明白是什么Assertion rows() == other.rows() && cols() == other.cols()' failed意思。

4

2 回答 2

1

因为Eigen::MatrixXd在运行时确定了尺寸,所以编译时大小检查都被禁用并推迟到运行时。

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

于 2013-06-02T14:54:39.160 回答
0

在 matlab 中,矩阵的索引m从 1 开始。但在 eigen 中,它从 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;
}

有关更多信息,请单击文档

于 2016-07-02T03:47:45.150 回答