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

news2024/12/25 1:03:20

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍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.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;
}

在这里插入图片描述

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/825982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机柜PDU的选购也有大学问——与机柜PDU相关的那些事儿

在各行各业数据中心机房供配电建设过程中&#xff0c;机柜专用PDU电源插座看似是一个较为简单的用电设备&#xff0c;事实上又不那么简单。机柜PDU&#xff0c;是为安装在机柜内部的IT设备提供电源分配、管理的末端配电设备&#xff0c;在不同的工作场合对于PDU的规格要求也是不…

HackSudo2靶机 通关详解

环境配置 发现vmWare的kali扫不到virtualbox的靶机 网上找了挺久资料都没解决 索性全桥接上物理机了 信息收集 漏洞发现 扫个目录 都看了一眼 没什么有用的 然后回到file.php 感觉之前做过类似的靶场,猜测存在文件包含 随便传个file试试 确实有 考虑日志文件包含 之前看…

C++---list常用接口和模拟实现

list---模拟实现 list的简介list函数的使用构造函数迭代器的使用list的capacitylist element accesslist modifiers list的模拟实现构造函数&#xff0c;拷贝构造函数和迭代器begin和endinsert和eraseclear和析构函数 源码 list的简介 list是用双向带头联表实现的一个容器&…

[用go实现解释器]笔记1-词法分析

本文是《用go实现解释器》的读书笔记 ​ https://malred-blog​malred.github.io/2023/06/03/ji-suan-ji-li-lun-ji-shu-ji/shi-ti/go-compile/yong-go-yu-yan-shi-xian-jie-shi-qi/go-compiler-1/#toc-heading-6http://个人博客该笔记地址 ​github.com/malred/malanghttp:/…

入行软件测试的一些工作感悟

成为xx一员测试已经有1年半了&#xff0c;一直没有真正坐下来花些时间将自己的思路理清一下。刚好近期公司落地了OKR&#xff0c;给自己制定了OKR之后思路终于开始清晰起来&#xff0c;朦朦胧胧地开始看清了远方的路&#xff0c;麻着胆子分析一下自己&#xff0c;毕竟摸黑走路的…

Screens 4 for mac VNC客户端 强大的远程控制工具

Screens 4 for Mac 是一款功能强大的 VNC 客户端软件&#xff0c;为 Mac 用户提供了便捷的远程访问和控制解决方案。无论您是需要远程管理服务器、办公电脑&#xff0c;还是需要远程协助他人解决问题&#xff0c;Screens 4 都是您的理想选择。 Screens 4 for Mac具备简洁直观的…

小白到运维工程师自学之路 第六十二集 (docker持久化与数据卷容器)

一、概述 Docker持久化是指将容器中的数据持久保存在主机上&#xff0c;以便在容器重新启动或迁移时不丢失数据。由于Docker容器是临时和可变的&#xff0c;它们的文件系统默认是易失的&#xff0c;这意味着容器中的任何更改或创建的文件都只存在于此容器的生命周期内。但是&a…

基于低代码平台快速搭建应用

一、前言 近年来&#xff0c;SaaS行业的迅猛发展带动了低代码领域的快速兴起。国外的低代码创业公司如Mendix、Outsystems&#xff0c;以及国内的软件业巨头如华为、用友、金蝶等和小众高性价比的引迈JNPF都已经纷纷涉足低代码市场。根据Transparency Market Research的报告&am…

独立站运营要做哪些工作?包含哪些模块?

在电商行业中&#xff0c;广告投放和设计等岗位的招聘可能会相对容易&#xff0c;但真正理解并有效执行独立站运营的人员却十分稀少。因此&#xff0c;今天将聚焦于独立站的运营&#xff0c;特别是针对精品垂直站和品牌站的运营。 首先&#xff0c;我们需要了解“运营”的含义…

vue2使用v-viewer实现图片预览

v-viewer 用于图片浏览的Vue组件&#xff0c;支持旋转、缩放、翻转等操作&#xff0c;基于viewer.js。 中文文档&#xff1a;Vue图片浏览组件v-viewer&#xff0c;支持旋转、缩放、翻转等操作 | Mirari’s Blog 代码示例&#xff1a;https://mirari.cc/v-viewer/ 在Vue.js 2…

