eigen入门

0 是什么

Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.

1 安装eigen

安装GDB, 一般都装过了

sudo apt-get install gdb
gdb --version
whereis gdb

查看版本

pkg-config --modversion eigen3

3.4.0

查看安装的路径

dpkg -L libeigen3-dev

/.
/usr
/usr/include
/usr/include/eigen3
/usr/include/eigen3/Eigen
/usr/include/eigen3/Eigen/Cholesky
/usr/include/eigen3/Eigen/CholmodSupport
/usr/include/eigen3/Eigen/Core
/usr/include/eigen3/Eigen/Dense
/usr/include/eigen3/Eigen/Eigen

可以看到:
我的默认安装的位置是 /usr/include/ (有些人的是在 /usr/local/include/)

2 简单使用

添加头文件

#include <eigen3/Eigen/Dense>

如果要这样用

#include <Eigen/Dense>

可以创建一个软连接

cd /usr/include/
# 创建之前看下自己eigen3的位置
sudo ln -sf eigen3/Eigen Eigen
sudo ln -sf eigen3/unsupported unsupported

2.1 数据结构

就两种 Matrix 和 Array

Matrix

一般用三个参数的版本
Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>

Matrix<float,Dynamic,Dynamic>   <=>   MatrixXf
Matrix<double,Dynamic,1>        <=>   VectorXd
Matrix<int,1,Dynamic>           <=>   RowVectorXi
Matrix<float,3,3>               <=>   Matrix3f
Matrix<float,4,1>               <=>   Vector4f

初始化

Array

Array类提供通用数组,而不是用于线性代数的Matrix类
使用 .array() .matrix() 相互转换

2.2 操作

	//默认
	Eigen::MatrixXd m;//动态矩阵(啥也没有).可以分块分配
	//3*3矩阵
	Eigen::Matrix3d  m1;   
	m1 << 1, 2, 3,
		4, 5, 6,
		7, 8, 9;
	m = m1;
	cout<<m<<"\n\n";

	//固定大小,默认填充0
	int rows=5, cols=5;
	Eigen::MatrixXf m2(rows,cols);
	cout<<m2<<endl;

	//查看行数
	cout<<"m2.rows()="<<m2.rows()<<endl;

	//改变大小
	int nb_rows=4, nb_cols=3;
	Eigen:m2.resize(nb_rows, nb_cols);
	cout<<m2<<"\n\n";
	
	//=========实现的运算
	//+-加减

	//*/ 数乘/除

	//* 矩阵乘法
	
		//.transpose() 转置
	//.adjoint() 共轭转置

	//.dot() 向量点乘 
	//.cross() 叉乘

	//.inverse() 逆
	//.normalizd() 归一化

	//内积
	//<A,B>=tr(A^T* B)
	//外积

posted @ 2023-04-25 19:20  无形深空  阅读(76)  评论(0编辑  收藏  举报