2013-06-02 5 views
2

я компиляция программы, которая использует несколько методов Эйгена :: MatrixXd, и пока я не получаю ошибок при компиляции, запустив его я получаю следующее сообщение об ошибке:Эйген Assertion ошибки во время выполнения

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.

ответ

1

Поскольку Eigen::MatrixXd имеет размеры, определенные во время выполнения, проверки размера времени компиляции все отключены и отложены до времени выполнения.

В этом случае, похоже, вы назначаете матрицу динамического размера 15x15. Попробуйте выполнить двойную проверку и отладить размер этой динамической.

+0

Я использую 'Eigen :: MatrixXd', потому что размер зависит от переменной, поэтому я не могу использовать матрицу фиксированного размера. Действительно, в этот момент мне нужно, чтобы они были 15x15, что было бы проблемой? – joaocandre

+0

@joaocandre Нет проблем с дизайном. Просто используйте отладчик, чтобы убедиться, что размерность 15x15 при назначении. – Potatoswatter

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.

Смежные вопросы