Matlab例程精讲8GUI.docx

上传人:b****7 文档编号:9604986 上传时间:2023-02-05 格式:DOCX 页数:22 大小:1.49MB
下载 相关 举报
Matlab例程精讲8GUI.docx_第1页
第1页 / 共22页
Matlab例程精讲8GUI.docx_第2页
第2页 / 共22页
Matlab例程精讲8GUI.docx_第3页
第3页 / 共22页
Matlab例程精讲8GUI.docx_第4页
第4页 / 共22页
Matlab例程精讲8GUI.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

Matlab例程精讲8GUI.docx

《Matlab例程精讲8GUI.docx》由会员分享,可在线阅读,更多相关《Matlab例程精讲8GUI.docx(22页珍藏版)》请在冰豆网上搜索。

Matlab例程精讲8GUI.docx

Matlab例程精讲8GUI

第8章图形用户界面GUI

假如读者所从事的数据分析、解方程、计算结果可视工作比较单一,那么一般不会考虑图形用户界面(GraphicalUserInterfaces,GUI)的制作。

但是如果读者想向别人提供某种新的设计分析工具,想体现某种新的设计分析理念,想进行某种技术、方法的演示,那么图形用户界面也许是最好的选择之一。

MATLAB本身提供了很多的图形用户界面,如sisotool“单输入单输出控制系统设计工具”、fdatool“滤波器设计和分析工具”等。

这些工具的出现不仅提高了设计和分析效率,而且改变原先的设计模式,引出了新的设计思想,改变了和正在改变着人们的设计、分析理念。

正是出于这种观察,作者将图形用户界面内容列入本教程。

本章由四个精心设计的算例组成。

这四个算例,一方面尽可能多地向读者展现构成GUI的各种控件或组件,另方面借助算例中回调函数的编写较快地将读者引向GUI制作的纵深。

本书作者相信:

读者只要耐心地按照示例进行操作,便能在愉快感受GUI成功制作的同时,事半功倍地掌握GUI的制作技巧。

810.1图形用户界面入门示例

【例8.1-1】为演示归一化二阶系统

中阻尼比

对单位阶跃响应的影响,需要制作如图8.1-1所示的用户界面。

要求:

在界面右侧的编辑框中输入阻尼比

的具体“大于0的数值标量”,就能在坐标轴上画出相应曲线。

图8.1-1待制作的二阶系统单位阶跃响应演示界面

(1)GUIDE开发环境的引入

图8.1-2进入GUIDE开发环境的默认引导对话窗

图8.1-3默认的空白用户界面开发环境GUIDE

(2)根据要求选配界面组件

图8.1-4选配界面组件后的版面编辑器

(3)界面组件的参数设置

图8.1-5窗属性编辑器和设置的属性值

图8.1-6经属性设置后的设计版面

(5)初步设计界面的保存

图8.1-7仅在外形上与题给要求一致的GUI

图8.1-8版面编辑器自动生成的设计界面M文件

(6)回调程序的编写

图8.1-9GUIDE生成的“空白回调函数体”示图

图8.1-10填写工作指令后的回调子函数

(7)所建界面的使用

810.2控件创建及应用示例

【例8.2-1】为归一化二阶系统

单位阶跃响应制作如图8.2-1所示的用户界面。

要求:

(1)通过编辑框和滑键都能输入阻尼比。

(2)刚启动的界面初始形态如图8.2-1所示。

(3)在刚启动的初始界面上,响应曲线用红线绘制;而一旦界面被操作,则响应曲线将用蓝线绘制。

(4)在列表框中的三个选项可以任意组合。

图8.2-1用户界面的初始状态

(1)GUI版面编辑器的开启

(2)对未来界面窗属性设置

(3)为版面设计区引入坐标参照系

图8.2-2“格尺”对话框(默认状态)

图8.2-3一般坐标参照工具示意

图8.2-4设计本例用户界面的版面编辑器

(4)根据题目要求进行界面构建

图8.2-5执行文件尚未填写时的生成界面

(5)由版面编辑器自动产生的exm080201.m文件的结构

(6)编写初始化程序

functionexm080201_OpeningFcn(hObject,eventdata,handles,varargin)

%Thisfunctionhasnooutputargs,seeOutputFcn.

%hObjecthandletofigure

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

%varargincommandlineargumentstoexm080201(seeVARARGIN)

%U_Start---“%U_Stat”和“%U_End”之间的M码均由作者编写-----UStart

zeta=0.3;

set(handles.edit1,'String',num2str(zeta))

set(handles.slider1,'Value',zeta)

set(handles.gridon,'Value',0)

set(handles.gridoff,'Value',1)

set(handles.listbox1,'Value',1)

handles.t=0:

0.05:

15;

handles.Color='Red';

handles.zeta=zeta;

handles.flag=0;

handles=surfplot(handles);

handles.flag=1;

handles.Color='Blue';

%U_End-----------------------------------------------------------------------------------UEnd

handles.output=hObject;

guidata(hObject,handles);

 

(7)可编辑框的回调子函数

functionedit1_Callback(hObject,eventdata,handles)

%hObject

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handles

%U_Start-----------------------------------------------------U_Start

sz=get(hObject,'String');

zeta=str2double(sz);

set(handles.slider1,'Value',zeta)

handles.zeta=zeta;

handles=surfplot(handles);

guidata(hObject,handles);

%U_End-------------------------------------------------------U_End

(8)滑键回调子函数

