2023年华为杯数学建模竞赛B题论文和代码

DFT类矩阵的整数分解逼近

离散傅里叶变换(Discrete Fourier TransformDFT)傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心,通过它把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规律。在芯片设计中,DFT计算的硬件复杂度与其算法复杂度和数据元素取值范围相关。算法复杂度越高、数据取值范围越大,其硬件复杂度就越大。常规的降低硬件复

杂度的方法如快速傅里叶变换已经渐渐无法满足芯片日益增长的需求。因此,急需设计新的算法,此算法不仅能是误差控制在一定范围内,又能有效降低 DFT 过程带来的硬件复杂度过大的问题。

针对第一问,本问不用考虑分解后矩阵A的取值范围的问题,只需要满足分解后的矩阵每行至多只有2个非零元素,以及最小误差尽可能低的约束条件下,计算出近似矩阵的硬件复杂度。本问选择了三种模型来计算 DFT 矩阵的最小误差和硬件复杂度。奇异值分解法通过特征向量将DFT矩阵进行分解,同时还达到了降维的目的,通过将DFT矩阵分解成三个矩阵来使误差达到最小;分块矩阵分解法通过将 DFT 矩阵分解成一个个小的分块矩阵,因为维数越小分块子矩阵形式越简单,误差显著降低;矩阵乘法拟合则利用 DFT 矩阵的对称性和穷举法将矩阵分解成多个矩阵连乘的形式。

针对第二问,本问不用考虑每行非零元素个数的问题,只需要满足分解后的矩阵每个元素的取值范围,以及在N=2481632的情况以及最小误差尽可能低的约束条件下,计算出近似矩阵的硬件复杂度。本问选择了三种模型来计算 DFT 矩阵的最小误差和硬件复杂度。蝶形运算分解法运用了快速傅里叶变换的思想,在此基础上利用蝶形变换将DFT矩阵进行分解;分块矩阵分解法和矩阵乘法拟合在解决问题二是仍然适用。

针对第三问,本问需要同时考虑每行非零元素个数的以及分解后的矩阵每个元素的取值范

围的约束条件,在此基础上,在最小误差尽可能低的约束条件下,计算出近似矩阵的硬件复杂度。本问选择了两种模型来计算 DFT 矩阵的最小误差和硬件复杂度,即分块矩阵分解法和矩阵乘法拟合。这两种方法在多种约束条件下仍能够很好的解决问题。

针对第四问,本问需要考虑如何对 4 DFT矩阵与8 DFT 矩阵的 Kronecker 积的矩阵FN进行矩阵分解,在最小误差尽可能低的约束条件下,计算出近似矩阵的硬件复杂度。本问选择通过 SVD+穷举法的模型来计算 DFT 矩阵的最小误差和硬件复杂度。首先对 4 DFT 阵与8DFT矩阵进行SVD分解,之后利用Kronecker积的性质将FN矩阵转化为多个矩阵相乘的形式。

针对第五问,本问需要同时考虑每行非零元素个数的以及分解后的矩阵每个元素的取值范围的约束条件,在此基础上增加将精度限制在0.1以内,即RMSE0.1的要求,计算出近似矩阵的硬件复杂度。本问选择分块矩阵分解模型对第三问结果矩阵进行进一步优化,在满足题目要求下,计算出分解后矩阵的最小误差和硬件复杂度。

关键词:离散傅里叶变换、奇异值分解法、分块矩阵分解法、矩阵乘法拟合、蝶形

运算分解法、Kronecker 

一、问题背景及分析

1.1问题背景

离散傅里叶变换(Discrete Fourier TransformDFT)作为一种基本工具广泛应用于工程、科学以及数学领域。例如,通信信号处理中,常用DFT实现信号的正交频分复用。另外在信道估计中,也需要用到逆DFTIDFT)和DFT以便对信道估计结果进行时域降噪。  

