C++矩阵运算QT应用之Eigen库

前言

本文主要描述在c++中应用Eigen进行矩阵(向量)的表示运算,以及Eigen库的下载和配置。

一. Eigen库介绍、下载及配置

Eigen是C++中可以用来调用并进行矩阵计算的一个库,里面封装了一些类,需要的头文件和功能如下:
在这里插入图片描述
有关Eigen的详细介绍可以查看其官网主页:http://eigen.tuxfamily.org/dox/index.html

  • 下载
    Eigen的下载地址如下:http://eigen.tuxfamily.org/index.php?title=Main_Page#Download
    在网页右上方选择选择不同版本及格式的压缩包,我这里选择的最新(2023.4.24)发布版本3.4.0的zip文件,点击直接进行下载。
  • 配置
    (1)将下载的压缩包进行解压;
    ----------------在VS中配置------------------
    右键 项目属性—》配置属性—》C/C++—》常规—》附加包含目录(对话框右边),在对应条款右侧的编辑框中添加解压的Eigen文件夹完整地址目录即可。(如引用下图)
    在这里插入图片描述
    ----------------在QT中配置------------------
    在QT creator中新建控制台应用项目,在define bulid system中选择qmake,下一步选择MinGW构建套件。完成项目创建后,在项目下的pro文件中添加:INCLUDEPATH += D:\Program Files\eigen3,如下图:
    在这里插入图片描述
    PS:要在命令窗口中显示结果,需要设置:左侧菜单栏项目–》运行–》勾选在终端运行 即可。
    在这里插入图片描述
二. 使用

(1)Eigen库的引用–一个栗子

#include <QCoreApplication>
#include <iostream>
#include <Eigen/Dense>
//typedef Eigen::MatrixXd Matrix;
//typedef  Eigen::VectorXd Vector;
using namespace Eigen;

using namespace std;
int main(int argc, char *argv[])
{
   
    QCoreApplication a(argc, argv);
    //    Matrix m(3,3);
    MatrixXd m(3,3);
    m<<1,2,3,
        4,5,6,
        7,8,9;
    //    Vector v(3);
    VectorXd v(3);
    v<<1,2,3;
    Vector3d w(11,22,33);
//    cout<<"m*v=\n"<<m*v<<endl;
//    cout<<m.block(0,0,2,2)<<endl;  //取子块
//    cout<<m.block<2,2>(0,0)<<endl;   // 与上等价
//    cout<<m.row(2)<<endl;   //取第2行
//    m.row(2)<<11,12,13;   //第2行赋值
//    cout<<m.row(2)<<endl;
//    MatrixXd mm;
//    mm=m;
//    cout<<mm<<endl;
    Eigen::Matrix<int, 3, 4> mat1;
    Eigen::Matrix<double, 3, Dynamic> mat2;
    Eigen::Matrix2cd mat3;

    return a.exec();
}

(2)矩阵的定义
矩阵模板函数中一共包含六个模板参数,前三个是比较常用的,分别表示矩阵元素的类型、行数、列数。在矩阵定义的时候可以使用 Dynamic 来表示行或者列数未知。

template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
class Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols >

Eigen::Matrix<int, 3, 4> mat1;              //  3x4 的 int 类型的矩阵 mat1
Eigen::Matrix<double, 3, Dynamic> mat2;     //  3x? 的 double 类型的矩阵 mat2
Eigen::Matrix<float, Dynamic, 4> mat3;      //  ?x4 的 float 类型的矩阵 mat3
Eigen::Matrix<long, Dynamic, Dynamic> mat4; //  ?x? 的 long 类型的矩阵 mat4

在 Eigen 中 typedef 了很多矩阵的类型,通常命名为 Matrix 前缀加一个长度为 1∼4的字符串 S 的命名——MatrixS。其中 S 可以用来判断该矩阵类型,数字 n 表示 n ∗ n,n 的范围是2∼4,字母 d、f、i、c 表示 double、float、int、complex,另外 X 表示行或者列数未知的矩阵。


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

windawdaysss

觉得文章有用,可以请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值