Qt 配置Eigen矩阵库 - 并简单测试

Qt 配置Eigen矩阵库 - 并简单测试

  • 引言
  • 一、在Qt中配置Eigen
  • 二、低通Demo源码
  • 三、参考链接以及其他

引言

在这里插入图片描述

Eigen是一个开源的C++模板库,提供了线性代数和矩阵运算的功能。它被设计为一个高性能、可扩展和易用的库,可以用于科学计算、机器学习和计算机图形学等领域。Eigen库的主要特点包括:

  1. 高性能:Eigen使用了矩阵表达式模板技术,能够在编译时优化矩阵运算,同时还提供了高度优化的数学函数库,可以充分利用硬件的并行计算能力。
  2. 可扩展:Eigen支持多种矩阵和向量类型,例如动态大小的矩阵、静态大小的矩阵,以及稀疏矩阵等。同时,Eigen还提供了丰富的数学函数和算法,满足不同应用的需求。
  3. 易用性:Eigen提供了简洁的API接口,使得用户可以轻松地进行矩阵运算和线性代数操作。它还提供了详细的文档和示例代码,方便用户学习和使用。

Eigen库被广泛应用于科学计算、机器学习、计算机图形学等领域。很多开源项目和工具,如OpenCV、PCL等,都使用了Eigen作为其数学库的核心。应用Eigen 的项目:https://blog.csdn.net/weixin_40948750/article/details/136492837

  • 整SLAM的时候接触到的数学库,很方便速度也快. 本文主要说明如何在Qt中配置Eigen 以及 写了一个低通滤波器小Demo进行测试 - 如上图所示

一、在Qt中配置Eigen

    1. 先下载源码
      官网:http://eigen.tuxfamily.org/index.php?title=Main_Page - 经常打不开 可选择如下网址直接下载源码:
      https://gitlab.com/libeigen/eigen/-/releases
    1. 解压到相关路径下 (我放到了项目文件夹中,与.pro同目录),然后配置.pro文件即可 (INCLUDEPATH += ./eigen-3.4.0)
      在这里插入图片描述
    1. 还可以编译为动态库然后调用,不然每次都编译很长时间 (/todo)

二、低通Demo源码

  • 只展示了mainwindow.cpp的代码,比较简单
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "Eigen/Dense"
#include <unsupported/Eigen/FFT>
#include "qcustomplot/qcustomplot.h"
#include <iostream>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);// EigenDemoint n = 100;srand(static_cast<unsigned>(time(nullptr)));Eigen::VectorXd v = Eigen::VectorXd::Random(n);// 傅里叶变换,去除高频部分Eigen::FFT<double> fft;Eigen::VectorXcd tmp(n);Eigen::VectorXd v_(n);fft.fwd(tmp, v);           // 傅里叶变换for(int i = n/10; i < n; i++){tmp[i] = 0;}fft.inv(v_, tmp);           // 逆变换//std::cout << v_;// 可视化QCustomPlot *customPlot =  new QCustomPlot();  // 创建qcustomplot// 赋值原始值customPlot->addGraph();QCPGraph * curGraph1 = customPlot->graph(0);curGraph1->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCustom, 1));QVector<double> x(n), y(n);for(int i = 0; i < n; i++){x[i] = i;y[i] = v[i];}customPlot->graph(0)->setPen(QPen(QColor(255, 0, 0)));customPlot->graph(0)->setData(x, y);// 赋值处理后的值customPlot->addGraph();QCPGraph * curGraph2 = customPlot->graph(1);curGraph2->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCustom, 1));QVector<double> xx(n), yy(n);for(int i = 0; i < n; i++){xx[i] = i;yy[i] = v_[i];}customPlot->graph(1)->setPen(QPen(QColor(0, 0, 255)));customPlot->graph(1)->setData(xx, yy);// 设定显示范围auto max_x = std::max_element(std::begin(x), std::end(x));auto min_x = std::min_element(std::begin(x), std::end(x));auto max_y = std::max_element(std::begin(y), std::end(y));auto min_y = std::min_element(std::begin(y), std::end(y));customPlot->xAxis->setRange(*min_x, *max_x);customPlot->yAxis->setRange(*min_y, *max_y);this->setCentralWidget(customPlot);
}MainWindow::~MainWindow()
{delete ui;
}

