Microcomputer Applications V ol.27,No.8,2011
技术交流微型电脑应用2011年第27卷第8期
53
文章编号:1007-757X(2011)08-0053-03基于MATLAB 的GUI 设计应用软件
龚妙昆
摘要:在MA TLAB 的GUI(Graphic User Interface)基础上,充分地利用了UITABLE(图形界面表格)的特性,结合了运筹学中的一些优化算法,设计了一款综合应用软件,它包括了线性规划、图论、存储论等优化内容。利用MATLAB 中提供的编译命令,可将其编译为能在Windows 环境下运行的“Window ”型应用软件。
关键词:MATLAB 图形用户界面
图形界面表格运筹学中图分类号:TP202文献标志码:A
0引言
MA TLAB 的名称取自于MA Trix LABoratory 两个单词
的各自前3个字母,是一种基于矩阵运算的数值计算环境和
编程语言。它将高性能的数值计算功能和可视化特点集成于
一体,提供了大量的内置函数,因此被广泛地应用于各个领
域的科学计算。由于MA TLAB 的开放性,使得MA TLAB
的功能不继得到完善和扩充。目前的MA TLAB 提供了众多
的工具箱函数,如信号处理、控制系统、最优化等。MA TLAB
还有强大便捷的绘图功能,留给用户的是友好的命令界面和
二维和三维绘图界面。GUI 是MATLAB 的另一个重要特。
利用GUI ,可以制作一些操作简单的专用工具,譬如,演示
某些技术、方法或一些小的应用软件。在参考文献[1]中,
就有许多关于高等数学、大学物理等方面的演示性例子。在
这些例子中,变量、参量的输入都是比较简单的、少量的,
因此功能也是单一的,尤其是还没有矩阵(或表格)型变量
的图形输入界面。在MA TLAB 中,矩阵(或表格)型数据
的输入输出,通常是利用读取EXCEL 或输出到EXCEL 文
件来实现的。文献[2]利用ActiveX 控件方法,只实现了矩阵
(或表格)型数据的图形输出界面,没有直接的图形录入界
面。
本文主要介绍两方面的内容:其一,介绍一个简易物流
仓储系统的整体框架和基本功能,如图1所示:图1一个小型物流企业的优化系统一个小型物流企业的优化系统;其二,着重介绍矩阵(或
10万左右能买什么样的车表格)变量的图形输入界面的设计、使用方法。该程序经过
编译,可在Windows 环境下独立使用。1用户图形界面简介图形用户界面的程序是在图形界面下创建与用户交互的控件元素,使用户可以通过操作这些交互控件实现特定的功能,并且可以返回显示在程
序界面相应的结果显示区域中。MATLAB 的GUI 编程可以用两种方式实现。一是直观的GUI 设计工具GUIDE ,二是利用M 文件代码构建界面,即M 文件界面设计。虽然这种方法使用起来略显麻烦,但过程准确,结果简练。事实上,不管采用哪种设计方法,都要经过内容分析、构思草图、控件布局和代码编写等过程。2系统的总体设计和子系统功能介绍本系统采用代码编写GUI 界面,系统的主界面如图1。分五个子系统,启动子系统的方式有两种,一种是菜单方式;另一种是图标按钮方式。其中:(1)子系统[供需优化]:处理在一定运价下,货物的供应地与需求地之间的优化运输问题。其界面如图2
所示:
图2供需优化窗口
它的主要窗口为运输价格表的输入。(2)子系统[路线优化]:处理运输过程中的最短路径问
——————————————作者简介:龚妙昆(1959-),男,华东师范大学数学系讲师,研究方向:控制理论研究与应用,上海,200241
Micr ocomputer Applica tions V ol.27,No.8,2011技术交流微型电脑应用2011年第27卷第8期5题,采用的算法是Floyd 算法。它的主窗口是各个节点之间
的距离输入表格。
(3)子系统[装车优化]:依据背包原理进行算法设计。
(4)子系统[配送优化]:针对运输路线中各节点上即有
卸货又有装货的情况,而设计的优化算法。
(5)子系统[库存优化]:考虑了两类存贮模型。其一为
一米等于几厘米不能缺货,但能及时补充货物的模型;其二为提前订货模型。
界面如图3
苹果13粉版多被男性购买所示:图3库存优化子系统3UIT ABLE 的基本属性和使用在上面所介绍的内容中,最主要的是建立矩阵(或表格)型变量的输入界面。这在以往的文献和书籍中暂未出现。因此,本文侧重介绍它。MA TLAB 中的用户界面表格函数为UITABLE ,调用后在图形窗口中,创建一个指定行数和指定列数的表格。例如
UITABLE(numrows,numcolumns);
再如,在建立用户界面表格的时候,可以指定列(或行)
的名称:
UITABLE(data,columnNames);
它的主要属性有
ColumnNames:Cell array of strings for column names.
Data:
Cell array of values to be displayed in the table GridColor:
string,RGB vector.NumColumns:
int specifying number of columns.NumRows:
int specifying number of rows.等。另外,也可以通过下列方式创建具体的表格t =uitable(3,4);
则在当前窗口中建立一个3行4列的表格,对象的实际大小
默认。再如
f =figure;
t =uitable(f,rand(5),{'A','B','C','D','E'});
则在窗口图形f 中,建立一个列名为:A ,B ,C ,D ,E 的5×5的表格。当表格超出指定范围时,会自动出现滚动条,通常将表格的大小(或者说是矩阵的维数)设计成与实际问题相适应的范围内。4主界面背景设计和标题栏图标设计利用在轴对象中插入图片的方式实现。代码如下:
hf=figure('Color',[0.8,0.8,0.8],...%%设定主界面
'Position',[150,200,800,600],...
,...);
%%%%%%设置背景图片%%%%%
ha=axes('Position',[0011]);
imshow(imread('tu1.png'));
%%%%设置特殊图标%%%%%
figFrame=get(hf,'JavaFrame');
newIcon=javax.swing.ImageIcon('jyb.jpg');
央行回应个人现金存取新规figFrame.setFigureIcon(newIcon);
其中的'yb.jpg'为图标图片文件,'tu1.png'为背景图片文件。
另外,第一个模块的编码为:
hpub1=uicontrol(hf,'Style','pushbutton',...
'Position',[5022015080],...
'String','供需优化',...
'Fontsize',22,...
'Fontname','隶书',...
'ForegroundColor','blue',...
'CallBack',{@m1});
当触发了该模块后,就执行回调函数m1(程序段略)。5子系统[路线优化]-图形界面设计在这个窗口中,主要是布置一个矩阵输入界面,用以表示各个节点之间的距离,如图4
所示:图4运输路径中,各节点名称、节点间距离输入界面(注:两地之间,若无通路,则以10000标识)
4
Microcomputer Applications V ol.27,No.8,2011技术交流微型电脑应用2011年第27卷第8期
55优化算法采用Floyd 算法。为了使优化后的输出结果有
好的可视性,增加了节点的名称。在编程方面,除了常规的
菜单设计外,还有数据的传递,事件响应的回调函数编写。
下面就其最主要的部分进行介绍。
5.1窗口图形的设计
hf_lxyh=figure('Color',[0.8,0.8,0.8],...
'Position',[200,150,800,600],...三年级英语教学计划
'Menu','none',...%%%关闭系统默认菜单
'NumberTitle','off',...%%关闭系统默认标题
'Name','自制标题');
figFrame=get(hf_lxyh,'JavaFrame');
newIcon=javax.swing.ImageIcon('jyb.jpg');%%自制窗
口左上角图标,替换原MA TLAB 的默认图标
5.2表格(或矩阵)输入界面的设计
在窗口图形hf_lxyh 中,仅说明第二个表格设计代码:
h_t2=uitable(hf_lxyh,...
'NumRows',15,...
'NumColumns',15,...
'Position',[50,50,700,260]);
这样就在指定的位子按照规定的大小建立了15行15
列的表格,如果超过大小范围,则自动出现滚动条,如图
4所示。
5.3表格对象句柄的保存
将该表格对象的句柄置入整个图形界面的数据区里的
程序为
hndllist={h_jds_m,h_t1,h_t2};%%句柄对象组
set(hf_lxyh,'UserData',hndllist);%%句柄对象组储存在
图形窗口的数据区里
5.4表格对象的句柄和表格数据的获取
获取数据的回调函数的主要程序段为
function yhcb(cbo,eventdata)
hdls=get(gcf,'UserData');%%获取表格句柄
…
t=get(hdls{3},'Data');%从表格中获取间距值
for i=1:node_num %%逐行逐列读取数据
for j=1:node_num
if isempty(t(i,j))
dist(i,j)=0;
elseif ischar(t(i,j))
dist(i,j)=str2num(char(t(i,j)));
else
dist(i,j)=t(i,j);辽中南工业基地
end
end
end 由此获得图形界面表格中的数据。5.5最短路径Floyd 算法和结果的可视化输出关于Floyd 算法,直接编程即可,这里不再赘述。另外,Floyd 算法的结果,包含了任意两点的最短路线。譬如,从第2节点出发到第5个节点,最优路径为:乙丙戊,长度为:60。结果如图5
所示:图5路线优化系统的输出界面6结束语本文的主要工作是介绍表格(或矩阵)型数据输入图形界面设计方法,弥补了以往这方面的不足。通过一个实例的设计和运用,表明这些设计方法是简单易行和稳定可靠的。以上图例表明:只要巧妙构思,合理运用GUI 等工具,用MATLAB 语言也能设计出“Window ”型的软件。由于矩阵运算在科学计算中的广泛性,可以知道:在MATLAB 图形界面设计中,本文所介绍的方法具有实在的参考价值。程序经过mcc 编译后,能在Windows 环境下运行,这就拓广了MATLAB 应用人员的范围。参考文献:[1]陈垚光.精通MA TLAB GUI 设计[M].电子工业出版社,2008.2.[2]李亚军.在MATLAB 图形用户界面设计中使用ActiveX[J].计算机与数字工程.第34卷(2006)第12期:135-137.[3]任毅,袁晓.Matlab 语言中两个相位解卷绕命令的分析与改进——使用Matlab 语言[J].微型电脑应用.2008年第24卷第2期:56-57.:[4]张宜华.精通MATLAB5[M].清华大学出版社.1999.6.(收稿日期:2010.12.20)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论