求问C++的Eigen矩阵运算库有没有提供两个矩阵对应元素相乘的方法

Python032

求问C++的Eigen矩阵运算库有没有提供两个矩阵对应元素相乘的方法,第1张

#includeusing namespace std#define M 6#define N 3void mulMatri(int x[M][N],int y[N][M],int z[M][M],int m,int n)int main(){int i,j int x[M][N],y[N][M],z[M][M] for(i=0i>x[i][j] for(i=0i>y[i][j] mulMatri( x,y,z,M,N) cout<

头文件

#include <eigen3/Eigen/core>

#include <eigen3/Eigen/dense>

#include <eigen3/Eigen/Geometry>

//如果想要省略eigen3,需要在CMakeLists.txt文件当中添加:

include_directories("/usr/include/eigen3")

矩阵定义

Eigen::Matrix matrix_name = Eigen::Matrix <double, 3, 4>//知道矩阵的大小3*4大小的矩阵

Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>matrix_notknow_size//不知道矩阵的大小 ,这样定义

Eigen::MatrixXd matrix_nSize//更简单地定义矩阵,不知道矩阵的大小。

矩阵数据格式的变换

matrix_nSize.cast<double>()  //把矩阵数据格式转换成double格式,因为矩阵只能相同格式地相乘。

基本的矩阵操作:转置、求逆、求迹、求和、数乘、行列式

matrix_nSize.transpose() //转置

matrix_nSize.sum() //矩阵各元素求和

matrix_nSize.trace() //求迹

matrix_nSize.inverse() //求逆

10 * matrix_nSize //矩阵数乘,数乘是可以不同类型来做的.

matrix_nSize.determinant() //求行列式

矩阵特征值求解

matrix_real = Eigen::Matrix3d::Random()

matrix_realSymentry = matrix_real.transpose() * matrix_real//这是一个实对称矩阵

Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d>eigen_solver (matrix_realSymentry) //特征求解器

cout <<"Eigen values = " <<eigen_solver.eigenvalues() <<endl//输出特征值

cout <<"Eigen vectors = " <<eigen_solver.eigenvectors() <<endl//输出特征向量

矩阵QR分解求方程的解

x = matrix_NN.colPivHouseholderQr().solve(v_Nd)

/********************************************************

旋转矩阵、旋转向量、四元数的使用

********************************************************/

旋转向量的定义

Eigen::AngleaAxisd rotation_vector (M_PI/4, Eigen::Matrix3d::Identity())

rotation_matrix = rotation_vector.toRoationMatrix()//把旋转向量转换成旋转矩阵

rotation_matrix = rotation_vector.Matrix()// 另外一种旋转矩阵的表达形式

欧拉角

Eigen::vector3d euler_angles = rotation_matrix.eulerAngles(2, 1, 0)// z y x 顺序, yaw, pitch, row

变换矩阵

Eigen::Isometry3d T = Eigen::Isometry3d::Identity()

T.rotate(rotation_vector)

T.pretranslate(Eigen::Vector3d(1, 3, 4))

cout <<"Transform matrix is \n" <<T.matrix() <<endl

cout <<"Rotation vector is \n" <<rotation_vector.axis() <<endl

四元数

Eigen::Quaterniond q = Eigen::quaterniond (rotation _vector)

cout <<" quaterniond = \n" <<q.coeffs() <<endl

v_rotated = q *  v

参考书目《视觉SLAM十四讲:从理论到实践》