C++ 矩阵运算工具箱Eigen
来源:互联网 发布:小型企业网络搭建 编辑:程序博客网 时间:2024/06/08 09:08
1. 简介
因为要把MATLAB的算法写成C++的程序,涉及到的矩阵运算较多,所以需要找个好用的矩阵运算库。现成的矩阵运算库很多,但是使用的难易程度和计算性能差别很大。如果一个库安装比较方便,并且符号规则和MATLAB相似,那就最好了。最终看到这里有个推荐,发现了Eigen这个库。
Eigen的最大优势是使用方便,且跨平台。它本身仅有许多头文件组成,使用时做的就是把用到的头文件和代码放在一起就可以了。另外用户众多(如google),这样有问题时查找也比较方便。它本身也有个wiki,因此说明性文档也算全面。
2. 安装配置
使用Eigen非常简单。这里介绍VS2008工程使用Eigen的配置。从官网上下载压缩包后,解压在硬盘任意位置,新建c++ project,在project-properties-c/c++-general -Additional Include Directories添加Eigen文件夹的路径,如"XXXXX\EIGEN\eigen\"。CPP的文件头包含
- #include <Eigen/Dense>
- using namespace Eigen;
即可使用。
3. 示例程序
Eigen中常用的数据类型是matrix和vector,对于浮点运算,Eigen 支持float和double。另外,matrix和vector分为固定大小(Fixed size)和动态大小(Dynamic size)两种。以matrix为例,做如下定义:
- Matrix3f a;
- MatrixXf b;
- MatrixXf c(10,15);
通过官网上一段完整的程序,可以了解使用Eigen以及定义matrix或vector的基本方法。
- #include <iostream>
- #include <Eigen/Dense>
- using namespace Eigen;
- int main()
- {
- MatrixXd m(2,2);
- m(0,0) = 3;
- m(1,0) = 2.5;
- m(0,1) = -1;
- m(1,1) = m(1,0) + m(0,1);
- std::cout << "Here is the matrix m:\n" << m << std::endl;
- VectorXd v(2);
- v(0) = 4;
- v(1) = v(0) - 1;
- std::cout << "Here is the vector v:\n" << v << std::endl;
- }
输出结果为:
- Here is the matrix m:
- 3 -1
- 2.5 1.5
- Here is the vector v:
- 4
- 3
4. 常用操作
4.1 初始化
当固定大小vector小于4个变量时,可以采用如下方法初始化:
- Vector2d a(5.0, 6.0);
- Vector3d b(5.0, 6.0, 7.0);
- Vector4d c(5.0, 6.0, 7.0, 8.0);
一般而言,Eigen提供了用逗号初始化的语法格式:
- Matrix3f m;
- m << 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9;
- 1 2 3
- 4 5 6
- 7 8 9
除此之外,和MATLAB类似,Eigen也支持初始化为特殊矩阵或向量,这里简单总结如下:
MATLABEIGENzeros()setZero()rand()setRandom()eye()setIdentity()ones()setOnes()
转自:http://blog.csdn.net/mr_xue/article/details/15504479
0 0
- C++ 矩阵运算工具箱Eigen
- C++ 矩阵运算工具箱Eigen
- Eigen矩阵运算
- Eigen矩阵运算库
- C++矩阵运算库--Eigen
- 文章标题Eigen的矩阵运算使用
- Eigen矩阵运算库使用记录
- Eigen矩阵的运算(二)
- Eigen矩阵运算库使用记录
- 矩阵迹运算介绍及C++/OpenCV/Eigen的三种实现
- C++矩阵库Eigen的仿Matlab矩阵运算
- C++ 矩阵库 eigen
- C++ 开源矩阵 运算工具——Eigen
- Eigen 矩阵运算库在实际项目中的使用
- Eigen之矩阵、向量、标量的操作运算
- 分别用Eigen和C++(OpenCV)实现图像(矩阵)转置
- 矩阵运算(C++)
- Eigen中的变换矩阵
- uva-350
- mysql merge表介绍
- 用Gradle 构建你的android程序
- layout
- MATLAB入门教程
- C++ 矩阵运算工具箱Eigen
- WebLogic优化大全
- MATLAB常用数学函数
- EraseTrim Discard Sanitize详解
- 航班信息检索与查询(基数排序)
- .Net 托管代码和非托管代码的区别
- 动态规划算法
- simHash 简介以及java实现
- MySQL存储引擎比较