Eigen库常用的矩阵操作(持续更新)

Eigen库常用的矩阵操作(持续更新)

常见的矩阵操作记录,主要是Eigen库的矩阵操作,包括矩阵的矩阵加法和减法、乘法、矩阵的转置、矩阵的求逆、矩阵的迹、矩阵的迹、矩阵的求和

0. 常见的Eigen矩阵类型(每种类型只举例一次,其他的都是类似的):


Eigen::Matrix<数据类型, 行数, 列数>  数据类型;
举例应用:  Eigen::Matrix matrix_33;

Matrix3d // 3行3列的double类型矩阵
举例应用:  Eigen::Matrix3d matrix_33 = Eigen::Matrix3d::Zero(); 

动态设置Eigen矩阵类型大小的方法:
Eigen::Matrix<数据类型, Eigen::Dynamic, Eigen::Dynamic> 数据类型;
举例应用:  Eigen::Matrix matrix_dynamic;

另一种设置动态大小的方法:
举例应用:  Eigen::MatrixXd matrix_dynamic;

1. 矩阵加法和减法:

举例代码如下所示:

#include 
#include 

int main() {
    // 创建两个3x3的矩阵
    Eigen::Matrix3d A;
    Eigen::Matrix3d B;

    // 初始化A和B
    A << 1, 2, 3, 
         4, 5, 6, 
         7, 8, 9;
    B << 9, 8, 7, 
         6, 5, 4, 
         3, 2, 1;

    // 输出矩阵A和B
    std::cout << "Here is the matrix A:\n" << A << std::endl;
    std::cout << "Here is the matrix B:\n" << B << std::endl;

    // 矩阵加法
    Eigen::Matrix3d C = A + B;
    std::cout << "A + B = " << C << std::endl;

    // 矩阵减法
    Eigen::Matrix3d D = A - B;
    std::cout << "A - B = " << D << std::endl;

    // 复制矩阵A到矩阵E
    Eigen::Matrix3d E = A;
    std::cout << "A copied to E = " << E << std::endl;

    // 复制矩阵B到矩阵F
    Eigen::Matrix3d F = B;
    std::cout << "B copied to F = " << F << std::endl;

    return 0;
}

输出结果:
Here is the matrix A:
1 2 3
4 5 6
7 8 9
Here is the matrix B:
9 8 7
6 5 4
3 2 1
A + B = 10 10 10
        10 10 10
        10 10 10
A - B = -8 -6 -4
        -2  0  2
         4  6  8
A copied to E = 1 2 3
                4 5 6
                7 8 9
B copied to F = 9 8 7
                6 5 4
                3 2 1

2. 矩阵乘法:

举例应用代码如下所示:

#include 
#include 

int main() {
    // 创建两个矩阵
    Eigen::Matrix3d A;
    Eigen::Matrix3d B;

    // 初始化A和B
    A << 1, 2, 3, 
         4, 5, 6, 
         7, 8, 9;
    B << 9, 8, 7, 
         6, 5, 4, 
         3, 2, 1;

    // 矩阵乘法
    Eigen::Matrix3d C = A * B;
    std::cout << "A * B = " << C << std::endl;

    return 0;
}

输出结果:

A * B =  30  24  18
         84  69  54
         138 114  90

3. 矩阵的转置

举例应用代码如下所示:

#include 
#include 

int main() {
    // 创建一个矩阵
    Eigen::Matrix3d A;

    // 初始化矩阵A
    A << 1, 2, 3,
         4, 5, 6,
         7, 8, 9;

    // 矩阵的转置
    Eigen::Matrix3d A_transpose = A.transpose();
    std::cout << "A^T = " << A_transpose << std::endl;

    return 0;
}

输出结果:

A^T = 1 4 7
      2 5 8
      3 6 9

4. 矩阵的逆

举例应用代码如下所示:

    #include 
    #include 

    int main() {
    // 创建一个矩阵
    Eigen::Matrix3d A;

    // 初始化矩阵A
    A << 2, 1, 1,
         9, 8, 5,
         1, 1, 2;

    // 矩阵的逆
    Eigen::Matrix3d A_inverse = A.inverse();
    std::cout << "A^(-1) = " << A_inverse << std::endl;

    return 0;
}

输出结果:

A^(-1) =  1.1 -0.1 -0.3
         -1.3  0.3 -0.1
          0.1 -0.1  0.7

5. 矩阵的迹

举例应用代码如下所示:

#include 
#include 


int main() {
   Eigen::Matrix3d A;
   A << 1, 2, 3,
        4, 5, 6,
        7, 8, 9;

   double trace = A.trace();
   std::cout << "矩阵的迹为:" << trace << std::endl;

   return 0;
}


输出结果:
矩阵的迹为:15

6. 矩阵的求和

举例应用代码如下所示:


#include 
#include 


int main() {
  Eigen::Matrix3d A;
  A << 1, 2, 3,
       4, 5, 6,
       7, 8, 9;

  double sum = A.sum();
  std::cout << "矩阵的和为:" << sum << std::endl;

  return 0;
}


输出结果:
     矩阵的和为:45

你可能感兴趣的:(SLAM,Eigen,矩阵,线性代数)