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

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

需要包含的预处理内容 

#include<Eigen/Eigen>
#include<Eigen/Dense>

 

目录

向量和矩阵的创建

初始化

单位阵的定义

常见运算

 


 

  • 向量和矩阵的创建

固定尺寸的数组和向量:

    //矩阵1
    Matrix2d m;
    m(0,0)= 1;
    m(0,1)= 2;
    m(1,0)= 3;
    m(1,1)= 4;//函数赋值的方法一
    cout<<m<<endl;//打印矩阵m
    cout<<"rows:"<<m.rows()<<endl<<"cols:"<<m.cols()<<endl;//打印行数和列数
    cout<<"size:"<<m.size()<<endl;//返回所有的系数个数
    //向量1
    Vector3d vecf;
    vecf(0) = 1.666666666;
    vecf(1) = 2;
    vecf(2) = 3;
    cout<<"vecf:"<<vecf<<endl;

 注意:在进行定义的时候,关键字中都出现了具体的数字,比如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:"<<vecs<<endl;
    //向量1
    Vector3d vecf;
    vecf(0) = 1.666666666;
    vecf(1) = 2;
    vecf(2) = 3;
    cout<<"vecf:"<<vecf<<endl;

矩阵在定义后初始化:

    //矩阵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<<md<<endl;//矩阵赋值方法二

 当然也可以循环赋值:

    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):"<<A<<endl;

 

  • 单位阵的定义

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

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

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

  • 常见运算

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

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

求逆: 

cout<<"A.inverse():"<<A.inverse()<<endl;//求逆

转至: 

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

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值