eigen下载和配置
1.eigen下载地址:http://eigen.tuxfamily.org/index.php?title=Main_Page
2.配置VS2013:
先解压下载的eigen,然后解压重命名eigen3.3.6(自己喜欢的文件夹名):
然后,打开vs,新建一个project,添加main函数:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
MatrixXd m = MatrixXd::Random(3, 3); //随机生成3*3的double型矩阵
m = (m + MatrixXd::Constant(3, 3, 1.2)) * 50; //MatrixXd::Constant(3,3,1.2)表示生成3*3的double型矩阵,该矩阵所有元素均为1.2
cout << "m =" << endl << m << endl;
VectorXd v(3); // 定义v为3*1的double型向量
v << 1, 2, 3; // 向量赋值
cout << "m * v =" << endl << m * v << endl;
system("pause");
return 0;
}
接下来配置eigen,习惯在调试->属性->配置属性-> C/C++ ->常规->附加包含目录 中添加eigen路径:
事实证明这样添加eigen没有用,尴尬。
查了一下看别人有的从解决方案右键打开属性页进行添加的,但我试了下也是不行。
后来想起来配置opencv时一劳永逸的方法:在属性管理器中右键打开属性页进行添加eigen路径:
再次运行,没有bug,输出结果:
3.项目用到的eigen部分:
解44矩阵之间的变换矩阵X:AX=B((inv A * A * X = inv A * B)->X = inv A * B)
涉及到用eigen求解逆矩阵,顺便把eigen求转置矩阵,伴随矩阵,矩阵的行列式和矩阵和向量相乘都学习一下。
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
//随机生成3*3的double型矩阵
//MatrixXd::Constant(4,4,1.2)表示生成4*4的double型矩阵,该矩阵所有元素均为1.2
MatrixXd Mat1 = MatrixXd::Random(4, 4);
Mat1 = (Mat1 + MatrixXd::Constant(4, 4, 1.2)) * 50;
MatrixXd Mat2 = MatrixXd::Random(4, 4);
Mat2 = (Mat2 + MatrixXd::Constant(4, 4, 1.2)) * 50;
MatrixXd Mat3;
Mat3 = Mat1.inverse() * Mat2; //A*X=B的矩阵,求解X(Mat3)
cout << "Mat1 =" << endl << Mat1 << endl;
cout << "Mat2 =" << endl << Mat2 << endl;
cout << "Mat1的转置矩阵:\n" << Mat1.transpose() << endl;
cout << "Mat1的伴随矩阵:\n" << Mat1.adjoint() << endl;
cout << "Mat1的逆矩阵:\n" << Mat1.inverse() << endl;
cout << "Mat1的行列式:\n" << Mat1.determinant() << endl;
cout << "Mat3 =" << endl << Mat3 << endl;
VectorXd Vec(4); // 定义v为4*1的double型向量
Vec << 1, 2, 3, 4; // 向量赋值
cout << "Mat1 * Vec =" << endl << Mat1 * Vec << endl;
system("pause");
return 0;
}
运行程序,输出结果:
革命尚未成功,同志仍需努力!