三、参考链接以及其他

Qt 配置Eigen:https://www.cnblogs.com/ybqjymy/p/18110273
大家推荐一个矩阵类?https://www.zhihu.com/question/22655757
Engin库和Armadillo库矩阵计算性能比较?https://www.zhihu.com/question/50586395
Armadillo官网:https://arma.sourceforge.net/
C++线代运算库Armadillo配置(Qt & CLion & VSCode):https://blog.csdn.net/Arry_W/article/details/130725096

  • 以及使用Armadillo实现的低通滤波.
arma::arma_rng::set_seed(0);
arma::vec v1 = randg<vec>(300);
int n = static_cast<int>(v1.size());
cx_vec fft_v1 = fft(v1);
//fft_v1.print("V1:");
for(int i = 100; i < n; i++){fft_v1[static_cast<quint64>(i)] = 0;  
}
//fft_v1.print("V1_:");
cx_vec ifft_v1 = ifft(fft_v1);
vec v2 = real(ifft_v1);

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dubbo复习:(4) 和springboot 整合时,客户端负载均衡的配置

需要在DubboReference注解指定loadbalance属性。示例如下&#xff1a; package cn.edu.tju.service;import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Ser…

使用NuScenes数据集生成ROS Bag文件:深度学习与机器人操作的桥梁

在自动驾驶、机器人导航及环境感知的研究中&#xff0c;高质量的数据集是推动算法发展的关键。NuScenes数据集作为一项开源的多模态自动驾驶数据集&#xff0c;提供了丰富的雷达、激光雷达&#xff08;LiDAR&#xff09;、摄像头等多种传感器数据&#xff0c;是进行多传感器融合…

Discuz!X3.4论坛网站公安备案号怎样放到网站底部?

Discuz&#xff01;网站的工信部备案号都知道在后台——全局——站点信息——网站备案信息代码填写&#xff0c;那公安备案号要添加在哪里呢&#xff1f;并没有看到公安备案号填写栏&#xff0c;今天驰网飞飞和你分享 1&#xff09;工信部备案号和公安备案号统一填写到网站备案…

服务器感染了. rmallox勒索病毒,如何确保数据文件完整恢复?

导言&#xff1a; 近年来&#xff0c;随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显。其中&#xff0c;勒索病毒作为一种严重的网络威胁&#xff0c;对个人和企业数据造成了巨大的威胁。本文将重点介绍.rmallox勒索病毒的特点、传播途径以及应对策略&#xff0c;旨…

压力测试JMeter

压力测试JMeter 1 下载JMeter1.1 测试计划1.2 JMeter Address Already in use 错误解决1.3 java 内存模型1.4 jconsole与jvisualvm1.5 优化方向1.6 Nginx动静分离 1 下载JMeter 官网地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 运行apache-jmeter-5.6.3\…

firebase如何自定义上传日志

我们可以很轻松的得到2个代码&#xff1a; Firebase.crashlytics.log(str) Firebase.crashlytics.recordException(ex)这就是firebase提供的自定义日志和excption上传的方法。 但是如果你认为log函数调用后&#xff0c;直接就能查看到日志就错了。 我们在这个page是找不到日志…

如何找出真正的交易信号?Anzo Capital昂首资本总结7个

匕首是一种新兴的价格走势形态&#xff0c;虽然不常见&#xff0c;但具有较高的统计可靠性。它通常预示着趋势的持续发展。该模式涉及到同时参考两个不同的时间周期进行交易&#xff0c;一个是短期&#xff0c;另一个是长期&#xff0c;比如一周时间框架与一天时间框架、一天时…

字母的大小写转换

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;字符串对象提供了lower()方法和upper()方法进行字母的大小写转换&#xff0c;即可用于将大写字母转换为小写字母或者将小写字…

Windows下PostgreSQL数据库的备份与恢复

文章目录 一、备份1.找到PostgreSQL的安装目录下的"bin"目录2.在windows的命令窗口里&#xff0c;使用pg_dump进行备份1.打开命令窗口2.使用pg_dump将数据库备份下来 二、恢复1.找到PostgreSQL的安装目录下的"bin"目录2.在windows的命令窗口里&#xff0c;…

