使用 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);
    cout << "The matrix A is:\n" << A << endl;
    cout << "The inversion of matrix A is:\n" << Ainv << endl;
    return 0;
}
时间: 2024-10-08 10:27:46

使用 Eigen 3.3.3 进行矩阵运算的相关文章

C++调用Matlab引擎及Eigen配置

这个周开始要着手实现网格水印的代码了,虽然还什么都不会,但也只能一步步摸索着往前走了. 我要实现的论文题目是<<Watermarking 3D Polygonal Meshes in the Mesh Spectral Domain>>,之前的博客中有过这篇论文的理论分析,看起来貌似不难,但动手实现起来的时候还是挺困难的.首先要解决的问题就是配置实验环境. 一开始我打算用Eigen对拉普拉斯矩阵进行特征值分解,因此就涉及到Eigen的配置.Eigen是一个开源的矩阵运算库,里面封装

[转]c++矩阵运算库Eigen

原文地址:http://www.cnblogs.com/goingupeveryday/p/5699053.html c++矩阵运算库Eigen Eigen 的简介和下载安装 最近因为要写机械臂的运动学控制程序,因此难免就要在C++中进行矩阵运算.然而C++本身不支持矩阵运算,Qt库中的矩阵运算能力也相当有限,因此考虑寻求矩阵运算库Eigen的帮助. Eigen是一个C++线性运算的模板库:他可以用来完成矩阵,向量,数值解等相关的运算.(Eigen is a C++ template libra

Duanxx的Design abroad: C++矩阵运算库Eigen 概要

一.概要 这两天想起来要做神经网络的作业了,要求用C++完毕神经网络的算法. 摆在面前的第一个问题就是,神经网络算法中大量用到了矩阵运算.可是C++不像matlab那样对矩阵运算有非常好的支持.本来准备自己写一个C++的矩阵运算的代码的,google了一下后.找到了几个不错的C++矩阵运算库,我选用的是Eigen这个C++矩阵运算库. Eigen有很丰富的功能: l  支持全部大小的矩阵运算,从非常小的大小固定的矩阵运算.到随意大的稠密矩阵的运算,甚至连稀疏矩阵的运算它也支持. l  支持当前全

Duanxx的Design abroad: C++矩阵运算库Eigen 概述

一.概述 这两天想起来要做神经网络的作业了,要求用C++完成神经网络的算法. 摆在面前的第一个问题就是,神经网络算法中大量用到了矩阵运算,但是C++不像matlab那样对矩阵运算有很好的支持,本来准备自己写一个C++的矩阵运算的代码的,google了一下后,找到了几个不错的C++矩阵运算库,我选用的是Eigen这个C++矩阵运算库. Eigen有非常丰富的功能: l  支持所有大小的矩阵运算,从很小的大小固定的矩阵运算,到任意大的稠密矩阵的运算,甚至连稀疏矩阵的运算它也支持. l  支持当前所有

Eigen库矩阵运算使用方法

Eigen库矩阵运算使用方法 Eigen这个类库,存的东西好多的,来看一下主要的几个头文件吧: --Core 有关矩阵和数组的类,有基本的线性代数(包含 三角形 和 自伴乘积 相关),还有相应对数组的操作. --Geometry 几何学的类,有关转换.平移.进位制.2D旋转.3D旋转(四元组和角轴相关) --LU 逻辑单元的类,有关求逆,求行列式,LU分解解算器(FullPivLU,PartialPivLU) --Cholesky 包含LLT和LDLT的乔里斯基因式分解法. (小科普:Chole

Eigen中的noalias(): 解决矩阵运算的混淆问题

作者:@houkai本文为作者原创,转载请注明出处:http://www.cnblogs.com/houkai/p/6349990.html 目录 混淆例子解决混淆问题混淆和component级的操作.混淆和矩阵的乘法总结 整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 混淆 在Eigen中,当变量同时出现在左值和右值,赋值操作可能会带来混淆问题.这一篇将解释什么是混淆,什么时候是有害的,怎么使用做. 例子 MatrixXi m

C++矩阵库Eigen的仿Matlab矩阵运算

与其他矩阵库相比,Eigen(Visit)相比,Eigen只需要拷贝所有include文件到指定位置,无需编译即可使用;此外,用法上模仿Matlab矩阵操作; 上述特点,使其具有很好的实用性. 附上测试代码,以便学习和使用. //http://eigen.tuxfamily.org/dox/group__QuickRefPage.html #include <iostream> #include <Eigen/Dense> using namespace std; using na

Eigen

C++矩阵处理工具--Eigen 最近和一些朋友讨论到了C++中数学工具的问题,以前总是很2地自己写矩阵运算,或者有时候在matlab里计算了一些数据再往C程序里倒,唉~想想那些年,我们白写的代码啊--人家早已封装好了!首先推荐几个可以在C++中调用的数学平台:eigen.bias.lapack.svd.CMatrix,本文着重eigen做以讲解,希望对各位有所帮助. 下面是本文主线,主要围绕下面几点进行讲解: ******************************************

Eigen介绍及简单使用

Eigen是可以用来进行线性代数.矩阵.向量操作等运算的C++库,它里面包含了很多算法.它的License是MPL2.它支持多平台. Eigen采用源码的方式提供给用户使用,在使用时只需要包含Eigen的头文件即可进行使用.之所以采用这种方式,是因为Eigen采用模板方式实现,由于模板函数不支持分离编译,所以只能提供源码而不是动态库的方式供用户使用. 矩阵的定义:Eigen中关于矩阵类的模板函数中,共有六个模板参数,常用的只有前三个.其前三个参数分别表示矩阵元素的类型.行数和列数. 矩阵定义时可