【全网最全】2023华为杯研究生数学建模B题完整思路+python代码+20页超详细启发式算法+FFT(后续会更新)

目录

点击资料获取入口


DFT在通信等领域的重要应用,以及目前采用FFT计算DFT的硬件开销大的问题。提出了将DFT矩阵分解为整数矩阵乘积逼近的方法来降低硬件复杂度。 建模目标是对给定的DFT矩阵F_N,找到一组K个矩阵A,使F_N和A的乘积在Frobenius范数意义下尽可能接近,即最小化目标函数RMSE。 硬件复杂度C的计算公式给出,与矩阵A中元素的取值范围q和复数乘法次数L相关。 给出了两种约束条件。约束1限制A中每个矩阵的每行最多2个非零元素。约束2限制A中每个矩阵的元素取值范围为整数集P。 对DFT大小N=2^t,t=1~5给出不同约束条件下的优化问题,要求求出最小RMSE和相应的硬件复杂度C。

添加图片注释,不超过 140 字(可选)

问题一:

要求在约束条件1(每个矩阵最多2个非零元素)下,对DFT矩阵F_N(N=2^t,t=1,2,3...)进行分解逼近,并计算最小误差和硬件复杂度。 这里采用的思路是: 1. 将DFT矩阵F_N拆分为多个对角矩阵的乘积,每个对角矩阵只有一个非零元素,这样就满足了约束条件1。 2. 对角矩阵的顺序和元素值可以通过搜索算法优化,以得到最小的逼近误差。 3. 由于本题中没有限制取值范围,为简化计算,可将所有非零元素设为1。 4. 硬件复杂度即为矩阵乘法次数,这里每个矩阵只有一个非零元素,所以复杂度就是矩阵个数。 例如当N=4时:

$$

F_4 \approx \begin{bmatrix}1&0&0&0\0&0&0&0\0&0&0&0\0&0&0&0\end{bmatrix}

\begin{bmatrix}0&0&0&0\0&1&0&0\0&0&0&0\0&0&0&0\end{bmatrix}

\begin{bmatrix}0&0&0&0\0&0&0&0\0&0&1&0\0&0&0&0\end{bmatrix}

\begin{bmatrix}0&0&0&0\0&0&0&0\0&0&0&0\0&0&0&1\end{bmatrix}

$$ 按此方法,计算了N=2至N=8的最小误差和复杂度如下:

N=2,误差=0,复杂度=2

N=4,误差=2,复杂度=4

N=8,误差=6,复杂度=8

N=16,误差=14,复杂度=16

N=32,误差=30,复杂度=32

N=64,误差=62,复杂度=64可以看出,随着N增大,误差也线性增大,但复杂度只与N线性相关。

1. DFT矩阵F_N的定义:

$$ F_N = \frac{1}{\sqrt{N}} \begin{bmatrix}

1 & 1 & 1 & \cdots & 1 \

1 & w & w^2 & \cdots & w^{N-1} \

\vdots & \vdots & \vdots & \ddots & \vdots \

1 & w^{N-1} & w^{2(N-1)} & \cdots & w^{(N-1)(N-1)}

\end{bmatrix} $$其中$w = e^{-j2\pi/N}$。 2. 将F_N拆分为N个对角矩阵的乘积: $$ F_N \approx D_1D_2\cdots D_N$$ 其中$D_k$为仅第k个对角元素为1的对角矩阵:

$$ D_k = \begin{bmatrix}

0 & & \

&\ddots& \

& & 1_{kk} & & \

& & & \ddots& \

& & & & 0

\end{bmatrix}$$ 3. 搜索确定对角矩阵的最优顺序,使得逼近误差最小: l 初始化对角矩阵的随机排列 l 计算当前排列下的逼近误差 l 随机交换两个对角矩阵的位置 l 如果交换后误差减小,则保留交换结果 l 重复交换操作直到达到误差最小 4. 逼近误差的计算: $$ RMSE = \frac{1}{N}\sqrt{|F_N - D_1D_2\cdots D_N|_F^2} $$ 5. 硬件复杂度即为矩阵乘法次数,这里每个D_k矩阵仅有一个非零元素,所以复杂度就是矩阵个数N。

