当前位置: 首页 > news >正文

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

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍Eigen3矩阵与线性代数库配置使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :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. 环境配置

下面进行环境配置:

# 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.5mat(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() {// 创建系数矩阵 AMatrix3d A;A << 2, 1, -1,-3, -1, 2,-2,  1, 2;// 创建右侧常数向量 bVector3d b;b << 8, -11, -3;// 求解线性方程组 Ax=bVector3d x = A.colPivHouseholderQr().solve(b);// 打印解向量 xstd::cout << "Solution x = \n" << x << std::endl;return 0;
}

在这里插入图片描述

以上。

http://www.lryc.cn/news/111778.html

相关文章:

  • OpenMesh 网格简化算法(基于边长度)
  • FFmpeg解码详细流程
  • 人工智能的缺陷
  • 基于ASP.NET MVC开发的、开源的个人博客系统
  • 【LeetCode】对称二叉树 平衡二叉树
  • 区块链和WEB3.0有哪些基础知识呢
  • 七、封装(1)
  • 问题解决和批判性思维是软件工程的重要核心
  • 【EI/SCOPUS征稿】2023年通信网络与机器学习国际学术会议(CNML 2023)
  • 算法-岛屿数量
  • Crescent QuickPak Crack
  • 六、ESP32数码管显示数字
  • 【Kubernetes】当K8s出现问题时,从哪些方面可以排查
  • [ MySQL ] — 库和表的操作
  • Hive常见面试题
  • 【单片机】晨启科技,酷黑版,密码锁
  • 常见监控网络链路和网络设备的方法
  • C#控制台程序+Window增加右键菜单
  • 【Docker】Docker+Zipkin+Elasticsearch+Kibana部署分布式链路追踪
  • 【小沐学C++】C++ 基于CMake构建工程项目(Windows、Linux)
  • 计算机视觉与图形学-神经渲染专题-ConsistentNeRF
  • 初级算法-其他
  • Containerd的两种安装方式
  • Android学习之路(1) 文本设置
  • Docker相关命令与入门
  • 如何配置一个永久固定的公网TCP地址来SSH远程树莓派?
  • Kubernetes架构和工作流程
  • C语言赋值号的运算顺序
  • fishing之第四篇使用案例一模拟登陆口
  • CS 144 Lab Six -- building an IP router