matlab课程设计含源代码.docx

上传人:b****5 文档编号:6246905 上传时间:2023-01-04 格式:DOCX 页数:26 大小:249.20KB
下载 相关 举报
matlab课程设计含源代码.docx_第1页
第1页 / 共26页
matlab课程设计含源代码.docx_第2页
第2页 / 共26页
matlab课程设计含源代码.docx_第3页
第3页 / 共26页
matlab课程设计含源代码.docx_第4页
第4页 / 共26页
matlab课程设计含源代码.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

matlab课程设计含源代码.docx

《matlab课程设计含源代码.docx》由会员分享,可在线阅读,更多相关《matlab课程设计含源代码.docx(26页珍藏版)》请在冰豆网上搜索。

matlab课程设计含源代码.docx

matlab课程设计含源代码

一、课程设计的意义

通常在开发一个实际的应用程序时都会尽量做到界面友好,最常用的方法就是使用图形界面,而Matlab是一门面向对象的语言。

提供图形用户界面的应用程序能够使用的学习和使用更为方便容易。

用户不需要知道应用程序究竟是怎样执行各种命令的,而只需要了解可见界面组件的使用方法;用户也不需要知道命令是怎样执行的,只要通过与界面交互就可以是指定的行为得以正确执行,这比用在DOS环境下运行的程序交互性友好。

在Matlab中,图形用户界面是一种包含多种对象的图形窗口。

用户必须对每一种对象进行界面布局和编程,从而使用户激活GUI每个对象时都能够执行相应的行为。

另外,用户必须保存和发布所创建的GUI,使得GUI能够真正地得到应用。

Matlab为用户开发图形界面提供了一个方便高效的集成开发环境:

Matlab图形用户界面开发环境GUIDE。

上述所有工作都能够使用GUIDE方便地实现,GUIDE主要是一个界面设计工具集,Matlab将所有GUIDE支持的用户控件都集成在这个环境中并提供界面外观、属性和行为响应方式的设置方法。

GUIDE将用户保存设计好的GUIDE界面保存在一个Fig资源文件中,同时还能够生成包含GUI初始化和组件界面布局控制的M文件。

这个M文件为实现回调函数提供了一个参考框架。

这次不到一周课程设计使我对Matlab有了更深刻的认识,尤其是编程方面,掌握了一些编程思维,这对我们以后再学习其它语言是有很大的益处的,掌握一种编程思维方式比多学几门语言都有用。

2、课程设计的要求

1.用GUI设计一个计算器要求至少完成加、减、乘、除功能;

扩充:

矩阵运算(加、减、点乘,点除,乘,除,乘方等)

2.设计一个绘图界面要求能选择绘制二维曲线,三维曲线,三维网格,三维曲面,柱状图,饼图等功能。

要求界面要整齐划一,富有美感。

 

需求分析和总体设计

1、任务描述

1.课程设计目标

用GUIDE编写一个简易计算器和一个能自动画图的程序。

2.功能描述

(1).计算器能实现的功能

Ø加、减、乘、除、乘方、开方;

Ø可以后退、清零;

Ø可以更换背景颜色、查看帮助等操作。

