文章目录
😏1. 项目介绍
项目Gitlab地址:https://gitlab.com/libeigen/eigen
官网:https://eigen.tuxfamily.org/index.php?title=Main_Page
Eigen3 是一个开源的 C++ 模板库,用于线性代数和数值计算。它提供了高效、灵活和易于使用的矩阵、向量和线性代数运算功能,广泛应用于科学计算、机器学习、图像处理和工程领域等。重点是:轻量级,只包含头文件
。
以下是 Eigen3 的一些主要特点和功能:
😊2. 环境配置
下面进行环境配置:
# ubuntu安装
sudo apt install libeigen3-dev
要在项目中使用eigen3,可创建cmake
工程,CMakeLists.txt
示例:
cmake_minimum_required(VERSION 3.12)
project(useEigen)
set(CMAKE_CXX_STANDARD 11)
# 寻找Eigen库
find_package(Eigen3 REQUIRED)
# 将Eigen库include进来
include_directories(${EIGEN3_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.cpp)
另外,简单的,可以在g++
时带上头文件目录编译,示例:
g++ -o main main.cpp -I /usr/include/eigen3/
😆3. 使用说明
下面进行使用分析:
矩阵运算示例:
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main() {
// 以Xd方式声明一个3x3的矩阵
MatrixXd mat(3, 3);
// 将矩阵(0,0)位置元素赋为1.5
mat(0, 0) = 1.5;
cout << "MatrixXd:\n " << mat << endl;
// 以Matrix方式声明一个5x2的矩阵
Matrix<double, 5, 2> m1;
cout << "Matrix:\n " << m1 << endl;
// 随机数矩阵
MatrixXd m2 = MatrixXd::Random(5, 3);
cout << "MatrixXd::Random:\n " << m2 << endl;
return 0;
}
向量运算示例:
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main() {
Vector3d v(1, 2, 3);
cout << "ori vector:\n" << v << endl;
cout << "* result:\n" << v * 3 << endl;
// 点乘
cout << "dot result:\n" << v.dot(v) << endl;
// 叉乘
cout << "cross result:\n" << v.cross(v) << endl;
return 0;
}
求解线性方程组示例:
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main() {
// 创建系数矩阵 A
Matrix3d A;
A << 2, 1, -1,
-3, -1, 2,
-2, 1, 2;
// 创建右侧常数向量 b
Vector3d b;
b << 8, -11, -3;
// 求解线性方程组 Ax=b
Vector3d x = A.colPivHouseholderQr().solve(b);
// 打印解向量 x
std::cout << "Solution x = \n" << x << std::endl;
return 0;
}
以上。