FTP介绍

FTP 1、FTP—文件传输协议 文件传输协议&#xff08;File Transfer Protocol&#xff0c;FTP&#xff09;是用于在网络上进行文件传输的一套标准协议&#xff0c;它工作在 OSI 模型的第七层&#xff0c; TCP 模型的第四层&#xff0c; 即应用层&#xff0c; 使用 TCP 传输&…

利润而不是损失:谁信任你的游戏本地化

中国游戏市场巨大且前景广阔。这尤其适用于移动游戏&#xff1a;Statista预测&#xff0c;2024年。它的收入将达到346.6亿美元。然而&#xff0c;这种巨大的财务潜力也有其反面&#xff1a;游戏进入市场的次数越多&#xff0c;它们就越难以相互争夺玩家的注意力。此外&#xff…

信息学奥赛初赛天天练-15-阅读程序-深入解析二进制原码、反码、补码,位运算技巧,以及lowbit的神奇应用

更多资源请关注纽扣编程微信公众号 1 2021 CSP-J 阅读程序1 阅读程序&#xff08;程序输入不超过数组或字符串定义的范围&#xff1b;判断题正确填 √&#xff0c;错误填&#xff1b;除特 殊说明外&#xff0c;判断题 1.5 分&#xff0c;选择题 3 分&#xff09; 源码 #in…

DNSlog环境搭建

阿里云域名公网VPS地址 购买阿里云域名后设置“自定义DNSHOST” DNS服务器填写ns1和ns2 如&#xff1a;ns1.aaa.com IP地址填写你的VPS地址 如&#xff1a;1.1.1.1 填写解析记录&#xff0c;一个A记录、一个NS记录 NS记录就是*.域名指向记录值ns1.域名 如&#xff1a;*.aaa…

【已解决】使用token登录机制,token获取不到,blog_list.html界面加载不出来

Bug产生 今天使用token完成用户登录信息的存储的时候被卡了大半天。 因为登录的功能写的已经很多了&#xff0c;所以今天就没有写一点验一点&#xff0c;而是在写完获取博客列表功功能&#xff0c;验证完它的后端后&#xff0c;了解完令牌的基本使用以及Jwt的基本使用方式——…

【二叉树】:LeetCode:100.相同的数(分治)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;初阶初阶结构刷题 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 1.问题描述&#xff1a; 2.问题分析&#xff1a; 二叉树是区分结构的&#xff0c;即左右子树是不一…

Vanna使用ollama分析本地MySQL数据库

上一章节中已经实现了vanna的本地运行&#xff0c;但是大模型和数据库都还是远程的&#xff0c;因为也就没办法去训练&#xff0c;这节一起来实现vanna分析本地mysql数据库&#xff0c;因为要使用本地大模型&#xff0c;所以开始之前需要给本地安装好大模型&#xff0c;我这里用…

通过Wirtinger流进行相位恢复:理论与算法

文章目录 1. 简介2. 算法描述2.1 初始化(Initialization)2.2 迭代更新(Iterative Updates)2.3 学习率调整&#xff08;Learning Rate Adjustment&#xff09; 3. 代码实现3.1 一维信号测试 &#xff08;Gaussian model&#xff09;3.2 一维信号测试 &#xff08;Coded diffract…

最长递增子序列,交错字符串

第一题&#xff1a; 代码如下&#xff1a; int lengthOfLIS(vector<int>& nums) {//dp[i]表示以第i个元素为结尾的最长子序列的长度int n nums.size();int res 1;vector<int> dp(n, 1);for (int i 1; i < n; i){for (int j 0; j < i; j){if (nums[i]…

ArcGIS提取含有计曲线的等高线

喜欢就关注我们吧&#xff01; 今天我么来看看&#xff0c;如何利用DEM提取含有计曲线的等高线&#xff01; 常规的话我们利用DEM提取的等高线都是不带计曲线的&#xff0c;无法把计曲线标注出来&#xff0c;今天我们就来看下&#xff0c;如何处理一下哦&#xff01;提取带有计…

Python内置方法串讲:类型转化与实用技巧

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、类型转化&#xff1a;从A到B的魔法 二、实用技巧&#xff1a;避免类型错误 三、总结 一…