functionslider1_Callback(hObject,eventdata,handles)

%U_Start-----------------------------------------------------U_Start

zeta=get(hObject,'Value');

set(handles.edit1,'String',num2str(zeta))

handles.zeta=zeta;

handles=surfplot(handles);

guidata(hObject,handles);

%U_End-------------------------------------------------------U_End

(9)无线电按键回调子函数

functiongridon_Callback(hObject,eventdata,handles)

%U_Start-----------------------------------------------------U_Start

set(handles.gridoff,'Value',0)

gridon

%U_End-------------------------------------------------------U_End

functiongridoff_Callback(hObject,eventdata,handles)

%U_Start------------------------------------------------------U_Start

set(handles.gridon,'Value',0)

gridoff

%U_End-------------------------------------------------------U_End

(10)列表框回调子函数

functionlistbox1_Callback(hObject,eventdata,handles)

%U_Start-----------------------------------------------------U_Start

listindex=get(hObject,'Value');

ifany(listindex==1)

set(handles.listbox1,'Value',1)

end

handles.flag=0;

handles=surfplot(handles);

handles.flag=1;

guidata(hObject,handles);

%U_End-------------------------------------------------------U_End

(11)绘图子函数

functionhandles=surfplot(handles)

%handles=surfplot(handles)

%handles

%

zeta=handles.zeta;

t=handles.t;

listindex=get(handles.listbox1,'Value');

Nt=length(t);

ifhandles.flag==0

cla

zmin=get(handles.slider1,'Min');

zmax=get(handles.slider1,'Max');

zt=zmin:

0.05:

zmax;

Nz=length(zt);

[ZT,T]=meshgrid(zt,t);

Y=zeros(Nt,Nz);

fork=1:

Nz

Y(:

k)=step(tf(1,[1,2*zt(k),1]),t);

end

surface(ZT,T,Y)

shadingflat

else

delete(handles.g1)

delete(handles.rline)

end

xz=ones(1,Nt)*zeta;

y1=ones(1,Nt)*1;

y=step(tf(1,[1,2*zeta,1]),t);

gz=[zeta,zeta,xz,zeta,zeta,xz];

gt=[t

(1),t

(1),t,t(end),t(end),fliplr(t)];

gy=[0,1,y1,1,0,0*y1];

handles.g1=line(gz,gt,gy,'Color','g','LineWidth',1);

handles.rline=line(xz,t,y,'Color',handles.Color,'LineWidth',2);

K=length(get(handles.listbox1,'Value'));

forjj=1:

K

switchlistindex(jj)

case1

case2

k95=min(find(y>0.95));k952=[(k95-1),k95];

t95=interp1(y(k952),t(k952),0.95);

line(zeta,t95,0.95,'marker','+','markeredgecolor','k','markersize',6);

case3

[ym,km]=max(y);

ifkm0

line(zeta,t(km),ym,'marker','.','markeredgecolor','k','markersize',5);

end

case4

ii=max(find(abs(y-1)>0.05));

ifii

line(zeta,t(ii+1),y(ii+1),'Color','r','Marker','o','MarkerSize',5)

end

end

end

xlabel('{\zeta}')

ylabel('t')

zlabel('y')

alpha(0.7)

view(75,44)

(12)用户界面的运行

图8.2-6显示列表框全部选项的界面示例

〖说明〗

810.3菜单及工具图标的设计示例

.3.1为界面配置标准菜单条和工具条

【例8.3-1】在例8.2-1产生的界面上,配置MATLAB标准图形窗菜单。

图8.3-1显示标准菜单和工具条的图形用户界面

(1)以例8.2-1的用户界面为基础制作新界面

(2)利用属性编辑器为界面配置标准菜单条和工具条

(3)界面操作示范

〖说明〗

.3.2菜单定制和标准图标选用

【例8.3-2】制作如图8.3-2所示的图形用户界面。

该用户界面上,不仅配置了一个定制菜单,用以控制界面上坐标框的是否封闭,而且还配置了一个“图形数据标识图标”

图8.3-2带定制菜单和选用标准工具图标的用户界面

(1)利用已有用户界面为基础制作新界面

(2)撤销原界面上的标准菜单和工具条

(3)定制菜单

图8.3-3菜单编辑器的外形和功能分区

(4)为定制菜单项编写回调子函数

functionboxon_Callback(hObject,eventdata,handles)

%U_Start-----------------------------------------U_Start

boxon

set(handles.boxon,'Enable','off')

set(handles.boxoff,'Enable','on')

%U_End-------------------------------------------U_End

functionboxoff_Callback(hObject,eventdata,handles)

%U_Start-----------------------------------------U_Start

boxoff

set(handles.boxoff,'Enable','off')

set(handles.boxon,'Enable','on')

%U_End-------------------------------------------U_End

(5)选用标准工具图标

图8.3-4工具条编辑器的外形和功能分区

(4)保存及生成题目所要求的用户界面

〖说明〗

习题8

1.以算例8.3-2的图形用户界面文件exm080302.m和exm080302.fig为基础,删除原界面上的两个无线电按键,以便获得如图p8-1的新图形用户界面。

图p8-1

2.以算例8.3-2的图形用户界面文件exm080302.m和exm080302.fig为基础,用双稳态按键ToggleButton替代无线电按键实现对坐标网格绘制的控制,产生如图p8-2的新图形用户界面。

图p8-2

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

当前位置:首页 > 高等教育 > 文学

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

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