Eigen应用于Qt:常用操作总结

Eigen应用于Qt:常用操作总结

参考:

Eigen的官网解释:http://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html

在构造函数前使用

using namespace std;
using namespace Eigen;

pro:

INCLUDEPATH+=G:\eigen-eigen-b70bf4fad467

 注意:这个文件夹路径,到包含以下文件的文件夹名即可

Eigen应用于Qt:常用操作总结_第1张图片

需要包含的预处理内容 

#include
#include

 

目录

向量和矩阵的创建

初始化

单位阵的定义

常见运算

 


 

  • 向量和矩阵的创建

固定尺寸的数组和向量:

    //矩阵1
    Matrix2d m;
    m(0,0)= 1;
    m(0,1)= 2;
    m(1,0)= 3;
    m(1,1)= 4;//函数赋值的方法一
    cout<
    //向量1
    Vector3d vecf;
    vecf(0) = 1.666666666;
    vecf(1) = 2;
    vecf(2) = 3;
    cout<<"vecf:"<

 注意:在进行定义的时候,关键字中都出现了具体的数字,比如Matrix2d中的2,Vector3d中的3。

这种定义矩阵和向量的方式叫:使用固定尺寸(例如Matrix4f

但是,当矩阵行或者列的大小,向量的大小超过16,使用固定尺寸的定义方式就有些欠妥当,小于16,没有问题,固定尺寸的定义方式更有优势

尺寸超过16,我们使用动态尺寸,如下

矩阵:

MatrixXd part_1(20,20);

定义形式:MatrixXd name_for_Matrix(rowcol);

向量:

 VectorXd G(21);

定义形式:VectorXd name_for_Vector(size); 

  • 初始化

 初始化方式很多:

向量可以在定义的时候就初始化,也可以在定义后初始化:

    Vector3d vecs(1.0, 2.0, 3.0);//向量赋值方法
    cout<<"vec4d:"<
    //向量1
    Vector3d vecf;
    vecf(0) = 1.666666666;
    vecf(1) = 2;
    vecf(2) = 3;
    cout<<"vecf:"<

矩阵在定义后初始化:

    //矩阵1
    Matrix2d m;
    m(0,0)= 1;
    m(0,1)= 2;
    m(1,0)= 3;
    m(1,1)= 4;//函数赋值的方法一
    //矩阵2
    Matrix2d md;
    md<<4,3,
            2,1;
    cout<

 当然也可以循环赋值:

    MatrixXd A(4,4);
    for(int i = 0;i<4;i++)
    {
        for(int j = 1;j<4;j++)
        {
            A(i,j) = j;

        }
    }
    cout<<"A(4,4):"<

 

  • 单位阵的定义

单位阵的定义:下面以定义一个4x4的单位阵为例:

MatrixXd E = MatrixXd::Identity(4,4);//对角阵,全是1

MatrixXd name_for_Matrix = MatrixXd::Identity(size,size);

  • 常见运算

乘法:(其他的四则运算和乘法都差不多,通过相关的运算符将要运算的矩阵连接即可) 

    A = A*A;//矩阵和矩阵相乘
    cout<<"A(4,4):"<

求逆: 

cout<<"A.inverse():"<

转至: 

    Vector4d vecs1(1.0, 2.0, 3.0, 4.0);
    vecs1 = vecs1.transpose().eval();

 点乘:

    Vector4d vecs1(1.0, 2.0, 3.0, 4.0);

    Vector4d vecs2(1, 1.0, 1.0, 1.0);

    result = vecs1.dot(vecs2);

 

 

你可能感兴趣的:(Qt)