(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.画图

(1).运行Matlab主程序;

(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,'string','0');

s=0;%把s再次置为0,为了下次判断不出错

elseif(s==0)

h=get(hh,'string');

switch(h)%在判断h是否为0

case'0';

set(hh,'string','0');

otherwise

t=strcat(h,'0');%把0连接到原有的字符后面

set(hh,'string',t);

end

end

(3).小数点函数

判断原来文本框里有几个小数点,如果有的话,就保持不变,否则,加上小数点。

判断方法是用strfind函数,测试其返回的矩阵大小。

代码如下:

hh=handles.wenben;

a=get(hh,'string');

set(hh,'string','.');

b=get(hh,'string');

c=strcat(a,'.');

[p,q]=size(m);%测试矩阵m

ifq>=1

set(hh,'string',a);

else

set(hh,'string',c);

end

(4)运算符号(以加号为例)函数

申请全局变量p,s,v1,p用于响应等号时判断,s用于判断按加好时文本框里是不是有加减乘除,如果没有就把文本框里的字符串转换成数字,并赋给全局变量v1。

代码如下:

hh=handles.wenben;

p='+';

globals;

if(s==0)

globalv1;%按加号之前的数值

v1=str2num(get(hh,'string'));

s=1;

end

(5).根号和幂(以根号为例)函数

申请全局变量s,如果s=0,即文本框里没有加减乘除符号,就把文本框里的字符串转换成数字并开方。

代码如下:

hh=handles.wenben;

globals;

if(s==0)

r=sqrt(str2num(get(hh,'String')));

set(hh,'String',num2str(r));

end

(6).等号函数

这是整个程序中最重要的一个函数,申请全局变量p,判断p的值,并作出相应的处理。

代码如下:

hh=handles.wenben;

globalv1;

globalv2;

globalv3;

globalv4;

globalv5;

globalv6;

v5=str2num(get(hh,'string'));

globalp;

switch(p)

case'+';

r=v1+v5

set(hh,'string',num2str(r));

v1=0;

p='';

case'-';

r=v2-v5;

set(hh,'string',num2str(r));

v2=0;

p='';

case'*';

r=v3*v5;

set(hh,'string',num2str(r));

v3=0;

p='';

case'/';

r=v4/v5;

set(hh,'string',num2str(r));

v4=0;

p='';

case'^';

r=v6^v5;

set(hh,'string',num2str(r));

v5=0;

p='';

otherwise

b=(get(hh,'string'))

set(hh,'string',b)

end

(7)菜单函数(以颜色中的粉红色为例)

设置面板(tag为pane)的background属性。

代码如下:

set(handles.pane,'backgroundcolor',[0.9920.510.627]);

set(handles.biaoti,'backgroundcolor',[0.9920.510.627]);

2、画图程序

(1).画图按钮函数(以二维曲线函数为例)

代码如下:

x=[0:

0.1:

2*pi];

y=[0:

0.1:

2*pi];

y=sin(x);

plot(handles.zuobiao,x,y)

(2).菜单函数

文件中的关闭函数,代码如下:

functionguanbi_Callback(hObject,eventdata,handles)

close;

2、遇到问题及解决方案

1、在计算器方面,刚做完时漏洞比较多,最严重的是小数点可以连续输入,很不方便。

解决方法是:

用strfind函数查看文本框里有几个小数点,如果已经有一个了,再按小数点就保持不变。

另外一个漏洞是按过运算符号后一个数不等于一个数,比如:

输入1,按等号,会出来一个3,经过长时间分析得知,这是由于在按运算符号时,系统记录了文本框里的数但没有清空,才会出现这种问题。

解决方法是再申请一个不同于加减乘除的另一个符号,并将按过运算符后记录的数值置0,问题解决,很高兴。

2、在画图程序中基本上没什么难度,就是有的图形不能在规定的坐标系中出现。

解决方法,先获得坐标系的句柄,在画图,问题解决。

三程序运行结果

1、计算器程序

2、画图程序

(1).初始界面

(2).按二维曲线按钮后的界面

(3)按三维曲线按钮后的界面

(4)按三维曲面后的界面

(5).按三维网格按钮后的界面

(6).按柱形图按钮后的界面

(7).按饼图按钮后的界面

 

第4章感想认识

经过不到一周的matlab课程设计使我感觉到,学习一学期的知识还是有些不连贯,造成编程时,没有思路,有不会的只好去网上查询,有时候会因为某个帖子是我茅塞顿开,从而有了思路,完成了课程设计的任务。

MatlabGui是很有用的东西,比我们学的C语言界面好看,又有实用价值。

以后我还要学习matlab,为了迎接考试也是为了自己以后能够用到。

 

附录(源代码)

1、计算器

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});

end

ifnargout

[varargout{1:

nargout}]=gui_mainfcn(gui_State,varargin{:

});

else

gui_mainfcn(gui_State,varargin{:

});

end

%Endinitializationcode-DONOTEDIT

%---Executesjustbeforewodejisuanqiismadevisible.

functionwodejisuanqi_OpeningFcn(hObject,eventdata,handles,varargin)

globals;

h=get(handles.wenben,'string');

switch(h)

case{'+','-','*','\'}

s=1;

otherwise

s=0;

end

globalp;

p='\';

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,'BackgroundColor','white');

end

%---Executesonbuttonpressinpoint.

functionpoint_Callback(hObject,eventdata,handles)

hh=handles.wenben;

a=get(hh,'string');

set(hh,'string','.');

b=get(hh,'string');

c=strcat(a,b);

m=strfind(a,'.');

[p,q]=size(m);

ifq>=1

set(hh,'string',a);

