当前位置:文档之家› Matlab解数独游戏解析

Matlab解数独游戏解析

Matlab解数独游戏解析课程设计说明书学生姓名: 燕飞宇学号: 1405054217信息与通信工程学院学院:专业: 信息对抗技术专业题目: Matlab专用周(随数字信号处理课) 指导教师: 李凯、刘宾、杨志良、李沅2016年 11月 30 日中北大学课程设计任务书2016/2017 学年第一学期学院: 信息与通信工程学院专业: 信息对抗技术学生姓名: 燕飞宇学号:1405054217 学生姓名: 毕广宇学号:1405054235 课程设计题目: Matlab课程设计起迄日期: 2016年12月5日,2016年12月9日课程设计地点: 信息对抗技术专业综合实验室指导教师: 李凯、刘宾、杨志良、李沅学科部主任: 张丕状下达任务书日期: 2016 年11 月30日课程设计任务书 1(设计目的:(1)通过本课程设计的学习,学生将复习所学的数字信号处理知识,使课堂学习的理论知识应用于实践,通过本课程设计的实践使学生具有一定的实践操作能力; (2)掌握Matlab语言的编程方法,能熟练运用;(3)通过Matlab实践的课程设计,掌握设Matlab数字信号处理系统的思维方法和基本开发过程。

2(设计内容和要求(包括原始数据、技术参数、条件、设计要求等):一、学习Matlab编程及仿真1、熟悉Matlab的运行环境;2、学会并掌握Matlab图形编程;3、根据所设计系统的需要会合理设定需完成系统的各项参数;4、根据所设计系统的需要,优化程序设计最优系统。

二、实践设计要求:1、根据所选题目,设计实现系统的原理框图。

2、编写Matlab程序,给出系统不同节点输出波形。

3、每人写出设计报告。

三、参考题目题目1:语音信号分析通过计算机录制一段语音信号,分析该语音信号。

1、分析该信号的频谱特性;2、采用IIR进行降噪;3、根据FIR进行降噪;4、对信号进行断句分割。

5、求信号的均值、方差;6、求信号的自相关系数;7、求信号的窗(1秒、2秒)能量;8、求信号的窗(1秒、2秒)自相关分析9、采用平均幅度差函数(AMDF法)提取求信号的基音周期、谱估计;10、根据数字特征对信号进行断句分割。

注:每个同学可以选择1和2、1和3、1和4、5和6、5和7、5和8、5和9、5和10的一组作为题目,8名同学完成该题目。

题目2:傅里叶变换设计自己设计傅里叶变换函数(不能使用Matlab函数); 题目3:数独游戏设计1、根据数独游戏规则,设计数独判断程序;2、自动生成数独表;3、根据输入给出输出;注:2个同学一组。

题目4:Matlab绘图界面设计1、设计GUI界面;2、通过下拉菜单选择绘制正弦、正切信号;3、通过编辑框输入命令,根据命令绘制信号;4、通过按钮在图形中输出标注(标题、各轴名称);注:1个同学一组。

题目5:Matlab信号分析界面设计1、设计GUI界面;2、通过按钮输入信号;3、对信号进行频谱分析;4、输出信号的频谱;注:1个同学一组。

题目6:Matlab信号滤波分析界面设计1、设计GUI界面;2、通过按钮输入信号;3、对信号进行低通、高通、带通分析(FIR、IIR、巴特沃斯、切比雪夫);4、输出处理信号的结果、频谱;注:每个同学选择一个滤波器,4名同学完成该题目。

题目7:Matlab智能信号发生器1、输出方波、矩形波、三角波和正弦波信号;2、输出随时间变化频率的信号;3、输出随时间变化幅值的信号4、输出随时间变化斜率的等幅值的信号;5、输出处理信号的结果、频谱;注:每个同学选择一种信号,4名同学完成该题目。

题目8:Matlab方程组求解数值计算设计1、设计GUI界面;2、通过按钮选择计算方法,表格录入数据;3、对录入数据判断是否可算,实现算法如高斯-赛德尔、列主元消去法、高斯消元法等;4、输出计算结果、误差;注:每个同学选择一种算法,4名同学完成该题目。

题目9:Matlab插值求解数值计算设计1、设计GUI界面;2、通过按钮选择计算方法,表格录入数据;3、对录入数据判断是否可算,实现算法如三次样条插值、拉格朗日插值、牛顿插值等;4、输出计算结果、误差;注:每个同学选择一种算法,4名同学完成该题目。

题目10:Matlab哈弗曼编码设计1、设计GUI界面;2、通过按钮选择计算方法,表格录入数据;3、对录入数据实现算法哈弗曼信源编码;4、输出计算结果、编码效率;注:1名同学完成该题目。

题目11:Matlab费诺编码设计1、设计GUI界面;2、通过按钮选择计算方法,表格录入数据;3、对录入数据实现费诺信源编码;4、输出计算结果、编码效率;注:1名同学完成该题目。

题目12:Matlab卷积码编码解码设计1、设计GUI界面;2、通过按钮选择计算方法,录入数据;3、对录入数据实现算法卷积码信道编码;4、输出计算结果、编码效率;注:一个同学设计算法、一个同学设计算法分析,2名同学完成该题目。

题目13:Matlab文本内容加密解密算法设计1、设计GUI界面输入文本文件内容;2、对文本内容采用字符颠倒的顺序加密;3、密码字典设计、解密算法设计;4、输出结果。

注:每个同学选择一种算法,2名同学完成该题目。

题目14:Matlab加噪信号发生器1、输出理想信号如方波、矩形波、三角波和正弦波信号(参数可调);2、输出高斯噪声信号(参数可调);3、输出理想信号与噪声信号叠加后信号4、输出处理信号的结果、计算信噪比;注:每个同学选择一种信号,5名同学完成该题目。

题目15:Matlab信号参数计算1、编写一个长度为100的随机信号,信号在区间[-5,5]中均匀、泊松、正态分布;2、测量该序列的均值,方差,最大值,最小值;3、计算其相关函数。

注:每个同学选择一种信号,2名同学完成该题目。

题目16:基于蒙特卡罗模拟方法的信号分析1、随机产生信号,信号在区间[-5,5]中泊松、正态、分布;2、设计蒙特卡罗函数;3、采用蒙特卡罗模拟方法对设计的信号进行分析;4、并输出结果;注:每个同学选择一种分布信号,3名同学完成该题目。

题目17:Matlab信号分解1、编写一个由3不同特征组成信号(相位、频率、幅度);2、对信号叠加白噪声;3、分析信号的频谱、功率谱;4、测量该序列的均值,方差,最大值,最小值;5、设计滤波器,分解3个信号。

注:1名同学完成该题目。

题目18:Matlab信号参数分析1、设计指数、瑞利、韦泊分布的信号;2、设计3个频率组合的信号;3、叠加上述信号;4、分析上述信号的频谱。

注:1名同学完成该题目。

题目19:Matlab动态移动小球绘图1、设计三块磁铁构成的磁力线图;2、设计一个红色小球沿磁力线移动;3、通过键盘控制小球移动的速度;4、通过鼠标滚轮控制小球在不同的磁力线移动。

注:每名同学选择上述题目中的1个,4名同学完成该题目。

题目20:Matlab动态绘图1、设计不同频率组成的信号;2、分析信号的频谱;3、动态绘制信号;4、输出信号的分析结果。

注:1名同学完成该题目。

3(设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:(1) 要求设计组的每个成员都要了解设计的要求和整体思路; (2) 每个题目小组的同学各完成一份设计说明书,突出各自的工作内容; (3) 要求有正确的运行结果及结果分析。

课程设计任务书 4(主要参考文献:, 谭浩强.《C程序设计(第二版)》.清华大学出版社.1999年12月 , 袁志祥.《数据结构(c语言版)例题详解与课程设计指导》第二版. 中国科学技术大学出版社出版, 谭浩强.《C语言程序设计题解与上机指导》.清华大学出版社.2000年11月 , 陈朔鹰, 陈英主.《C语言程序设计习题集(第二版)》.人民邮电出版社.2003年2月, 田淑清.《C语言程序设计辅导与习题集》.中国铁道出版社.2000年1月 , 王明泉.《信号与系统》.科学出版社.2010年6月5(设计成果形式及要求:每个子题目小组提供详细的设计说明书一份设计说明书中包含:1、关键词解释,设计方案基本原理;2、软件框图;3、调试过程、设计结果、设计分析;4、附录软件源代码6(工作计划及进度:2016年12月5日 ~ 2016年12月5日:学习Matlab有关编程方法;2016年12月6日 ~ 2016年12月8日:在指导教师指导下实现程序设计;2016年12月8日 ~ 2016年12月9日:撰写课程设计说明书;2016年12月9日:答辩。

学科部主任审查意见:签字:年月日目录1.设计目的简介 (1)2.设计主要方案及理论介绍 (1)3.设计主要步骤 (3)4.程序源代码 (5)5.运行结果 (7)6.实例验证 (8)7.设计评述 (13)8.参考文献 (13)11.设计目的简介数独游戏设计1.根据数独游戏规则,设计数独判断程序;2.自动生成数独表;3.根据输入给出输出;2.设计主要方案及理论介绍算法:递归算法特点递归算法是一种直接或者间接地调用自身算法的过程。

在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

递归算法解决问题的特点:(1) 递归就是在过程或函数里调用自身。

(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。

所以一般不提倡用递归算法设计程序。

(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。

递归次数过多容易造成栈溢出等。

要求递归算法所体现的“重复”一般有三个要求:一是每次调用在规模上都有所缩小(通常是减半);二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);2三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。

3.设计主要步骤S = zeros([size(M),0]); end%-------查找第一个0元素-------------firstId = find(M(:)==0, 1 );%-------矩阵中无0元素-----------if isempty(firstId)S(:,:,size(S,3)+1) = M; %-------矩阵中有0元素-----------3else%--------查找该元素在矩阵中的位置------------[i,j] = ind2sub([9,9],firstId);%--------填充第一个0元素--------------------for k=1:9 %loop through all 9 possibilities%--------寻找该0元素所在的3*3矩阵----------ii = (ceil(i/3)-1)*3+1;jj = (ceil(j/3)-1)*3+1;mm = M(ii:ii+2,jj:jj+2);%--------判断该行,该列,该3*3矩阵中是否存在元素k--------if sum(M(i,:)==k)==0 && sum(M(:,j)==k)==0 && sum(mm(:)==k)==0 %--------将k填入第一个0元素-------M(i,j) = k;%--------%填完这个数后就在此基础上填写第二个0元素--------S = sodoku(M,S);endendEnd4流程图54.程序源代码function S = sodoku(M,S)%M =[0,0,1,9,0,0,0,0,8;6,0,0,0,8,5,0,3,0;0,0,7,0,6,0,1,0, 0;...%0,3,4,0,9,0,0,0,0;0,0,0,5,0,4,0,0,0;0,0,0,0,1,0,4,2,0 ;...%0,0,5,0,7,0,9,0,0;0,1,0,8,4,0,0,0,7;7,0,0,0,0,9,2,0,0];%%S = sodoku(M)if ~exist('S','var')S = zeros([size(M),0]); endfirstId = find(M(:)==0, 1 ); if isempty(firstId) S(:,:,size(S,3)+1) = M; else[i,j] = ind2sub([9,9],firstId);for k=1:9ii = (ceil(i/3)-1)*3+1;jj = (ceil(j/3)-1)*3+1;mm = M(ii:ii+2,jj:jj+2);if sum(M(i,:)==k)==0 && sum(M(:,j)==k)==0 && sum(mm(:)==k)==0M(i,j) = k;S = sodoku(M,S);endendend65.运行结果75.1实例验证891011126.设计的评述及通过设计的收获体会通过实验,是我对MATLAB有了一个基础的了解,在学习MATLAB编程中需要很多的参考书,要尽量多的熟悉matlab自带的函数及其作用,因为matlab的自带函数特别多,基本上能够满足一般的数据和矩阵的计算,所以基本上不用你自己编函数。

相关主题