目录
安装只需要把http://eigen.tuxfamily.org/index.php?title=Main_Page#Download的包下载下来,然后解压,把Eigen目录拿出来就行了,不用编译成so什么的!!
比如是这个目录/home/work/my_lib/Eigen
有github的mirror:https://github.com/eigenteam/eigen-git-mirror
#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
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 << m << std::endl;
}
编译:
g++ -I /home/work/my_lib/ my_program.cpp -o my_program
运行结果:
3 -1
2.5 1.5
参考https://blog.csdn.net/y363703390/article/details/78407346
注意,eigen的vector默认是个列向量:
Eigen::Vector3d v1(1,2,3);
td::cout << "here is v1:" << v1 << std::endl;
// 输出:
// here is v1:1
// 2
// 3
向量点积是dot,而cross product只对size为3的vector生效
VectorXf和MatrixXf可以搞出指定size的向量和矩阵:
首先装一下mkl
然后在编译的时候加上(我也不知道后面这坨哪个比较有用。。):
-DEIGEN_USE_MKL_ALL -msse -msse2 -msse3 -lmkl_core -lmkl_gf_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_def -lmkl_mc3
链接时加上
-ldl
参考的是http://eigen.tuxfamily.org/dox-3.2/TopicUsingIntelMKL.html
其中的-DEIGEN_USE_MKL_ALL
相当于在cpp文件一开头定义如下宏,然后再include相关eigen库:
#define EIGEN_USE_MKL_ALL
截取从startRow开始blockRows行,以及从startCol开始blockCols列的小矩阵出来。
inline Block<Derived> block(Index startRow, Index startCol, Index blockRows, Index blockCols)
{
return Block<Derived>(derived(), startRow, startCol, blockRows, blockCols);
}
/** This is the const version of block(Index,Index,Index,Index). */
inline const Block<const Derived> block(Index startRow, Index startCol, Index blockRows, Index blockCols) const
{
return Block<const Derived>(derived(), startRow, startCol, blockRows, blockCols);
}