在芯片设计中,DFT计算的硬件复杂度与其算法复杂度和数据元素取值范围相关。算法复杂度越高、数据取值范围越大,其硬件复杂度就越大。目前在实际产品中,一般采用快速傅里叶变换(Fast Fourier TransformFFT)算法来快速实现DFT,其利用DFT变换的各种性质,可以大幅降低 DFT 的计算复杂度。FFT 算法,是离散傅里叶变换的快速算法,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的,在计算机系统或者说数字系统领域是重大进步。然而,随着无线通信技术的演进,天线阵面越来越大,通道数越来越多,通信带宽越来越大,对FFT需求也越来越大,从而导致专用芯片上实现FFT的硬件开销也越大。以进一步降低芯片资源开销为目的,提出了一种可行的思路,即将DFT矩阵分解成整数矩阵连乘的形式。

目前使用 FFT 进行 DFT 计算的方案硬件复杂度较高,虽然大幅降低了硬件复杂度,但损失了一定的计算精度。因此本题希望研究一种替代方案来降低 DFT 计算的硬件复杂度,但同时对精度也有一定要求。因此本题希望通过设计一种矩阵分解方式,使分解后的矩阵既能最小化RMSE,同时又使得乘法器的数量尽量少。

1.2问题分析

1.2.1问题一分析
          根据题意,问题一的目标是降低硬件复杂度,即对 DFT 矩阵的分解方法进行优化,然后通过数学方法,例如线性规划或整数规划等求解题目中的目标函数并使分解矩阵集中的各元素符合约束条件1,即每行中非零元素不多于两个,相当于对矩阵的稀疏性进行限制,然后在此

条件下找到合适的矩阵𝓐和缩放因子使RMSE小化以寻求符合题意的最佳分解方案。

1.2.2问题二分析
          问题二的目的同问题一:在降低硬件复杂度的同时,最小化分解误差,但是是在约束2的条件下,即对分解矩阵中各元素的实部和虚部的取值范围进行了约束,相当于在考虑元素取值范围的情况下,探究出一种最合适的分解方案。

1.2.3问题三分析
          在同时满足约束1和约束2的条件下,优化DFT矩阵的分解,最小化误差和硬件复杂度。可以理解为此题是建立在问题一和问题二的基础上,对矩阵的稀疏性和各元素的取值范围进行了限制,但最终目的仍为对 DFT 矩阵分解方案的探究,因此可以借鉴前两题的分解方案,然后根据约束条件对方法进行优化。

1.2.4问题四分析

对于DFT矩阵

F

N1

FN2

Kronecker

F 进行研究。要求在

N

1

=

4,

N

2

=

8

满足约束1

约束2的条件下,对A进行优化,找到最小误差的方案并计算复杂度C

1.2.5问题五分析
          本题的重点在于在问题三的基础上加上精度的限制来研究矩阵分解方案,即需要在同时满

足约束1和约束2的情况下,满足最小误差

RMSE0.1

的条件,通过对模型变量进行优化,以减少硬件复杂度

模型假设

    本题中硬件复杂度指标仅考虑乘法器的个数和每个乘法器的复杂度;

    题中乘法器的个数为复乘的次数,乘法器的复杂度只跟矩阵中各元素的取值范围有关;

    在复数计算中,与0±1±𝑗(±1 ± 𝑗)相乘时不计入复数乘法次数。

三、符号定义及说明

符号

意义

𝑁

矩阵的维数

𝐅𝑁

NDFT矩阵

𝓐

矩阵分解后的矩阵集

RMSE(𝓐, 𝛽) RMSE

精度

𝐶

硬件复杂度

q

分解后的矩阵𝐀𝑘中元素的取值范围

L

复数乘法的次数

𝛽

实值矩阵缩放因子

K

𝓐中矩阵的个数

 

对于给定硬件复杂度计算式:

C

=

q

L

          由于q指示分解后的矩阵中元素的取值范围,由分解结果可知元素实部和虚部的取值范围为[-101],即q=1。即硬件复杂度计算式C=1×0=0

对于给定最小误差计算式:

当β位于FN前面时,由公式可得:

min RMSE(

,

,

)

=

1

F

N

A A

1

2

A

2

K F

