Eigen应用于Qt:常用操作总结
参考:
Eigen的官网解释:http://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html
在构造函数前使用
using namespace std;
using namespace Eigen;
pro:
INCLUDEPATH+=G:\eigen-eigen-b70bf4fad467
注意:这个文件夹路径,到包含以下文件的文件夹名即可
需要包含的预处理内容
#include
#include
目录
向量和矩阵的创建
初始化
单位阵的定义
常见运算
固定尺寸的数组和向量:
//矩阵1
Matrix2d m;
m(0,0)= 1;
m(0,1)= 2;
m(1,0)= 3;
m(1,1)= 4;//函数赋值的方法一
cout<
//向量1
Vector3d vecf;
vecf(0) = 1.666666666;
vecf(1) = 2;
vecf(2) = 3;
cout<<"vecf:"<
注意:在进行定义的时候,关键字中都出现了具体的数字,比如Matrix2d中的2,Vector3d中的3。
这种定义矩阵和向量的方式叫:使用固定尺寸(例如Matrix4f
)
但是,当矩阵行或者列的大小,向量的大小超过16,使用固定尺寸的定义方式就有些欠妥当,小于16,没有问题,固定尺寸的定义方式更有优势
尺寸超过16,我们使用动态尺寸,如下
矩阵:
MatrixXd part_1(20,20);
定义形式:MatrixXd name_for_Matrix(row,col);
向量:
VectorXd G(21);
定义形式:VectorXd name_for_Vector(size);
初始化方式很多:
向量可以在定义的时候就初始化,也可以在定义后初始化:
Vector3d vecs(1.0, 2.0, 3.0);//向量赋值方法
cout<<"vec4d:"<
//向量1
Vector3d vecf;
vecf(0) = 1.666666666;
vecf(1) = 2;
vecf(2) = 3;
cout<<"vecf:"<
矩阵在定义后初始化:
//矩阵1
Matrix2d m;
m(0,0)= 1;
m(0,1)= 2;
m(1,0)= 3;
m(1,1)= 4;//函数赋值的方法一
//矩阵2
Matrix2d md;
md<<4,3,
2,1;
cout<
当然也可以循环赋值:
MatrixXd A(4,4);
for(int i = 0;i<4;i++)
{
for(int j = 1;j<4;j++)
{
A(i,j) = j;
}
}
cout<<"A(4,4):"<
单位阵的定义:下面以定义一个4x4的单位阵为例:
MatrixXd E = MatrixXd::Identity(4,4);//对角阵,全是1
MatrixXd name_for_Matrix = MatrixXd::Identity(size,size);
乘法:(其他的四则运算和乘法都差不多,通过相关的运算符将要运算的矩阵连接即可)
A = A*A;//矩阵和矩阵相乘
cout<<"A(4,4):"<
求逆:
cout<<"A.inverse():"<
转至:
Vector4d vecs1(1.0, 2.0, 3.0, 4.0);
vecs1 = vecs1.transpose().eval();
点乘:
Vector4d vecs1(1.0, 2.0, 3.0, 4.0);
Vector4d vecs2(1, 1.0, 1.0, 1.0);
result = vecs1.dot(vecs2);