Toriyung

导航

eigen库的一些使用

求矩阵的特征值/特征向量

Eigen::MatrixXd MatrixA;
Eigen::EigenSolver<Eigen::MatrixXd> eigen_solver(MatrixA);

Eigen::VectorXcd values = eigen_solver.eigenvalues();
Eigen::VectorXcd values = eigen_solver.eigenvectors();

 

判断矩阵是否相等(在一定精度下)

  这里一个例子用来判断矩阵A是否为对称矩阵

Eigen::MatrixXd MatrixA;
Eigen::MatrixXd MatrixA_T;

MatrixA = MatrixA_T.transpose();    //求转置

if(MatrixA.isApprox(MatrixA_T))  
{
  return 1;  
}

 

"<<"操作符的使用注意事项

  当出现下面的报错

 

  很可能是<<输入的个数和MatrixXd或VectorXd自身的初始化个数不同,如

Eigen::VectorXd A;
A.resize(2);

A<<1;    //妄想多次输入(先输入一部分),错误

A<<1,1,1;    //输入过多个,错误

A<<1,1;    //一次性输入A的size同等数量,正确

   

  如果是这个错误:此声明没有存储类或类型说明符

   则是没有放在函数内而是函数外或类声明之内

 

Block块操作

Eigen::MatrixXd Q = Eigen::MatrixXd::Zero(5, 5);
Eigen::MatrixXd Q_j = Eigen::MatrixXd::Ones(4, 4);

Q.block<1, 1>(1, 1) = 1;    //第一行第一列为开始的左上角的1*1矩阵块
Q.block<4, 4>(1, 1) = Q_j;    //第一行第一列为开始的左上角的4*4矩阵块

上面对Q矩阵作块操作,<>内为要操作的子块大小,()为要操作的子块开始位置(左上角)

如原矩阵Q为:

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

第一次操作后为

0 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

第二次操作后为

0 0 0 0 0
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1

 

posted on 2023-03-15 21:26  Toriyung  阅读(215)  评论(0编辑  收藏  举报