矩阵
定义
静态矩阵
Eigen::Matrix<double, 500, 500> matrix_NN;
动态矩阵
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> matrix_NN;
初始化矩阵
matrix_NN = Eigen::MatrixXd::Random(500, 500);//初始化为随机矩阵
matrix_NN = Eigen::MatrixXd::Identity(500, 500);//初始化为单位矩阵
matrix_NN = Eigen::MatrixXd::Zero(500, 500);//初始化为零矩阵
注意:维度太大的矩阵,如果定义成静态矩阵会报错,所以维度太大的直接定义为静态矩阵,然后再初始化一下就行
有一点需要强调: 虽然我们可以使用任何维度的矩阵去赋值或者初始化matrix_NN,但是始终没有改变它是动态矩阵的性质,也就是维数运行过程始终可以变化,这一点儿不同于静态矩阵,静态矩阵编译时就确定了维度,运行时不能变。
补充:静态矩阵和动态矩阵的区别:
动态矩阵和静态矩阵:动态矩阵是指其大小在运行时确定,静态矩阵是指其大小在编译时确定。
MatrixXd:表示任意大小的元素类型为double的矩阵变量,其大小只有在运行时被赋值之后才能知道。
Matrix3d:表示元素类型为double大小为3*3的矩阵变量,其大小在编译时就知道。
赋值
法一:
Eigen::Matrix3f R;
R <<
1, 0, 2,
0, 5, 4,
0, 0, 1;
Eigen::Vector3f T;
T <<
50,0,0;//是一个一个输入的,与写的形式无关,所以最后输出还是列向量
法二:
Eigen::Matrix4f matrix_trans_sphere;
matrix_trans_sphere(0, 0) = 1;//这种只能给0,0位置赋值为1
求逆
Eigen::Matrix3f R;
Eigen::Matrix3f R_;
R <<
1, 0, 2,
0, 5, 4,
0, 0, 1;
R_ = R.inverse();//矩阵求逆