Matrix
初始化:
Matrix<double, ros, cols> m;
MatrixXd m(x, y)//初始化大小
Matrix3d//特殊大小(不超过4)和数据类型
置0、1、常数、单位阵
Matrix3d m = Eigen::Matrix3d::Zero();//定义的时候使用临时变量
Eigen::MatrixXd::Zero(rows, cols);//随意指定大小的临时变量
Eigen::MatrixXd::Identity(rows, cols);
m.setZero();
m.setOnes();
m.setIdentity();
m.setRandom();
m.setConstant();
赋值:
m<<a, b, c
d, e, f,
g, h, i;
m.row(n)=v;//用vector或者vector的切片给matrix的行赋值,不会引起歧义,是可以进行的
索引:
m.block(start_ros, start_col, rows, col)
m.row()
m.col()//这两种是block的特殊情况
Vector:
初始化:
特殊的Matrix
Vector4f
Vector3d v(1, 2, 3, 4)//
Vector3d(1, 2, 3)临时向量
origin_pt << m_sourcePointCloud[ix],1;//还可以这样操作,升维
索引:
v.block(,,,)//vector是一种特殊的matrix,所以matrix可以用的vector也可以
v.segment(start, num)
v.head(num)
v.tail(num)
求模:
v.norm()
v.squaredNorm()//模长的平方
动态MatrixXd
Eien::MatrixXd m;
m = ....(作为左值,其大小由右侧确定)
A.conservativeResize(x, y)//动态矩阵确定大小
A.setZero()//全部设置为0
求解方程
求解方程Ax=b
#include <eigen3/Eigen/Householder>
A.colPivHouseholderQr().solve(b)
A.inverse()*b