6. 按此方法,计算从N=2到N=64时的最小逼近误差RMSE和硬件复杂度C。

import
numpy as np
from
numpy.linalg import norm
import
random

def
dft_matrix(N):
i, j = np.meshgrid(np.arange(N),
np.arange(N))
omega = np.exp(-2 * np.pi * 1j / N)
W = np.power(omega, i * j)
return W / np.sqrt(N)

def diagonal_matrix(N,
k):
D = np.zeros((N,N))
D[k,k] = 1
return D

def
matrix_decomposition(F, iters=100):
N = F.shape[0]
D = [diagonal_matrix(N,k) for k in
range(N)]

best_D = D.copy()
min_error = np.inf

for i in range(iters):
random.shuffle(D)
approx = np.identity(N)
for d in D:
approx = np.dot(approx, d)
error = norm(F - approx, 'fro') / N

if error < min_error:
min_error = error
best_D = D.copy()

return best_D, min_error

if __name__
== '__main__':
for N in [2, 4, 8, 16, 32, 64]:
F = dft_matrix(N)
D, error = matrix_decomposition(F)
print(f'N = {N}: error = {error:.4f},
complexity = {len(D)}')

问题二:

使用类似问题1的对角矩阵分解方法。

根据约束条件2,每个对角矩阵的非零元素取值为整数集P中的值。

通过穷举P中的值,选择肯定使逼近误差最小的元素值。

硬件复杂度计算同样根据矩阵乘法次数,且考虑元素取值范围q=3。

1. F_4 的定义如下:

$$

F_4 = \frac{1}{2} \begin{bmatrix}

1 & 1 & 1 & 1\

1 & j & -1 & -j\

1 & -1 & 1 & -1\

1 & -j & -1 & j

\end{bmatrix}

$$ 2. 将其分解为4个对角矩阵Di:

$$

F_4 \approx D_1D_2D_3D_4

$$ 其中Di是仅第i个对角元素非零的对角矩阵。 3. 根据元素取值范围P={0,±1,±2},对Di的非零元素取值进行穷举,选择误差最小的取值:

$$

\begin{aligned}

D_1 &= \begin{bmatrix}

1 & 0 & 0 & 0\

点击资料获取入口

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

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

相关文章

【算法思想】排序

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

小土堆pytorch学习笔记

想入门pytorch强化学习&#xff0c;就去找pytorch的课来看。B站上播放量最高的就是小土堆的课&#xff0c;整体跟下来感觉内容还是很详细的&#xff0c;但和我的预期不太一样&#xff0c;这个是DL的不是RL的&#xff0c;不过作为对于pytorch使用的初期了解也是很好的&#xff0…

ChatGLM OPENCL 和 CUDA 哪个 GPU 加速计算框架更快

OpenCL和CUDA都是强大的GPU加速计算框架,CUDA在与NVIDIA GPU的紧密结合下提供了更高性能,适用于专注于NVIDIA平台开发者;而OpenCL具有跨平台兼容性和多厂商支持的优势,适用于需要在不同硬件平台上进行开发的场景。 在现代计算领域,GPU 加速已经成为一种强大的工具,能够显…

hexo使用指南

一、git设置 git ssh配置 本地操作&#xff1a; git config --global user.name "你的git用户名" git config --global user.email "你的git登录邮箱" #生成ssh公钥 ssh-keygen -t rsa -C "你的git登录邮箱"github官网操作&#xff1a; 将公…

Linux学习-HIS系统部署(1)

Git安装 #安装中文支持&#xff08;选做&#xff09; [rootProgramer ~]# echo $LANG #查看当前系统语言及编码 en_US.UTF-8 [rootProgramer ~]# yum -y install langpacks-zh_CN.noarch #安装中文支持 [rootProgramer ~]# vim /etc/locale.co…

RSD处理气象卫星数据——常用投影

李国春 气象卫星扫描刈幅宽覆盖范围广&#xff0c;在地球的不同位置可能需要不同的投影以便更好地表示这些观测数据。这与高分辨率的局地数据有很大不同&#xff0c;高分数据更倾向于用使用处理局地小范围的投影方式。本文选择性介绍几种RSD常用的适合低、中、高纬和极地地区的…

Java笔记:看清类加载过程

1 类加载的过程 1.1 加载 “加载”是“类加载”(Class Loading)过程的第一步。这个加载过程主要就是靠类器实现的&#xff0c;包括用户自定义类加载器。 加载的过程 在加载的过程中&#xff0c;JVM主要做3件事情 1&#xff09;通过一个类的全限定名来获取定义此类的二进制字节…

svn(乌龟svn)和SVN-VS2022插件(visualsvn) 下载

下载地址: https://www.visualsvn.com/visualsvn/download/

SSM - Springboot - MyBatis-Plus 全栈体系(十一)

第二章 SpringFramework 五、Spring AOP 面向切面编程 6. Spring AOP 基于 XML 方式实现&#xff08;了解&#xff09; 6.1 准备工作 加入依赖和基于注解的 AOP 时一样。准备代码把测试基于注解功能时的 Java 类复制到新 module 中&#xff0c;去除所有注解。 6.2 配置 Sp…

C 初级学习笔记(基础)

目录 1.预处理器指令 预定义宏 预处理器运算符 &#xff08;\&#xff09; 参数化的宏 头文件 .h 引用头文件操作 2.函数&#xff08;标识符&关键字&运算符&#xff09;存储类 函数参数 a. 标识符&关键字 b. 运算符&#xff08;算术、关系、逻辑、位、赋…

智能电力运维系统:数字化转型在电力行业的关键应用

随着信息技术、人工智能等的飞速发展&#xff0c;数字化改造已成为各行各业的重要发展趋势。在电力行业中&#xff0c;智能电力运维系统是数字化转型的关键应用之一。 力安科技智能电力运维系统是一种集自动化、智能化、云计算、物联网等先进技术于一体的电力运维管理解决方…

IntelliJ IDEA学习总结(3)—— IntelliJ IDEA 常用快捷键(带动图演示)

一、构建/编译 Ctrl + F9:构建项目 该快捷键,等同于菜单【Build】—>【Build Project】 执行该命令后,IntelliJ IDEA 会编译项目中所有类,并将编译结果输出到out目录中。IntelliJ IDEA 支持增量构建,会在上次构建的基础上,仅编译修改的类。 Ctrl + Shift + F9:重新编…

基于springboot+vue的高校专业实习管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

原生js值之数据类型详解

js的数据类型 数据类型分类基本数据类型boolean:布尔类undefined:未定义的值null类型数值转换 NumberparseInt 转换整数 parseFloat转换浮点数 String类型特点如何转换成字符串模板字面量字符串插值模板字面量标签函数 symbol类型特性使用 BigInt类型复杂数据类型Object类属性与…

精品Python数字藏品购物商城爬虫-可视化大屏

《[含文档PPT源码等]精品基于Python实现的数字藏品爬虫》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScript、VUE.js&a…

代码随想录算法训练营 动态规划part06

一、完全背包 卡哥的总结&#xff0c;还挺全代码随想录 (programmercarl.com) 二、零钱兑换 II 518. 零钱兑换 II - 力扣&#xff08;LeetCode&#xff09; 被选物品之间不需要满足特定关系&#xff0c;只需要选择物品&#xff0c;以达到「全局最优」或者「特定状态」即可。 …

将近 5 万字讲解 Python Django 框架详细知识点(更新中)

Django 框架基本概述 Django 是一个开源的 Web 应用后端框架&#xff0c;由 Python 编写。它采用了 MVC 的软件设计模式&#xff0c;即模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。在 Django 框架中&am…

安装gpu版本的paddle和paddleclas

安装gpu版本的paddle python -m pip install paddlepaddle-gpu2.3.2.post111 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html以上支持cuda11.1版本 其他需求可查阅文档在这里 安装paddleclas 1 在虚拟环境中安装所需的Python库&#xff1a; pip inst…

爬虫获取静态网页数据

自动爬取网页数据 正常情况下是我们使用浏览器输入指定url&#xff0c;对服务器发送访问请求&#xff0c;服务器返回请求信息&#xff0c;浏览器进行解析为我们看到的界面&#xff0c;爬虫就是使用python脚本取代正常的浏览器&#xff0c;获取相应服务器的返回请求信息&#x…

基于springboot+vue的毕业生实习与就业管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…