【C++】开源:Eigen3矩阵与线性代数库配置使用

😏*★,°* :.☆( ̄▽ ̄)/$:.°★ 😏

这篇文章主要介绍Eigen3矩阵与线性代数库配置使用。
无专精则不能成,无涉猎则不能通。------梁启超

欢迎来到我的博客,一起学习,共同进步。

喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • [:smirk:1. 项目介绍](#:smirk:1. 项目介绍)
    • [:blush:2. 环境配置](#:blush:2. 环境配置)
    • [:satisfied:3. 使用说明](#:satisfied:3. 使用说明)

😏1. 项目介绍

项目Gitlab地址:https://gitlab.com/libeigen/eigen

官网:https://eigen.tuxfamily.org/index.php?title=Main_Page

Eigen3 是一个开源的 C++ 模板库,用于线性代数和数值计算。它提供了高效、灵活和易于使用的矩阵、向量和线性代数运算功能,广泛应用于科学计算、机器学习、图像处理和工程领域等。重点是:轻量级,只包含头文件

以下是 Eigen3 的一些主要特点和功能:

1.高性能:Eigen3 通过使用表达式模板技术,能够在编译时进行优化,并产生高度优化的机器码。这使得 Eigen3 在数值计算中具有出色的性能,并且比某些其他常见的线性代数库更快。
2.易于使用:Eigen3 提供了直观和简洁的 API,使得编写线性代数代码变得容易。它采用了类似于数学符号的语法,使得代码可读性强,更接近人类思维方式。
3.丰富的功能:Eigen3 提供了许多功能来支持常见的线性代数操作,包括矩阵和向量的基本运算(加、减、乘、除)、矩阵分解(LU、QR、SVD 等)、特征值和特征向量计算、线性方程组求解、矩阵代数操作(转置、逆、行列式等)以及各种线性代数算法。
4.平台无关性:Eigen3 是一个纯模板库,不依赖于任何特定的硬件或操作系统,因此可以在多个平台上使用和移植。
5.轻量级:Eigen3 的代码库非常小巧,只有头文件,易于集成到其他项目中。
6.兼容性:Eigen3 支持 C++11 或更高版本的编译器,并且与其他常见的 C++ 库和框架(如 STL、Boost 等)兼容。

😊2. 环境配置

下面进行环境配置:

bash 复制代码
# ubuntu安装
sudo apt install libeigen3-dev

要在项目中使用eigen3,可创建cmake工程,CMakeLists.txt示例:

bash 复制代码
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++时带上头文件目录编译,示例:

bash 复制代码
g++ -o main main.cpp -I /usr/include/eigen3/

😆3. 使用说明

下面进行使用分析:

矩阵运算示例:

cpp 复制代码
#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;
}

向量运算示例:

cpp 复制代码
#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;
}

求解线性方程组示例:

cpp 复制代码
#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;
}

以上。

相关推荐
“αβ”4 小时前
MySQL表的操作
linux·网络·数据库·c++·网络协议·mysql·https
十五年专注C++开发4 小时前
Asio2: 一个基于 Boost.Asio 封装的高性能网络编程库
网络·c++·boost·asio·asio2
gcfer4 小时前
CS144 中的C++知识积累
c++·右值引用·智能指针·optional容器
Bona Sun5 小时前
单片机手搓掌上游戏机(二十)—pico运行doom之编译环境
c语言·c++·单片机·游戏机
Albert Edison6 小时前
【项目设计】C++ 高并发内存池
数据结构·c++·单例模式·哈希算法·高并发
我真不会起名字啊6 小时前
C、C++中的sprintf和stringstream的使用
java·c语言·c++
猿饵块6 小时前
ros2--图像/image
c++
一个帅气昵称啊8 小时前
Net AI智能体开源框架NetCoreKevin为企业AI智能体系统Saas信息化建设赋能-开启智能应用的无限可能
人工智能·开源
威桑8 小时前
LLVM (Low Level Virtual Machine)全景机制解析
c++·gcc·llvm
dolt028 小时前
基于deepseek实现的ai问答小程序
前端·开源