Matrix类的前三个模板参数:
Matrix
Eigen提前typedef了许多类型:
typedef Matrix Matrix4f;
列向量(我们通常所指的向量就是指的列向量):
typedef Matrix Vector3f;
行向量:
typedef Matrix RowVector2i;
事先不知道矩阵的大小(Dynamic Size),可以使用Dynamic特殊值
typedef Matrix MatrixXd;
同样,事先不知道维度的列向量:
typedef Matrix VectorXi;
不知道列数的动态矩阵:
Matrix
实例化一个类:
Matrix3f a;
MatrixXf b;
两个矩阵均未初始化。
MatrixXf a(10,15);
VectorXf b(30);
动态矩阵a具有10*15的大小,其系数(coefficient)已分配(allocated)但尚未初始化(uninitialized)。向固定尺寸(fixed-size)的矩阵传递尺寸大小也是合法的,例如下面:
Matrix3f a(3,3);
#include
#include
使用名称空间Eigen ;
int main()
{
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);
std :: cout << “这是矩阵m:\n” << m << std :: endl;
VectorXd v(2);
v(0)= 4;
v(1)= v(0) - 1;
std :: cout << “这是向量v:\n” << v << std :: endl;
}
输出为:
这是矩阵m:
3 -1
2.5 1.5
这是向量v:
4
3
Matrix3f m;
m << 1,2,3,
4,5,6,
7,8,9;
std :: cout << m;
输出为:
1 2 3
4 5 6
7 8 9
可以通过rows(),cols()和size()检索矩阵的当前大小。这些方法分别返回行数,列数和系数数。调整动态大小矩阵的大小由resize()方法完成。
#include
#include
使用名称空间Eigen ;
int main()
{
MatrixXd m(2,5);
m.resize(4,3);
std :: cout << “矩阵m的大小”
<< m.rows()<< “x” << m.cols()<< std :: endl;
std :: cout << “它有” << m.size()<< “系数” << std :: endl;
VectorXd v(2);
v.resize(5);
std :: cout << “向量v的大小为” << v.size()<< std :: endl;
std :: cout << “作为矩阵,v的大小”
<< v.rows()<< “x” << v.cols()<< std :: endl;
}
输出为:
矩阵m的大小为4x3
它有12个系数
向量v的大小为5
作为矩阵,v的大小为5x1
赋值调整大小
赋值是使用将矩阵复制到另一个矩阵的操作operator=。Eigen自动调整左侧的矩阵大小,使其与右侧大小的矩阵大小相匹配。例如:
MatrixXf a(2,2);
std :: cout << “a的大小为” << a.rows()<< “x” << a.cols()<< std :: endl;
MatrixXf b(3,3);
a = b;
std :: cout << “a现在的大小为” << a.rows()<< “x” << a.cols()<< std :: endl;
输出为:
a的大小为2x2
a,现在大小为3x3
当然,如果左侧是固定大小,则不允许调整大小。