Eigen常用操作
Eigen3安装: ubuntu如何安装Eigen
include_directories (/usr/include/Eigen/)
这篇博客主要内容有:
- Eigen常用头文件
- Eigen矩阵和向量的基本定义与初始化
- 高级初始化
- 行向量RowVectorXd
- 块赋值 - 基本运算函数
- 常用块操作
- 计算特征值和特征向量
- Array类, ArrayXf , ArrayXXf
- 解线性最小二乘
- 齐次 min||Mx||,分不带约束和带约束条件
- 非齐次 min||Mx + b||,分不带约束和带约束添加
1. 常用头文件
#include <Eigen/Dense> //包含了下面的Core/Geometry/LU/Cholesky/SVD/QR/Eigenvalues模块
#include <Eigen/Core> // 包含Matrix和Array类,基础的线性代数运算和数组操作
#include <Eigen/LU> // 包含求逆,行列式,LU分解
#include <Eigen/Geometry> //包含旋转,平移,缩放,2维和3维的各种变换。
#include <Eigen/Cholesky> //包含LLT和LDLT Cholesky分解
#include <Eigen/SVD> //包含SVD分解
#include <Eigen/QR> //包含QR分解
#include <Eigen/Eigenvalues> //包含特征值,特征向量分解
#include <Eigen/Sparse> //包含稀疏矩阵的存储和运算
#include <Eigen/Eigen> //包含Dense和Sparse
2. 基本定义及初始化
Eigen::Matrix<double,2,2> m;
m << 1,2,3,4;
Eigen::MatrixXf m1(2,3);
m1 << 1,2,3,
4,5,6;
Eigen::Matrix3d m2 = Eigen::Matrix3d::Identity();//Eigen::Matrix3d::Zero();
Eigen::Matrix3d m3 = Eigen::Matrix3d::Random(); //随机初始化
Eigen::Vector3f v1 = Eigen::Vector3f::Zero();
Eigen::Vector3d v2(1.0, 2.0, 3.0);
Eigen::VectorXf v3(20); //维度为20的向量,未初始化.
v3 << 1.0 , 2.0 , 3.0;
cout << m1(1,1) << endl;
cout << v1(1) << endl;
3. 高级初始化
//1. Eigen::RowVectorXd //行向量,之前的Vector都是列向量
using namespace Eigen;
RowVectorXd rv1(1,2,3);
RowVectorXd rv2(4);
rv2 << 1,2,3,4;
RowVectorXd joined_rv12(7);
joined_rv12 << rv1 , rv2;//rv1后接rv2
//joined_rv12 is:
1 2 3 1 2 3 4;
//2. 块操作
MatrixXf m4(2,2);
m4 << 1,2,3,4;
MatrixXf m5(4,4);
m5 << m4, m4 / 10, m4 * 10, m4;//将m5分了四块赋值
//m5 is :
1 2 0.1 0.2
3 4