N

当β位于A1A2A3前面时,由公式可得:

min RMSE(

,

,

)

=

1

F

N

A A

1

2

A

2

K F

N

将矩阵分解结果借助MTLAB工具对目标函数进行分析,得到结果为:

5.2 原目标函数下β取值时的最小误差

 

5.3 修改后目标函数下β取值时的最小误差

          分析结果可得,无论β取何值,当N=4时,最小误差皆为0此时β取值均为一,此时精度达到最高,硬件复杂度也达最低值。

t=3N=8时:

问题总结与评价

6.1模型优点

分块矩阵分解模型优点:对矩阵进行适当分块,可使高阶矩阵的运算转化为低阶矩阵的运算,同时也使原复杂矩阵的结构显得简单而清晰,从而能够大大简化运算步骤。本文通过构造分块矩阵分解模型,通过对矩阵进行分块运算,减少了矩阵分解的运算量,并且使得分解后的矩阵形式简洁清晰。

矩阵乘法拟合方法优点:矩阵乘法拟合主要根据 DFT 矩阵的对称性,选择参数变量 a 的定义域来找到DFT近似矩阵,由于其定义域的确定和穷举法的结合,使得DFT的分解矩阵满足题目中的约束。

          奇异值分解法优点:此方法基于在线性代数中矩阵常见的分解方法奇异值(SVD)分解,所以有很多成熟的程序函数对其进行分解,计算效率高。

6.2模型缺点与改进方向

分块矩阵分解模型改进:分块矩阵的应用可以简化矩阵分解的运算和降低分解维数,本文构造的分块矩阵分解模型在维数较低时分解较容易,如二维或四维矩阵,但在高维矩阵时,即使运用了分块矩阵的思想也仍具有一定的复杂度。故应用该模型前,可先用矩阵的常规分解方法先对矩阵进行初步的预处理,再运用分块矩阵分解模型对矩阵进行适当分块,即可提高矩阵分解效率以及准确性。

          矩阵乘法拟合方法的改进:矩阵乘法拟合对于取值范围较小的 N 来说可以很好的进行计算。但是随着N值的增长,使用穷举法进行搜索空间会呈指数级增长,使得问题计算量倍增。

因此在N值较大时需要使用梯度下降法确定一定的取值范围后再使用穷举法进行计算


代码

部分matlab源程序代码

n=8;

for B=0:0.01:1

  f=dftmtx(n);

A1=[        1,0,0,0,1,0,0,0;

  0,1,0,0,0,1-i,0,0;

  0,0,1,0,0,0,-i,0;

  0,0,0,1,0,0,0,-1-i;

  1,0,0,0,-1,0,0,0;

  0,1,0,0,0,-1-i,0,0;

  0,0,1,0,0,0,i,0;

  0,0,0,1,0,0,0,1-i];

  A2=[1,1,1,1,0,0,0,0;

  1,1-i,-i,1-i,0,0,0,0;

  1,-i,-1,-i,0,0,0,0;

  1,1-i,-i,1-i,0,0,0,0;

  0,0,0,0,1,1,1,1;

  0,0,0,0,1,1-i,-i,1-i;

  0,0,0,0,1,-i,-1,-i;

  0,0,0,0,1,1-i,-i,1-i];

  A3=[1,0,0,0,0,0,0,0;

  0,0,1,0,0,0,0,0;

  0,0,0,0,1,0,0,0;

  0,0,0,0,0,0,1,0;

  0,1,0,0,0,0,0,0;

  0,0,0,1,0,0,0,0;

  0,0,0,0,0,1,0,0;

  0,0,0,0,0,0,0,1];

  C=B*f-A1*A2*A3;

  C=norm(C,'fro');

  C=abs(C);

  RMSE=C/n;

  RMSE=RMSE/sqrt(n);

  plot(B,RMSE,'r>');

  hold on

end