else

set(hh,'string',c);

end

%---Executesonbuttonpressinzero.

functionzero_Callback(hObject,eventdata,handles)

globals;

hh=handles.wenben;

if(s==1)

set(hh,'string','0');

s=0;

elseif(s==0)

h=get(hh,'string');

switch(h)

case'0';

set(hh,'string','0');

otherwise

t=strcat(h,'0');

set(hh,'string',t);

end

end

%---Executesonbuttonpressinone.

functionone_Callback(hObject,eventdata,handles)

globals;

hh=handles.wenben;

if(s==1)

set(hh,'string','1');

s=0;

elseif(s==0)

h=get(hh,'string');

switch(h)

case'0';

set(hh,'string','1');

otherwise

t=strcat(h,'1');

set(hh,'string',t);

end

end

%---Executesonbuttonpressintwo.

functiontwo_Callback(hObject,eventdata,handles)

globals;

hh=handles.wenben;

if(s==1)

set(hh,'string','2');

s=0;

elseif(s==0)

h=get(hh,'string');

switch(h)

case'0';

set(hh,'string','2');

otherwise

t=strcat(h,'2');

set(hh,'string',t);

end

end

%---Executesonbuttonpressinthree.

functionthree_Callback(hObject,eventdata,handles)

globals;

hh=handles.wenben;

if(s==1)

set(hh,'string','3');

s=0;

elseif(s==0)

h=get(hh,'string');

switch(h)

case'0';

set(hh,'string','3');

otherwise

t=strcat(h,'3');

set(hh,'string',t);

end

end

%---Executesonbuttonpressinfour.

functionfour_Callback(hObject,eventdata,handles)

globals;

hh=handles.wenben;

if(s==1)

set(hh,'string','4');

s=0;

elseif(s==0)

h=get(hh,'string');

switch(h)

case'0';

set(hh,'string','4');

otherwise

t=strcat(h,'4');

set(hh,'string',t);

end

end

%---Executesonbuttonpressinfive.

functionfive_Callback(hObject,eventdata,handles)

globals;

hh=handles.wenben;

if(s==1)

set(hh,'string','5');

s=0;

elseif(s==0)

h=get(hh,'string');

switch(h)

case'0';

set(hh,'string','5');

otherwise

t=strcat(h,'5');

set(hh,'string',t);

end

end

%---Executesonbuttonpressinsix.

functionsix_Callback(hObject,eventdata,handles)

globals;

hh=handles.wenben;

if(s==1)

set(hh,'string','6');

s=0;

elseif(s==0)

h=get(hh,'string');

switch(h)

case'0';

set(hh,'string','6');

otherwise

t=strcat(h,'6');

set(hh,'string',t);

end

end

%---Executesonbuttonpressinseven.

functionseven_Callback(hObject,eventdata,handles)

globals;

hh=handles.wenben;

if(s==1)

set(hh,'string','7');

s=0;

elseif(s==0)

h=get(hh,'string');

switch(h)

case'0';

set(hh,'string','7');

otherwise

t=strcat(h,'7');

set(hh,'string',t);

end

end

%---Executesonbuttonpressineight.

functioneight_Callback(hObject,eventdata,handles)

globals;

hh=handles.wenben;

if(s==1)

set(hh,'string','8');

s=0;

elseif(s==0)

h=get(hh,'string');

switch(h)

case'0';

set(hh,'string','8');

otherwise

t=strcat(h,'8');

set(hh,'string',t);

end

end

%---Executesonbuttonpressinnine.

functionnine_Callback(hObject,eventdata,handles)

globals;

hh=handles.wenben;

if(s==1)

set(hh,'string','9');

s=0;

elseif(s==0)

h=get(hh,'string');

switch(h)

case'0';

set(hh,'string','9');

otherwise

t=strcat(h,'9');

set(hh,'string',t);

end

end

%--------------------------------------------------------------------

functionwenjian_Callback(hObject,eventdata,handles)

%--------------------------------------------------------------------

functionguanbi_Callback(hObject,eventdata,handles)

close;

%--------------------------------------------------------------------

functionqianlvse_Callback(hObject,eventdata,handles)

set(handles.pane,'backgroundcolor',[0.60.9020.608]);

set(handles.biaoti,'backgroundcolor',[0.60.9020.608]);

%--------------------------------------------------------------------

functionbeijingse_Callback(hObject,eventdata,handles)

%----------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1