一、向量与矩阵的形式
1.
所有矩阵和向量都是Matrix模板类的对象
Matrix的模板参数是Matrix<typename Scalar,int RowAtCompileTime,int ColsAtCompileTime> 分别是标量类型 如(int、 float
),行数,列数
同时可以用typedef覆盖
如 typedef Matrix <float ,4,4> Matrix4f;
2.向量 是矩阵的一种特殊情况 一行或一列
typedef MAtrix <float ,3,3> Vector 3f;
3.行数列数可以未知 即动态定义
tydef Matrix<double,Dynamic,Dynamic> MatrixXd;
二、定义向量和矩阵
Matrix3f a; //3x3的矩阵 未初始化
MatrixXf b; //动态大小的矩阵 当前为0x0 未分配系数
三、初始化矩阵,向量
1.
//矩阵
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);
//向量
VectorXd v(2);
v(0)=4;
v(1)=v(0)-1
2.逗号初始化
Matrix3f m;
m<<1,2,3,4,5,6,7,8,9;
四、调整大小
m.rows() 返回行数
m.cols() 返回列数
m.size()返回系数的个数
m.resize() 调整动态大小
五。分配和调整大小
分配是使用将矩阵复制到另一个矩阵中的操作operator=
MatrixXf a(2,2);
MatrixXf b(3,3);
a=b; //自动调整左侧矩阵的大小,使其与右侧的大小的矩阵大小匹配
六、矩阵的加减法
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
Matrix2d a;
a<< 1,2,3,4;
MatrixXd b(2,2);
b<<2,3,1,4;
cout<<a+b;
cout<<a-b;
cout<< "Doing a+=b"
a+=b;
cout<< a;
Vector3d v(1,2,3);
Vector3d w(1,0,0);
cout<<-v+w-v;
七。点乘(内积)和叉乘(外积)
点积dot() 叉积cross()
参考一个点乘和叉乘 的算法和几何意义
Vectorsd v(1,2,3);
Vector3d w(0,1,2);
cout<<v.dot(w);
double dp=v.adjoint()*w; //将内积自动转换为标量
cout<<dp;
cout<<v.cross(w);
八。转置与共轭
转置:行列互换
共轭: