• 使用 Eigen 3.3.3 进行矩阵运算


    Eigen是一个能够进行线性代数运算的C++开源软件包,包含矩阵和矢量操作,Matlab中对矩阵的大多数操作都可以在Eigen中找到。

    最近需要计算厄米特矩阵的逆,基于LLT分解和LDLT分解,自己写了几个代码,但精度不是很高,所以考虑了使用Eigen,精度和准确性还是蛮高的。

    网址: http://eigen.tuxfamily.org/index.php?title=Main_Page

    1. 如何在代码中使用Eigen的函数

    在Linux中编译C++代码,Eigen是不需要安装的,只需要把它解压后的路径添加到编译C++时头文件的搜索路径中即可。

    C++ 在编译时,对头文件的搜索顺序为:

    (1) 当前目录;

    (2) g++编译时在命令行中-I指定的路径;

    (3) C++的环境变量CPLUS_INCLUDE_PATH (C的则是C_INCLUDE_PATH)

    (4) 内定目录 (它不是用$PATH环境变量指定的,而是在安装gcc时配置的prifix指定的路径)

    基于上述的方法,我们可以将Eigen的路径保存在环境变量CPLUS_INCLUDE_PATH中:

    export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/pwork01/p679fen/applications/eigen"

    注:可以将这条命令放入~/.bashrc文件中。

    2. 使用Eigen求矩阵的逆

    Eigen中的操作和函数基于矩阵的不同分为两种:Dense linear algebra 和 Sparse linear algebra. 这里主要使用Dense matrix.

    使用LDLT分解法求解厄米特矩阵的逆(求解线性方程AA-1=I的解):

    #include <iostream>
    #include <Eigen/Dense>
    
    using namespace std;
    using namespace Eigen;
    
    int main(int argc, char *argv[])
    {
        Matrix2f A, Ainv;
        Matrix2f I= Matrix2f::Identity(2,2); // I is an identity matrix
        A << 2,-1,-1,3;
        Ainv= A.ldlt().solve(I);    // ldlt() can be replaced by other decomposition solvers
        cout << "The matrix A is:
    " << A << endl;
        cout << "The inversion of matrix A is:
    " << Ainv << endl;
        return 0;
    }
  • 相关阅读:
    【题解】Red-Blue Graph Codeforces 1288F 上下界费用流
    【题解】The Magician HDU 6565 大模拟
    HAOI2018游记
    【题解】【THUSC 2016】成绩单 LOJ 2292 区间dp
    【题解】【雅礼集训 2017 Day5】远行 LOJ 6038 LCT
    【题解】Catering World Finals 2015 上下界费用流
    《无问西东...》
    为了世界的和平~一起上caioj~~~!
    新征程~起航!
    bzoj4240: 有趣的家庭菜园(树状数组+贪心思想)
  • 原文地址:https://www.cnblogs.com/alliance/p/6785713.html
Copyright © 2020-2023  润新知