5 视觉SLAM十四讲读书笔记P40-P52( 五 )

<< matrix_33.transpose() << endl;// 转置cout << "sum: " << matrix_33.sum() << endl;// 各元素和cout << "trace: " << matrix_33.trace() << endl;// 迹cout << "times 10: \n" << 10 * matrix_33 << endl;// 数乘cout << "inverse: \n" << matrix_33.inverse() << endl;// 逆cout << "det: " << matrix_33.determinant() << endl;// 行列式
这段代码展示了一些常用的矩阵运算 , 下面是一些解释:
这些运算在线性代数中经常用到 , 尤其是在求解方程组和特征值、特征向量等问题中 。
下面是一组输出示例:
random matrix: -0.9816160.3967521.32985-0.0557061 -0.772753 -0.06925630.236567-0.4710760.975621transpose: -0.981616 -0.05570610.2365670.396752 -0.772753-0.4710761.32985 -0.06925630.975621sum: -0.361194trace: -0.779747times 10: -9.816163.9675213.2985-0.557061 -7.72753-0.6925632.36567-4.710769.75621inverse: -0.465131.20915-0.1006260.16754-0.183321-0.369492-0.052870.6448570.09406det: -0.0352479
// 特征值// 实对称矩阵可以保证对角化成功SelfAdjointEigenSolver eigen_solver(matrix_33.transpose() * matrix_33);cout << "Eigen values = \n" << eigen_solver.eigenvalues() << endl;cout << "Eigen vectors = \n" << eigen_solver.eigenvectors() << endl;
这段代码计算了实对称矩阵 .() *的特征值和特征向量 , 输出了特征值和特征向量的矩阵形式 。
输出的特征值矩阵是一个列向量 , 每个元素表示对应的特征值 。输出的特征向量矩阵是一个矩阵 , 每一列表示对应的特征向量 。特征值和特征向量按照特征值的大小从大到小排列 。
C++中可以通过定义类来封装数据和方法 , 并通过创建对象来访问它们 。语法格式是:类名 对象名;其中 , 类名表示定义好的类 , 对象名表示你创建的对象 , 可以调用该类中的成员函数和成员变量 。
SelfAdjointEigenSolver eigen_solver(matrix_33.transpose() * matrix_33);
这行代码使用了 er 模板类 , 它是 Eigen 中专门用于对实对称矩阵求特征值和特征向量的类 。它的模板参数是矩阵的类型 。在这里 , 参数类型是  , 表示一个
的双精度实数矩阵 。
该行代码的实际操作是对矩阵 .() *求特征值和特征向量 。由于该矩阵是实对称矩阵 , 因此可以通过 er 求解 , 得到的特征值和特征向量是实数类型的 , 分别存储在 .() 和 .() 中 。
SelfAdjointEigenSolver eigen_solver(A);
其中 , 是矩阵的类型 , A是需要求解特征值和特征向量的矩阵 , 是一个er类型的对象 , 用于存储求解的结果 。
这个语句定义了一个名为的对象 , 类型为er , 其中是一个模板参数 , 表示矩阵类型 。这个对象的构造函数使用一个矩阵A作为参数 , 用于计算这个矩阵的特征值和特征向量 。
// 解方程// 我们求解 matrix_NN * x = v_Nd 这个方程// N的大小在前边的宏里定义 , 它由随机数生成// 直接求逆自然是最直接的 , 但是求逆运算量大Matrix matrix_NN= MatrixXd::Random(MATRIX_SIZE, MATRIX_SIZE);matrix_NN = matrix_NN * matrix_NN.transpose();// 保证半正定Matrix v_Nd = MatrixXd::Random(MATRIX_SIZE, 1);
这段代码定义了一个随机的×的矩阵和一个× 1 的随机向量 v_Nd 。其中 ,  先与其转置相乘 , 使其成为半正定矩阵 。这是为了确保其可逆 , 从而方便求解方程 。