【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;
}

以上。
相关文章:
【C++】开源:Eigen3矩阵与线性代数库配置使用
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Eigen3矩阵与线性代数库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&…...
OpenMesh 网格简化算法(基于边长度)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 网格简化的算法有很多种,基于边结构进行简化的方法便是其中一种方式。此类算法主要关注于它们如何选择要收缩的边,并且似乎都是为流形表面设计的,尽管边缘收缩也可以用于非流形表面,但往往会存在变形较大的问题…...
FFmpeg解码详细流程
介绍 FFmpeg的 libavcodec 模块完成音视频多媒体的编解码模块。老版本的 FFmpeg 将avcodec_decode_video2()作为视频的解码函数 API,将avcodec_decode_audio4()作为音频的解码函数 API;从 3.4版本开始已经将二者标记为废弃过时 API(attribut…...
人工智能的缺陷
首先从应用层面理解什么是人工智能,目前人工智能主流应用面包括:自然语言处理领域,代表为chatgpt,我们能用其进行日常交流,问题答疑,论文书写等。计算机视觉领域,代表为人脸识别,现在…...
基于ASP.NET MVC开发的、开源的个人博客系统
推荐一个功能丰富、易于使用和扩展的开源博客,可以轻松地创建和管理自己的博客。 项目简介 基于.Net Framework 4.5开发的、开源博客系统,具有丰富的功能,包括文章发布、分类、标签、评论、订阅、统计等功能,同时也可以根据需要…...
【LeetCode】对称二叉树 平衡二叉树
对称二叉树 即先判断根节点的左右子树相不相同,相同时,再判断左孩子的左子树和右孩子的右子树比较,左孩子的右子树和右孩子的左子树(当两个都相同时才是对称的).....依次递推,过程中并设置一些不满足相同的…...
区块链和WEB3.0有哪些基础知识呢
区块链基础知识 常用区块链基础知识包括: (1)区块链概念:区块链是一种去中心化的分布式账本技术,它通过加密算法和共识机制保证了数据的安全性和不可篡改性。区块链中的每一个区块都包含了前一个区块的哈希值&#x…...
七、封装(1)
本章概要 包的概念 代码组织创建独一无二的包名冲突定制工具库使用 import 改变行为使用包的忠告 访问控制(Access control)(或者_隐藏实现(implementation hiding)_)与“最初的实现不恰当”有关。 所有优…...
问题解决和批判性思维是软件工程的重要核心
软件工程的重心在于问题解决和批判性思维(合理设计和架构降低复杂度),而非仅局限于编程。 许多人误以为软件工程就只是编程,即用编程语言编写指令,让计算机按照这些指令行事。但实际上,软件工程的内涵远超…...
【EI/SCOPUS征稿】2023年通信网络与机器学习国际学术会议(CNML 2023)
2023年通信网络与机器学习国际学术会议(CNML 2023) 2023 International Conference on Communication Networks and Machine Learning 随着数据流量的显著增长,新的通信应用程序不断出现,并产生更多的数据流量,这些数…...
算法-岛屿数量
给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边…...
Crescent QuickPak Crack
Crescent QuickPak Crack Crescent QuickPak是一个32位ActiveX组件的综合集合,用于使用Visual Basic开发应用程序,这将减少开发时间并提高生产力。Crescent QuickPak包含Internet功能,用于打开、读取和解析IIS日志文件,将日志文件…...
六、ESP32数码管显示数字
1. 本节课的成功 2. 数码管 为什么会亮呢? 答:里面就是LED灯...
【Kubernetes】当K8s出现问题时,从哪些方面可以排查
前言 kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kub…...
[ MySQL ] — 库和表的操作
目录 库的操作 创建数据库 语法: 使用: 字符集和校验规则 查看系统默认字符集以及校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 校验规则对数据库的影响 操纵数据库 查看数据库 显示创建语句 修改数据库 删除数据库 备…...
Hive常见面试题
Hive的基本概念 什么是Hive?它的主要作用是什么? Hive是一个基于Hadoop生态系统的数据仓库和数据处理工具。 它提供了类似于SQL的查询语言(HiveQL),使用户能够使用SQL语句来查询和分析 大规模存储在Hadoop集群上的数…...
【单片机】晨启科技,酷黑版,密码锁
密码锁 任务要求: 当输入密码(至少6位密码)时,OLED显示屏显示输入的数字(或者字符),当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较(可使用外设键盘&…...
常见监控网络链路和网络设备的方法
网络监控主要包括网络链路监控和网络设备监控,通常系统运维人员会比较关注。 一、网络链路监控 网络链路监控主要包含三个部分,网络连通性、网络质量、网络流量。 连通性和质量的监控手段非常简单,就是在链路一侧部署探针,去探…...
C#控制台程序+Window增加右键菜单
有时候我们可能会想定制一些自己的右键菜单功能,帮我们减少重复的操作。那么使用控制台程序加自定义右键菜单,就可以很好地满足我们的需求。 1 编写控制台程序 因为我只用到了在文件夹中空白处的右键菜单,所以这里提供了一个对应的模板&…...
【Docker】Docker+Zipkin+Elasticsearch+Kibana部署分布式链路追踪
文章目录 1. 组件介绍2. 服务整合2.1. 前提:安装好Elaticsearch和Kibana2.2. 再整合Zipkin 点击跳转:Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套(质量有保证,内容详情) 本文主要讨论在Ela…...
【电影研究者的AI护城河】:NotebookLM深度定制教程——仅限高校影视实验室内部流传的6大高阶技巧
更多请点击: https://codechina.net 第一章:NotebookLM电影研究辅助的底层逻辑与范式迁移 NotebookLM 并非传统意义上的“AI笔记工具”,而是一个以语义理解为核心、以用户自有资料为知识边界的可验证推理引擎。其在电影研究领域的应用&#…...
从零到发刊:NotebookLM在有机合成路线设计中的7步闭环工作法,北大化学院实验室内部培训材料首次公开
更多请点击: https://codechina.net 第一章:NotebookLM化学研究辅助 NotebookLM 是 Google 推出的基于 AI 的研究协作者,专为深度阅读、知识整合与推理设计。在化学研究场景中,它可高效处理文献 PDF、实验记录、光谱数据报告及教…...
3步搞定Windows安卓应用安装:告别模拟器的全新体验
3步搞定Windows安卓应用安装:告别模拟器的全新体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想在Windows电脑上运行手机应用,却…...
终极指南:如何使用AppleRa1n工具安全绕过iOS 15-16激活锁
终极指南:如何使用AppleRa1n工具安全绕过iOS 15-16激活锁 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n iOS激活锁绕过是许多iPhone用户在设备所有权验证遇到困难时的迫切需求。AppleRa1n…...
对比直接使用厂商 API 通过 Taotoken 聚合调用的账单清晰度差异
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商 API 与通过 Taotoken 聚合调用的账单清晰度差异 在集成多个大语言模型到业务中时,开发者通常会面临一…...
Gemini3.1Pro数据投毒检测实战指南
检测 Gemini 3.1 Pro 输出是否受到数据投毒影响:从证据采集、门控验证到回归评测的产品化方案(含4周MVP路线图)数据投毒(Data Poisoning)会让模型在“看似正常”的输出中植入特定触发器:当输入触发某种模式…...
初创团队如何借助 Taotoken 实现低成本且灵活的大模型能力集成
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何借助 Taotoken 实现低成本且灵活的大模型能力集成 对于资源有限的初创技术团队而言,在开发新产品时集成 A…...
3分钟告别浏览器Markdown阅读困境:这款扩展如何重塑你的技术文档体验
3分钟告别浏览器Markdown阅读困境:这款扩展如何重塑你的技术文档体验 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 你是否曾面对浏览器中杂乱的Markdown源代码感到困…...
S32K324双核M7实战:如何利用192KB TCM提升关键代码性能
S32K324双核M7实战:如何利用192KB TCM提升关键代码性能 在嵌入式系统开发中,实时性往往是决定产品成败的关键因素。当您面对电机控制、信号处理等高实时性需求场景时,处理器与内存之间的数据通路可能成为性能瓶颈的隐形杀手。S32K324芯片内置…...
低成本PHY芯片RTL8201F驱动移植实战:从LAN8742到RTL8201F的完整替换流程与验证
低成本PHY芯片RTL8201F驱动移植实战:从LAN8742到RTL8201F的完整替换流程与验证 在嵌入式以太网开发中,PHY芯片的选择往往需要在性能和成本之间取得平衡。当项目预算有限时,RTL8201F这类低成本PHY芯片就成为极具吸引力的选择。本文将详细介绍如…...
