当前位置 : 主页 > 编程语言 > 其它开发 >

C++:Eigen库

来源:互联网 收集:自由互联 发布时间:2022-07-03
了解C++的Eigen库,主要内容来自:https://blog.csdn.net/hongge_smile/article/details/107296658 ,并加入自己的笔记。 介绍 Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and rel

了解C++的Eigen库,主要内容来自:https://blog.csdn.net/hongge_smile/article/details/107296658
,并加入自己的笔记。

介绍

Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms

Eigen是一个有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法的C ++开源库。

eigen官网链接:http://eigen.tuxfamily.org/index.php?title=Main_Page
文档:http://eigen.tuxfamily.org/dox/

安装

环境:MacOS+Clion

下载:http://eigen.tuxfamily.org/index.php?title=Main_Page
image

使用分两种情况:1、直接用;2、打包好再用

直接使用

在CMakeLists文件中加上:

include_directories(解压地址)
编译安装后使用
#编译
cd eigen-3.3.9
mkdir build
cd build
cmake ..

#安装
make install

头文件在:/usr/local/include/eigen3
静态库:/usr/local/lib/engines-3

在CMakeLists文件中加上:

find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})

最后附上Windows上安装:https://blog.csdn.net/huangjunsheng123/article/details/112380581

简单使用

库中头文件和文件中的类介绍:
image
一般为了省事,可以直接导入#include <Eigen/Dense> 或者#include <Eigen/Eigen>

矩阵生成
    //矩阵定义和初始化
    MatrixXd m(2,2);   // MatrixXd 表示的是动态数组,初始化的时候指定数组的行数和列数
    m(0,0) = 3;               //m(i,j) 表示第i行第j列的值,这里对数组进行初始化
    m(1,0) = 2.5;
    m(0,1) = -1;
    m(1,1) = m(1,0) + m(0,1);
    cout <<"m=\n"<<m <<endl;     // eigen重载了<<运算符,可以直接输出eigen矩阵的值

    Matrix2d c;
    c << 1, 2,
            3, 4;
    cout <<"c=\n"<<c << endl;

    MatrixXd d = MatrixXd::Random(3, 3);            //初始化动态矩阵m,使用Random函数,初始化的值在[-1,1]区间内,矩阵大小3X3
    d = (d + MatrixXd::Constant(3, 3, 1.2)) * 50;   // MatrixXd::Constant(3, 3, 1.2)初始化3X3矩阵,矩阵里面的数值为常量,全部为1.2
    // Eigen重载了+ 运算符,两个矩阵有相同的行数和列数即可相加,对应位置上的值相加
    cout << "d =" << endl << d << endl;
矩阵运算
    //矩阵操作
    cout<<"转置\n"<<c.transpose()<<endl;
    cout<<"伴随\n"<<c.adjoint()<<endl;
    cout << "行列式: " << c.determinant() <<endl;
    cout << "逆矩阵\n" << c.inverse() <<endl;
    cout << "相加:\n"<<m+c<<endl;
    VectorXd v(3);
    v << 1, 2, 3;                                   //逗号初始化,英文:comma-initializer,Eigen未提供c++11 的{}初始化方式
    cout << "矩阵*向量 =\n"<< d * v << endl;
参考

1、Eigen库的学习(一)
2、https://www.cnblogs.com/cc111/p/9354924.html
3、https://www.cnblogs.com/jerry323/p/9097264.html
4、https://blog.csdn.net/jiajiading/article/details/103369058

上一篇:快手这款推荐新算法,我爱了~
下一篇:没有了
网友评论