zoukankan      html  css  js  c++  java
  • 使用 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;
    }
  • 相关阅读:
    乱七八杂
    转化跟踪设置说明
    Photoshop图象切片保存为网页HTML(DIV+CSS布局)的方法
    HTTP 错误 403.14
    打开asp出现An error occurred on the server when processing the URL
    ADODB.Connection 错误 '800a0e7a'
    修改客户端连接的服务器IP地址(内部使用)
    关于云计算的10个常见问题解答
    云安全的11个挑战及应对策略
    如何鉴别一个区块链项目的真假?
  • 原文地址:https://www.cnblogs.com/alliance/p/6785713.html
Copyright © 2011-2022 走看看