今天需要用到一些矩阵运算的函数,本来想自己写,但是实在是麻烦,而且有些难度,于是搜寻了一下发现了eigen这个c/c++环境下的矩阵运算的库
记录一下配置过程
eigen是以源代码的形式发布的
在官方网址https://gitlab.com/libeigen/eigen/-/releases下载源代码
任选一个压缩包下载即可
解压后进入文件夹中,复制整个Eigen文件夹
放置到vs2019的以下目录(或其他版本的相应目录下)
整个复制进去即可,复制完成后include文件夹如下所示
说明一下这样等于是我们是用这个库的同时直接编译了源代码
虽然有点奇怪,但是这是官方维基推荐的方式,如果觉得变扭也可以手动将源代码编译成dll之后加入库依赖中
以下是一些使用eigen的例子
//用MatrixXd类创建一个2*2矩阵 并依次指定元素
MatrixXd m1(2, 2);
m1(0, 0) = 2;
m1(1, 0) = 0;
m1(0, 1) = 0;
m1(1, 1) = 2;
//使用Matrix3d创建一个3*3的方阵,用重载过的<<运算符来初始化它
Matrix3d m3;
m3 <<1, 2, 3,
4, 5, 6,
7, 8, 9;
//MatrixXd::Random创建一个3*3的随机矩阵,每个矩阵元素取-1~1的随机值
MatrixXd m2 = MatrixXd::Random(3, 3);
//MatrixXd::Random创建一个3*3的常量矩阵,每个矩阵元素都是1
MatrixXd m4 = MatrixXd::Constant(3, 3,1);
//用Matrix模板创建一个元素类型为float,4*4的矩阵
Matrix<float, 4, 4> matrix4f;
//返回矩阵的行列数
m1.rows();
m1.cols();
//两个矩阵的加减乘运算,直接使用重载过的+-*号即可
Matrix2d a;
a << 1, 2,
3, 4;
MatrixXd b(2, 2);
b << 2, 3,
1, 4;
std::cout << "a + b =\n" << a + b << std::endl;
std::cout << "a - b =\n" << a - b << std::endl;
std::cout << "a * b =\n" << a * b << std::endl;
//分别是返回转置矩阵,共轭矩阵,伴随矩阵,带有inplace后缀的方法不返回值,直接变换该矩阵
m1.transpose();
m1.conjugate();
m1.adjoint();
m1.transposeInPlace();
m1.adjointInPlace();
//创建一个三维向量
Vector3d v1(1, 2, 3);
//矩阵右乘向量
cout << m2*v1 << endl;
//创建两个三维向量并进行点积和叉积
Vector3d v(1, 2, 3);
Vector3d w(0, 1, 2);
v.dot(w);
v.cross(w);