4问最小误差公式实现

  w=[0,0,4+i,4+i;

  0,0,3i,-5-i;

  0,0,-4+i,4;

  0,0,-5i,-3-i];

  u=[3-i,0,0,0,0,0,0,0;

  3i,0,0,0,0,0,0,-i;

  0,0,0,0,2+2i,0,0,0;

 

  0,0,0,0,0,0,0,3i;

  0,0,-4,0,0,0,0,-4;

  1+3i,0,2-i,0,0,0,0,0;

  0,0,5-i,0,-4-i,0,0,0;

  -3i,0,-3+i,0,0,0,0,0];

  s=[1,0,0,0;

  0,1,0,0;

  0,0,1,0;

  0,0,0,1];

  d=[1,0,0,0,0,0,0,0;

  0,1,0,0,0,0,0,0;

  0,0,1,0,0,0,0,0;

  0,0,0,1,0,0,0,0;

  0,0,0,0,1,0,0,0;

  0,0,0,0,0,1,0,0;

  0,0,0,0,0,0,1,0;

  0,0,0,0,0,0,0,1];

  q=[-1,0,0,0;

  0,1,0,0;

  0,0,i,9+i;

  0,0,1,-3+2i];

  v=[0,0,0,0,0,-1,0,0;

  0,-4i,0,4-4i,0,0,0,0;

  -9+i,0,0,0,0,0,0,0;

  0,2-4i,4+4i,0,0,0,0,0;

  0,0,0,0,0,0,1,0;

  0,0,0,0,0,0,0,2+2i;

  0,1,0,0,0,0,0,0;

  0,0,3i,0,0,0,0,0];

A=kron(w,u);

B=kron(s,d);

C=kron(q.',u.');

C=C.';

n=32;

for i=-5:0.01:0

  f=dftmtx(n);

  D=i*f-A*B*C;

  D=norm(D,'fro');

  D=abs(D);

  RMSE=D/n;

  RMSE=RMSE/sqrt(n);

  plot(i,RMSE,'r>');

  hold on

end

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSM四川工商学院学生宿舍管理系统---附源码54633

摘 要 从20年代开始,计算机疯狂的出现在人们的生活以及工作当中,成为人们生活、工作的好帮手,计算机深入到每家每户当中,网络办公,网络教学更是替换了传统手工记录管理的方式,使用计算机办公可以不必局限于…

MySQL-12.DQL-聚合函数

一.DQL-分组查询 二.聚合函数 -- DQL:分组查询 -- 聚合函数 -- 1.统计该企业员工数量 count select count(id) from tb_emp; select count(job) from tb_emp;select count(A) from tb_emp; select count(*) from tb_emp;-- 2.统计该企业最早入职的员工 min select min(entr…

SQL第18课挑战题

1. 创建一个名为customerswithorders的视图,其中包含customers表中的所有列,但仅仅是那些已下订单的列。提示:可以在orders表上使用join来仅仅过滤所需的顾客,然后使用select来确保用有正确的数据。 创建视图:

电影台词摘抄(十一)——Banana!

Scarlet:Do you know who this is? Kevin:Uh. La cucaracha? n.伊丽莎白(女子名) Scarlet:This is Queen Elizabeth, ruler of England.Oh, I love England, Their music, the …

Linux - 环境变量 | 命令行参数 | 进程基础

文章目录 一、了解冯诺依曼体系结构1、概念2、对数据层面3、实例二、操作系统1、概念2、设计OS的目的3、定位4、操作系统怎么管理? 三、进程1、概念2、怎么管理进程3、描述进程-PCB4、描述进程怎么运行(粗略)5、进程属性6、创建子进程7、创建…

bash之基本运算符

一.算术运算符 vim test.sh #!/bin/basha10 b20valexpr $a $b echo "a b : $val"valexpr $a - $b echo "a - b : $val"valexpr $a \* $b echo "a * b : $val"valexpr $b / $a echo "b / a : $val"valexpr $b % $a echo "b % a …

c++STL——map与set的使用及介绍

目录 前言: 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器 4. set的容量 5. set修改操作 6. set的使用举例 3.2 map 3.2.1 map的介绍 3.2.2 map的…

Vue3浮动按钮(FloatButton)

效果如下图:在线预览 APIs FloatButton 参数说明类型默认值left按钮定位的左边距,单位 pxnumber | stringundefinedright按钮定位的右边距,单位 pxnumber | string24top按钮定位的上边距,单位 pxnumber | stringundefinedbottom…

spring 如何将mutipartFile转存到本地磁盘

两者的区别和联系 MutipartFile是spring的一部分,File则是java的标准类MutipartFile用于接收web传递的文件,File操作本地系统的文件 MutipartFile 转换File的三种方式 使用MutipartFile 自带的transferTo方法使用java自带的FileOutPutStream流使用java自…

使用Langchain-chatchat搭建RAG应用,并使用postman进行测试验证

Github地址:https://github.com/chatchat-space/Langchain-Chatchat 一、概述 LangChain-Chatchat (原 Langchain-ChatGLM),一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运…

React(一) 认识React、熟悉类组件、JSX书写规范、嵌入变量表达式、绑定属性

文章目录 一、初始React1. React的基本认识2. Hello案例2.1 三个依赖2.2 渲染页面2.3 hello案例完整代码 二、类组件1. 封装类组件2. 组件里的数据3. 组件里的函数 (重点)4. 案例练习(1) 展示电影列表 三、JSX语法1. 认识JSX2. JSX书写规范及注释3. JSX嵌入变量作为子元素4. JS…

android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471) https://blog.csdn.net/learnframework/article/details/120103471 hi,有学员在学习跨进程通信专题课程时候,在实战app执行一个shell命令的项目时候,对课程本身的android …