Java并发系列之三:乐观锁机制

上一篇悲观锁中&#xff0c;我们讲到悲观锁的四种状态时&#xff0c;提到了“无锁”这种状态&#xff0c;并解释其有两种语义&#xff0c;一种是对共享资源不进行任何同步原语保护&#xff1b;另一种是共享资源会出现被竞争的情况&#xff0c;但是不使用操作系统同步进行保护&a…

17、Spring6整合JUnit5

目录 17、Spring6整合JUnit5 17.1 Spring对JUnit4的支持 准备工作&#xff1a; 声明Bean spring.xml 单元测试&#xff1a; 17.2 Spring对JUnit5的支持 17、Spring6整合JUnit5 17.1 Spring对JUnit4的支持 准备工作&#xff1a; <?xml version"1.0" enco…

Java课题笔记~ MyBatis映射文件

映射文件是MyBatis中的重要组成部分&#xff0c;它包含了开发中编写的SQL语句、参数、结果集等。映射文件需要通过MyBatis配置文件中的<mapper>元素引入才能生效。MyBatis规定了映射文件的层次结构。 1、映射文件概览 <?xml version"1.0" encoding"…

浅谈document.write()输出样式

浅谈document.write()输出样式 js中的最基本的命令之一&#xff1a;document.write&#xff08;&#xff09;&#xff0c;用于简单的打印内容到页面上&#xff0c;可以逐字打印你需要的内容——document.write("content"),这里content就是需要输出的内容&#xff1b;…

2023 ChinaJoy 圆满闭幕,FairGuard游戏加固亮相 BTOB 展区

提振行业 产业复苏 2023年7月28日至7月31日&#xff0c;第二十届中国国际数码互动娱乐展览会( ChinaJoy)于上海新国际博览中心圆满举办。本届ChinaJoy作为疫情结束后的第一个国际性数字娱乐领域的重要产业盛会&#xff0c;对于提振行业信心、加快产业复苏、增进国际间的交流与…

如何成为linux服务端C++开发专家?

想成为linux服务端C开发专家&#xff0c;只能自己慢慢学&#xff0c;在实践中摸索&#xff0c;我敢说没几个人说自己是linux服务端C开发专家 ! 这里说下鹅厂关于Linux C方向 的使用场景 。 进腾讯最好的方向是 Linux C方向&#xff0c;目前腾讯由于历史原因&#xff0c;还有游…

16、外部配置源与外部配置文件及JSON配置

外部配置源与外部配置文件及JSON配置 application.properties application.yml 这些是配置文件&#xff0c; 命令行配置、环境变量配置、系统属性配置源&#xff0c;这些属于配置源。 外部配置源的作用&#xff1a; Spring Boot相当于对Spring框架进行了封装&#xff0c;Spri…

java环境搭建 Ubuntu Linux

jdk的安装和配置环境变量 使用apt sudo apt install default-jdk若是安装成功了在终端输入java -version来查看是否安装成功 使用官网下载的jdk包 直接在百度上搜索jdk&#xff0c;选择图片这个 网址:jdk下载网址 若是arm就选择带有arm的&#xff0c;反之选择x64的&#…

智能疏散照明控制系统在世博文化中心的应用

安科瑞 华楠 摘要:世博文化中心作为世博园区一轴四馆的核心建筑之一&#xff0c;其建筑面积大&#xff0c;人员密集&#xff0c;人流通道众多&#xff0c;疏散路径复杂。为了确保火灾发生时人员能安全、迅速的疏散&#xff0c;在电气设计中设置了一套智能疏散照明系统。通过介…

wps 预加载项插件本地开发启动项目打开wps 客户端,未看到加载项菜单,

wps 预加载项插件本地开发启动项目打开wps 客户端&#xff0c;未看到加载项菜单&#xff0c;请检查本地c盘安装目录下“jsplugins.xml”信息是否添加成功 如下图 name 插件项目 url 本地插件运行地址及端口 <jsplugins><jspluginonline name"wps-soft-copyright…