【推荐】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;
来源:oschina
链接:https://my.oschina.net/u/4228078/blog/3148317