matlab课程设计含源代码Word文档格式.docx
《matlab课程设计含源代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《matlab课程设计含源代码Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
加、减、乘、除、乘方、开方;
可以后退、清零;
可以更换背景颜色、查看帮助等操作。
(2).画图程序能实现的功能
可以画出二维曲线、三维曲线、三维网格、三维曲面、柱状图、饼图;
有简单菜单(就包括一项:
文件)。
2、任务设计
1.计算器
(1).运行Matlab主程序;
(2).新建Gui文件命名为“wodejisuanqi.fig”;
(3).在出现的界面创建需要的文本框(tag为wenben),按钮:
0、1、2、3、4、5、6、7、8、9、CE(清零)、backplace(后退)、'
+'
、'
-'
、'
*'
、
'
÷
√'
、'
∧'
.'
,菜单:
(文件,关闭);
背景色(浅紫色,浅绿色,粉红色,默认色);
帮助(关于)。
(4).编写M文件。
2.画图
(2).新建Gui文件并命名为“huatu.fig”;
(3).再出现的界面创建需要的坐标系(tag为zuobiaoxi),按钮:
二维曲线、三位曲线、三维网格、三维曲面、柱状图、饼状图;
(4).将它们的tag都设为它们的汉语拼音;
(5).编写M文件。
第3章编码
1、代码编写步骤
1、计算器
(1).主函数
在主函数fanctionwodejisuanqi-OpeningFcn中编写主函数代码。
先申请一个全局变量s,用于判断文本框里的字符串是不是有:
,如果有的话,就把s置为1,否则,置为0。
再获得文本框中字符串的句柄,并赋给变量h。
申请全局变量p,为了判断响应等号时文本框里的运算符号,其中令p='
\'
是没有实际意义的,只是为了判断运算符不是加减乘除中的任一个。
代码如下:
globals;
h=get(handles.wenben,'
string'
);
switch(h)
case{'
'
}
s=1;
otherwise
s=0;
end
globalp;
p='
;
(2).数字函数
在这个函数里主要是判断文本框里是不是有加减乘除符号,如果有的话,就把文本框中的字符串设置为数字,否则,再判断是不是0,是的话,就把文本框中的值置为数字,不是的话,就把数字连接到文本框中的字符串上。
代码如下(以0为例):
globals;
hh=handles.wenben;
%把文本框的句柄赋给hh
if(s==1)
set(hh,'
0'
%把s再次置为0,为了下次判断不出错
elseif(s==0)
h=get(hh,'
switch(h)%在判断h是否为0
case'
t=strcat(h,'
%把0连接到原有的字符后面
t);
end
(3).小数点函数
判断原来文本框里有几个小数点,如果有的话,就保持不变,否则,加上小数点。
判断方法是用strfind函数,测试其返回的矩阵大小。
hh=handles.wenben;
a=get(hh,'
b=get(hh,'
c=strcat(a,'
[p,q]=size(m);
%测试矩阵m
ifq>
=1
a);
else
c);
(4)运算符号(以加号为例)函数
申请全局变量p,s,v1,p用于响应等号时判断,s用于判断按加好时文本框里是不是有加减乘除,如果没有就把文本框里的字符串转换成数字,并赋给全局变量v1。
if(s==0)
globalv1;
%按加号之前的数值
v1=str2num(get(hh,'
));
(5).根号和幂(以根号为例)函数
申请全局变量s,如果s=0,即文本框里没有加减乘除符号,就把文本框里的字符串转换成数字并开方。
if(s==0)
r=sqrt(str2num(get(hh,'
String'
)));
set(hh,'
num2str(r));
(6).等号函数
这是整个程序中最重要的一个函数,申请全局变量p,判断p的值,并作出相应的处理。
globalv1;
globalv2;
globalv3;
globalv4;
globalv5;
globalv6;
v5=str2num(get(hh,'
switch(p)
case'
r=v1+v5
v1=0;
p='
'
r=v2-v5;
v2=0;
r=v3*v5;
v3=0;
/'
r=v4/v5;
v4=0;
^'
r=v6^v5;
v5=0;
otherwise
b=(get(hh,'
))
b)
(7)菜单函数(以颜色中的粉红色为例)
设置面板(tag为pane)的background属性。
set(handles.pane,'
backgroundcolor'
[0.9920.510.627]);
set(handles.biaoti,'
2、画图程序
(1).画图按钮函数(以二维曲线函数为例)
x=[0:
0.1:
2*pi];
y=[0:
y=sin(x);
plot(handles.zuobiao,x,y)
(2).菜单函数
文件中的关闭函数,代码如下:
functionguanbi_Callback(hObject,eventdata,handles)
close;
2、遇到问题及解决方案
1、在计算器方面,刚做完时漏洞比较多,最严重的是小数点可以连续输入,很不方便。
解决方法是:
用strfind函数查看文本框里有几个小数点,如果已经有一个了,再按小数点就保持不变。
另外一个漏洞是按过运算符号后一个数不等于一个数,比如:
输入1,按等号,会出来一个3,经过长时间分析得知,这是由于在按运算符号时,系统记录了文本框里的数但没有清空,才会出现这种问题。
解决方法是再申请一个不同于加减乘除的另一个符号,并将按过运算符后记录的数值置0,问题解决,很高兴。
2、在画图程序中基本上没什么难度,就是有的图形不能在规定的坐标系中出现。
解决方法,先获得坐标系的句柄,在画图,问题解决。
三程序运行结果
1、计算器程序
(1).初始界面
(2).按二维曲线按钮后的界面
(3)按三维曲线按钮后的界面
(4)按三维曲面后的界面
(5).按三维网格按钮后的界面
(6).按柱形图按钮后的界面
(7).按饼图按钮后的界面
第4章感想认识
经过不到一周的matlab课程设计使我感觉到,学习一学期的知识还是有些不连贯,造成编程时,没有思路,有不会的只好去网上查询,有时候会因为某个帖子是我茅塞顿开,从而有了思路,完成了课程设计的任务。
MatlabGui是很有用的东西,比我们学的C语言界面好看,又有实用价值。
以后我还要学习matlab,为了迎接考试也是为了自己以后能够用到。
附录(源代码)
functionvarargout=wodejisuanqi(varargin)
gui_Singleton=1;
gui_State=struct('
gui_Name'
mfilename,...
gui_Singleton'
gui_Singleton,...
gui_OpeningFcn'
@wodejisuanqi_OpeningFcn,...
gui_OutputFcn'
@wodejisuanqi_OutputFcn,...
gui_LayoutFcn'
[],...
gui_Callback'
[]);
ifnargin&
&
ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforewodejisuanqiismadevisible.
functionwodejisuanqi_OpeningFcn(hObject,eventdata,handles,varargin)
handles.output=hObject;
guidata(hObject,handles);
%
functionvarargout=wodejisuanqi_OutputFcn(hObject,eventdata,handles)
varargout{1}=handles.output;
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionwenben_Callback(hObject,eventdata,handles)
%---Executesduringobjectcreation,aftersettingallproperties.
functionwenben_CreateFcn(hObject,eventdata,handles)
ifispc&
isequal(get(hObject,'
BackgroundColor'
),get(0,'
defaultUicontrolBackgroundColor'
set(hObject,'
white'
%---Executesonbuttonpressinpoint.
functionpoint_Callback(hObject,eventdata,handles)
a=get(hh,'
b=get(hh,'
c=strcat(a,b);
m=strfind(a,'
[p,q]=size(m);
ifq>
%---Executesonbuttonpressinzero.
functionzero_Callback(hObject,eventdata,handles)
switch(h)
%---Executesonbuttonpressinone.
functionone_Callback(hObject,eventdata,handles)
1'
%---Executesonbuttonpressintwo.
functiontwo_Callback(hObject,eventdata,handles)
2'
%---Executesonbuttonpressinthree.
functionthree_Callback(hObject,eventdata,handles)
3'
%---Executesonbuttonpressinfour.
functionfour_Callback(hObject,eventdata,handles)
4'
%---Executesonbuttonpressinfive.
functionfive_Callback(hObject,eventdata,handles)
5'
%---Executesonbuttonpressinsix.
functionsix_Callback(hObject,eventdata,handles)
6'
%---Executesonbuttonpressinseven.
functionseven_Callback(hObject,eventdata,handles)
7'
%---Executesonbuttonpressineight.
functioneight_Callback(hObject,eventdata,handles)
8'
%---Executesonbuttonpressinnine.
functionnine_Callback(hObject,eventdata,handles)
9'
%--------------------------------------------------------------------
functionwenjian_Callback(hObject,eventdata,handles)
functionqianlvse_Callback(hObject,eventdata,handles)
[0.60.9020.608]);
functionbeijingse_Callback(hObject,eventdata,handles)
%----------------------------------------------