MATLAB界面设计报告优秀篇.docx
- 文档编号:15894380
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:17
- 大小:191.39KB
MATLAB界面设计报告优秀篇.docx
《MATLAB界面设计报告优秀篇.docx》由会员分享,可在线阅读,更多相关《MATLAB界面设计报告优秀篇.docx(17页珍藏版)》请在冰点文库上搜索。
MATLAB界面设计报告优秀篇
基于MATLAB的单色光的干涉和衍射实验
GUI
设
计
报
告
一、概述
MATLAB是目前世界上最流行的、应用最广泛的工程计算和仿真软件,它将计算、可视化和编程等功能同时集于一个易于开发的环境。
MATLAB主要应用于数学计算、系统建模与仿真、数学分析与可视化、科学与工程绘图和用户界面设计等。
其中,用户界面设计中,GUI开发环境是MATLAB7.3为设计图形用户界面提供了一个集成与开发环境,且广泛用于实验模拟软件开发中。
此次我所设计的是一个较简洁、清晰的关于单色光干涉与衍射实验的软件。
其能完成特定条件下干涉条纹间距和衍射半角的计算,以及干涉条纹和衍射条纹的绘制。
二、前期准备
2.1干涉原理及程序
干涉原理图
程序如下:
ym=5*flag_lambda*flag_D/flag_a/1000000;
xs=ym;
n=101;
ys=linspace(-ym,ym,n);
fori=1:
n
r1=sqrt((ys(i)-(flag_a/1000)/2).^2+(flag_D)^2);
r2=sqrt((ys(i)+(flag_a/1000)/2).^2+(flag_D)^2);
phi=2*pi*(r2-r1)/(flag_lambda/1000000000);
B(i,:
)=4*cos(phi/2).^2;
end
N=255;
Br=(B/4.0)*N;
image(xs,ys,Br);
title('干涉条纹')
colormap(gray(N));
2.2衍射原理及程序
衍射原理图
程序如下:
ymax=3*flag_lambda*flag_D/flag_a/1000000;
Ny=51;
ys=linspace(-ymax,ymax,Ny);
NP=51;
yP=linspace(0,flag_a/1000,NP);
fori=1:
Ny
SinPhi=ys(i)/(flag_D);
alpha=2*pi*yP*SinPhi/(flag_lambda/1000000000);
SumCos=sum(cos(alpha));
SumSin=sum(sin(alpha));
B(i,:
)=(SumCos^2+SumSin^2)/NP^2;
end
N=255;
Br=B/max(B)*N;
image(ymax,ys,Br);
title('衍射条纹');
colormap(gray(N));
三、设计阶段
3.1进入模块设计
进入实验界面模块是用来与使用软件者交互的界面。
其中包含一些诸如软件功能、实验设计者等基本信息。
点击“开始实验”进入实验。
3.1.1主要知识点
1)音频的读取:
y=wavread('yinyue.wav');%读入声音文件
sound(y)%由声卡播放声音
2)图片的读取:
imshow('shanda.bmp')
3)与下一个模块的连接:
%---Executesonbuttonpressinpushbutton1.
functionpushbutton1_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton1(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
clearall
close
Shiyan
3.1.2遇到的问题及解决方法
图片的格式可为:
.bmp、.gif、.jpg、.png、.hdf、.pcx、.xwd、.ico、
.cur。
而音频的格式只能为:
.au和.wav。
在调用音频时要注意音频不宜过大,当时我调用了一个10M的音频,matlab运行不起来了。
所以,可以将喜爱的音频截取一小段。
如何关掉音乐:
在点击“开始实验”时,希望音乐也随之关掉,通过老师的讲解,我知道了在“close”语句之前,加上“clearall”就可将所有程序关掉。
如何与下一个GUI界面链接。
只需在“开始实验”之后加上下一个GUI界面的名字即可,这是从网上搜的。
在我们遇到不懂的问题,看书是一方面,问同学,上网查资料也是很好的选择。
我觉得只要在最快的时间内解决问题,并能学会这种方法就是最好的结果。
3.2实验界面设计
此界面由“实验类型选择”、“参数输入”、“实验原理图”、“绘图区”、“计算结果”、“操作按钮”六大板块组成。
界面简洁而清晰。
打底色选择的较浅的颜色,这样重点突出,且不会很乱。
提示文本加粗以及操作按钮明显、这样利于操作者操作。
1)实验类型选择:
此处用了一个下拉菜单(Pop-UpMenu)。
程序如下
globalleixing
leixing=get(handles.popupmenu1,'value');
switchleixing
case1%干涉实验
axes(handles.axes1)
imshow('ganshetu.png')
axisfill
axisoff
case2%衍射实验
axes(handles.axes1)
imshow('yanshetu.png')
axisfill
axisoff
otherwise
axes(handles.axes1)
imshow('ganshetu.png')
axisfill
axisoff
此处定义了一个全局变量“leixing”,一边后边好调用。
参数输入:
为了使GUI界面更有组织和层次,在控件多时方便布局调整,用来将相关的控件组织在一个区域里,设置了一个面板Panel(后面的“实验原理图”、“绘图区”、“计算结果”、“操作按钮”均设有此面板)。
此处,对波长lambda进行了范围定义。
因为从实际角度来讲,如果波长超出了可见光范围,我们是不会观察到干涉条纹和衍射条纹的,所以有必要对其范围进行定义(后面“提示模块设计”会有详细说明)。
而“缝间距或缝宽”、“光源与屏间距”值取的不恰当,顶多图形绘制不是很清晰,故无需对其范围进行限制,只是推荐了几个范围。
实验原理图:
此处与“请输入实验类型”处相配合,利用“实验类型选择”处的函数,实现对实验原理图的调用。
这些原理图可以用CAD绘制。
为了突出效果,使线条清晰,推荐使用黑色底版,这样线条会更亮。
如果用白色底版,当图形较小时会看不清,影响效果。
2)绘图区:
同样与其它模块相配合,程序如下:
globalleixing
leixing=get(handles.popupmenu1,'value');
switchleixing
case1
axes(handles.axes2)
ym=5*flag_lambda*flag_D/flag_a/1000000;
xs=ym;
n=101;
ys=linspace(-ym,ym,n);
fori=1:
n
r1=sqrt((ys(i)-(flag_a/1000)/2).^2+(flag_D)^2);
r2=sqrt((ys(i)+(flag_a/1000)/2).^2+(flag_D)^2);
phi=2*pi*(r2-r1)/(flag_lambda/1000000000);
B(i,:
)=4*cos(phi/2).^2;
end
N=255;
Br=(B/4.0)*N;
image(xs,ys,Br);
title('干涉条纹')
colormap(gray(N));
otherwise
axes(handles.axes2)
ymax=3*flag_lambda*flag_D/flag_a/1000000;
Ny=51;
ys=linspace(-ymax,ymax,Ny);
NP=51;
yP=linspace(0,flag_a/1000,NP);
fori=1:
Ny
SinPhi=ys(i)/(flag_D);
alpha=2*pi*yP*SinPhi/(flag_lambda/1000000000);
SumCos=sum(cos(alpha));
SumSin=sum(sin(alpha));
B(i,:
)=(SumCos^2+SumSin^2)/NP^2;
end
N=255;
Br=B/max(B)*N;
image(ymax,ys,Br);
title('衍射条纹');
colormap(gray(N));
end
先在绘图区拖进一个axis,调整其位置和大小。
当编写程序时,只需调用
axes(handles.axesXX)
axisfill
axisoff
就可以完成绘图区的选择、使绘图充满设计的axis,以及不显示axis的命令。
当然,我们可以在一开始的时候就可设置
set(handles.axesXX,'visible','off')
使坐标图不显示。
5)计算结果:
与绘图区的命令类似,在不同的情况下,不同的区域输出不同结果,程序如下:
globalleixing
leixing=get(handles.popupmenu1,'value');
switchleixing
case1
jianju=flag_lambda*flag_D/flag_a/1000000;
set(handles.edit6,'string',num2str(jianju));
otherwise
jiaokuan=flag_lambda/flag_a*1000;
set(handles.edit8,'string',num2str(jiaokuan));
end
3.3计算模块设计
计算模块工作过程大致为,先声明相应的全局变量,然后从实验类型中进行选择,调用参数,进行计算。
3.4绘图模块设计
与计算模块类似。
3.5绘图模块设计
此模块是很有必要的。
因为当我们做完一个实验后(比如干涉实验),其数据和图形会对后面的实验产生影响。
所以,在做下一次实验时,需要清除上次实验。
程序如下:
set(handles.edit4,'string','0');
set(handles.edit5,'string','0');
set(handles.edit6,'string','0');
set(handles.edit8,'string','0');
plot(handles.axes1,0.0);
plot(handles.axes2,0.0);
set(handles.axes1,'visible','off')
set(handles.axes2,'visible','off')
退出按钮:
其设计和fengmian界面中的“开始实验”按钮类似,只是没有链接其它界面而已。
3.6提示模块设计
出错信息:
ifflag_lambda>760||flag_lambda<390
message='输入数值超出范围,请重新输入';
icon='error';
msgbox(message,'出错',icon);
return
退出提示信息:
question='确定退出?
';
title='退出';
button=questdlg(question,title,'Yes','No','Yes');
ifstrcmp(button,'Yes')
clear
clc
close
end
当我们想将一个绘制的图形绘到相应的axis中时,一般我们只需执行下边命令即可:
plot(handles.axesXX,……)
但我所用的是二维绘图命令image程序总是报错,遇到此问题,就如我上面提到的先把图像范围定义了:
axes(handles.axesXX)。
当我们遇到总是觉得程序是对的,但怎么也运行不成功时,不妨关掉所有程序,重新打开。
因为有的时候程序运行不成功可能是系统不稳定的问题,也可能是程序打开的太多,相互之间干扰。
我当时调试程序时调到晚上两点多都没成功,结果第二天从新打开时竟意外地成功了。
流程图:
1)封面:
2)
3)
4)
5)
6)
7)
8)
9)
10)
11)
12)
13)
14)
15)
16)
17)
2)点击“开始实验”,进入实验界面
3)选择实验类型及输入参数:
4)单击“计算”按钮:
5)单击“绘图”按钮:
6)输入参数超出范围时(提示出错):
7)单击“清除”按钮:
8)单击“退出”按钮及提示信息:
五、感想
Matlab功能真的很强大,而且感觉学得越多,不懂的越多。
暑期还有五一假期,我们小组参加数学建模大赛就用到了matlab,当时只是对matlab解决数学问题有所了解,而学了这门课后,发现matlab在解决实际问题的能力是远远超乎我的想象的。
说它是工具,一点不假,而且掌握这一门工具对于我们未来搞研究或者工作都很有用处。
因为之前搞了一个小组项目,李老师说我们每人再做一个小作业就行了。
然后我回去就设计了一个简单的GUI界面。
但是,虽说感觉界面比较简单,但是调试起来也不是很轻松的。
记得当时最痛苦的是有天晚上,一直调试到晚上2点多,程序没错,就是不行,所以导致那天晚上也没睡好觉。
第二天一大早起来,又开始调试,可是还没调,竟意外地成功了,欣喜若狂。
这次作业做得有点简单,但快考试了,也没有精力再重新做一个更好的了。
但我觉得做大作业只是一方面,更重要的是我们遇到问题独立解决问题的能力,我觉得这一点我做到了。
而且,在以后的工作学习中,也少不了会用到它。
所以,总体来说——受益匪浅。
六、参考文献
【1】MATLAB教程及实训/曹弋主编。
——北京:
机械工业出版社,2008.4
【2】MATLAB应用实例精讲/陈超主编。
电子工业出版社,2011.2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 界面设计 报告 优秀