推荐算法的学习

文章目录 前言1、模型1.1 从本领域模型的发展历史中学习1.1.1 在历史中总结发展规律和趋势1.1.2 发现模型之间的共性,方便记忆 1.2 从其他领域的发展中学习1.2.1 注意力机制1.2.2 残差网络 1.3 实践该怎么办? 2、 特征2.1 数据源的选择与建立2.2 特征构造…

Element中el-table组件设置max-height右侧出现空白列的解决方法

之前就出现过这个情况,没理过,因为不影响啥除了不美观...但今天看着实在是难受,怎么都不顺眼(可能是我自己烦躁--) 试了很多网上的方法,都不得行,后面发现了这篇文章,解决了! 感谢! Element中t…

PageHelper循环依赖问题

1. 问题 2. 原因 项目中SpringBoot的版本为2.7.18。 SpringBoot2.6.x后不推荐使用循环依赖,也就是说从2.6.x版本开始,如果项目里还存在循环依赖,SpringBoot将拒绝启动! 3. 解决 去pageHelper github看,才看到新版本…

Pandas缺失值处理

目录 NaN 加载包含缺失的数据 查看缺失值 通过info函数查看缺失值 通过isnull函数查看缺失值 通过notnull函数查看缺失值 通过isnull().sum()统计空值 缺失值处理 准备数据 dropna删除缺失值 fillna平均值填充缺失值 fillna前后值填充缺失值 interpolate线性插值 …

C++中的vector二维数组(全面详解)

目录 二维数组概念: 二维数组格式: 二维数组的初始化: 在创建的时候就进行初始化: resize初始化: 构造v的时候只给行数,列数用resize开辟 构造v的时候不给行数不给列数,都用resize来开辟…

Java中使用protobuf

一、简介 Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化、反序列化。 Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。 Protocol B…

第十三章 RabbitMQ之消息幂等性

目录 一、引言 二、消息幂等解决方案 2.1. 方案一 2.2. 方案二 一、引言 幂等是一个数学概念,用函数表达式来描述是这样的:f(x) f(f(x)) 。在程序开发中,则是指同一个业务,执行一次或多次对业务状态的影响是一致的。有些业务…

【C语言】循环中断break

在循环使用过程中,可能遇到某些情况需要终止循环。比如按座位查找一位学生,循环查找,找到时可以直接停止。后续的循环将不再执行。 break;只跳出一层循环 例子中的素数判断,查找到根号n停止:一个合数等于两个数的乘积…