簡體   English   中英

如何在C ++中自己的類中正確使用矩陣(本征庫)?

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

我確實試圖解決此問題,並且在Stackoverflow上閱讀了很多QA,但實際上並沒有任何幫助。

我正在嘗試使用Eigen庫中的矩陣和向量來實現Class。 我在GNU GCC編譯器中使用Code :: Blocks。

這是我的意思的簡單示例,但這不是確切的代碼,因為我使用了更多的矩陣和向量以及其他大小(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.創建MYCLASS對象時,如下所示:

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

==>編譯是好的,但是當它運行時,程序將以以下確切描述崩潰(請記住,我還有其他矩陣和向量):

斷言失敗:索引> = 0 &&索引<size(),文件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訪問A(0,0)時,如下所示:

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

double myvar = myobject.get_matval();

...它再次崩潰,並顯示相同的錯誤消息。

你們能幫忙嗎?

即使您已經找到解決方案,也可以通過以下方法正確初始化(有限數量的)本征矩陣:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM