Eigen矩阵的定义和基本运算

非 Y 不嫁゛ 提交于 2019-12-27 18:40:16

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

 矩阵的定义

#include <iostream>
#include <Eigen/Core>
// 稠密矩阵的代数运算(逆,特征值等)
#include <Eigen/Dense>

int main()
{
    // 声明一个2*3的float矩阵
	Eigen::Matrix<float, 2, 3> matrix_23;
    // 例如 Vector3d 实质上是 Eigen::Matrix<double, 3, 1>,即三维向量
	Eigen::Vector3d v_3d;
    // Matrix3d 实质上是 Eigen::Matrix<double, 3, 3>
	Eigen::Matrix3d matrix_33 = Eigen::Matrix3d::Zero(); //初始化为零
    Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > matrix_dynamic;
    // 更简单的
	Eigen::MatrixXd matrix_x;
    //初始化单位阵
    Eigen::Matrix3d mat = Eigen::Matrix3d::Identity();

    matrix_23 << 1, 2, 3, 4, 5, 6;
    v_3d << 3, 2, 1;



    for (int i = 0; i<2; i++) 
    {
		for (int j = 0; j<3; j++)
			cout << matrix_23(i, j) << "\t";
		cout << endl;
	}
    //强制类型转换cast<type>()
    Eigen::Matrix<double, 2, 1> result = matrix_23.cast<double>() * v_3d;

    matrix_33 = Eigen::Matrix3d::Random();      // 随机数矩阵

}

常用方法

cout << matrix_33.transpose() << endl;      // 转置
cout << matrix_33.sum() << endl;            // 各元素和
cout << matrix_33.trace() << endl;          // 迹
cout << 10 * matrix_33 << endl;               // 数乘
cout << matrix_33.inverse() << endl;        // 逆
cout << matrix_33.determinant() << endl;    // 行列式
cout << matrix_33.col(0) << std::endl;      //输出第0列

// 特征值
// 实对称矩阵可以保证对角化成功
Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> eigen_solver(matrix_33.transpose()*matrix_33);
cout << "Eigen values = \n" << eigen_solver.eigenvalues() << endl;
cout << "Eigen vectors = \n" << eigen_solver.eigenvectors() << endl;

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!