Transposition,conjugation
转置,共轭
共轭矩阵,余子式,
所有的矩阵和矢量都是由下面的模板变化来的:
Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>
预定义了常用的:
Matrix<float, 4, 4> 简写成Matrix4f
列矢量
Matrix<float, 3, 1> 简写成Vector3f
行矢量
Matrix<int, 1, 2> 简写成RowVector2i
有时候编译时,维度不知道,用动态的模板参数:
Matrix<double, Dynamic, Dynamic> 简写成MatrixXd, X表示动态,运行时才确定参数
Matrix<int, Dynamic, 1> 简写成VectorXi
带参数的构造函数:MatrixXf a(10,15), 表示10x15的矩阵
Matrix3f a;表示3x3的浮点矩阵
Matrix3f a(3, 3);也是合法的,为了提供一个统一的api
矩阵初始化:
MatrixXi a {
{1, 2}, // 第一行
{3, 4} // 第二行
}
逗号初始化:
Matrix3f m;
m << 1, 2, 3,
4, 5, 6,
7, 8, 9;
std::cout << m;
重新调整大小:
MatrixXd m(2,5);
m.resize(4,3);
小于16个元素时,固定大小的矩阵性能非常好。固定大小的矩阵实际就是数组。太大的矩阵采用固定小大会导致栈溢出。
a的转置赋给自身,当心aliasing问题,采用api如transposeInPlace; 但是对于矩阵的乘法来说,eigen会内置解决这个问题:
m=m*m;是可以的。
内部分两步:
tmp = m*m;
m=tmp;
如果想避免分配临时变量,可以采用c.noalias() += a*b;