如何在我自己的C 中正确使用矩阵(EIGEN库)

How to correctly use a matrix (Eigen library) in my own class in C++?

本文关键字:EIGEN 我自己 自己的      更新时间:2023-10-16

我真的试图解决这个问题,我在stackoverflow上读了很多QA,但以某种方式没有任何帮助。

我正在尝试从特征图库中实现自己的矩阵和向量。我正在使用GNU GCC编译器。

使用Code ::块。

这是我的意思的简单示例,但这不是确切的代码,因为我使用了更多的矩阵和向量以及其他尺寸(4x4矩阵,2x4矩阵,4x1载体和2x1矢量(:

    class MYCLASS{
        private:
            VectorXd x;
            MatrixXd A;
        public:
            MYCLASS(double, double, double, double);
            double get_matval();
    };
    MYCLASS::MYCLASS(double deltaT, double q_var, double r1_var, double r2_var){
        x_m(0)=q_var;
        x_m(1)=r1_var;
        x_m(2)=r2_var;
        x_m(3)=0.0;
        A(0,0)= deltaT;
        A(0,1)= 0.0;
        A(1,0)= 0.0;
        A(1,1)= 0.0;
    }
    double MYCLASS::get_matval(){
        return A(0,0);
    }

1.当我创建一个myllass的对象时,如下:

MYCLASS myobject(10, 0.5, 0.1, 0.75);

==>编译很好,但是当它运行时,该程序以以下确切描述崩溃(请记住,我还有其他矩阵和向量(:

断言失败:索引> = 0&&索引<大小((,文件 f:......../eigen/src/core/densecoeffsbase.h,第425行

此应用程序已要求运行时终止它 不寻常的方式。请联系...

进程返回3(0x3(执行时间:2.131 S

2.如果我然后放在构造函数的开头:

    MYCLASS::MYCLASS(double deltaT, double q_var, double r1_var, double r2_var){
            VectorXd x(4);
            MatrixXd A(2,2);
            x_m(0)=q_var;
            x_m(1)=r1_var;
            ...and so on...

==>然后在构造对象==>无错误

==>但是当我想使用函数get_matval访问(0,0(时,如下:

MYCLASS myobject(10, 0.5, 0.1, 0.75);
double myvar = myobject.get_matval();

...它再次使用相同的错误消息崩溃。

你们可以帮忙吗?

即使您已经找到了解决方案,这是如何正确初始化(有限数量的(eigen矩阵:

MYCLASS::MYCLASS(double deltaT, double q_var, double r1_var, double r2_var)
                : x(4), A(2,2) { // use initializer list to construct x and A
    x << q_var, r1_var, r2_var, 0.0;
    A << deltaT, 0.0, 0.0, 0.0;
}