• 使用 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;
    }
  • 相关阅读:
    iOS企业证书开发的APP证书过期时间监控
    事件冒泡,事件捕获
    倒计时
    获取多个div,点击第几个,显示第几个
    js继承
    javascript基础知识总结
    大型web系统高效应用方法(转载)
    数据库(内联,外联,交叉联)
    .net零碎基础知识点不完全小结
    C#的内存管理:堆、栈、托管堆与指针(转)
  • 原文地址:https://www.cnblogs.com/alliance/p/6785713.html
Copyright © 2020-2023  润新知