吕良军,郝振莉
MATLAB GUI在水力计算中的应用
吕良军,郝振莉
(黄河水利职业技术学院,河南 开封 475004)
以MATLAB软件为设计平台,进行流态可视化操作界面的功能设计、控件选择和边界布局,通过梯形明渠求解正常水深的案例,阐述以GUI为人机交互界面,方便地解决各种复杂的水力计算问题。
MATLAB GUI;可视化设计;梯形明渠;水力计算;数值分析
水力计算内容涵盖了管道、明渠、堰闸、水坝、渗流等诸多工程领域的计算问题,其中涉及许多笔算难以解决的问题。如,求解明渠临界水深与正常水深,若用Microsoft Excel进行计算,简单快捷,但缺乏数据可视化[1]。MATLAB软件是目前常用的工程软件,它集数值计算、矩阵计算和图形绘制等功能于一体,广泛应用于各种数学及工程计算中。将MATLAB数值计算方法与水力计算相结合,可以大大缩短计算时间,提高计算精度和工作效率。MATLAB图形用户界面(Graphical User Interface,简称GUI)平台实现了人机交互,不但使计算更加简捷明了,而且其执行动作和变化能满足用户的需求[2]。文献[3]给出用MATLAB数值计算求解明渠临界水深的方法,但它只能在命令窗口中运行,不方便工程人员使用。
图形用户界面是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。MATLAB GUI开发环境提供了一套可视化的创建图形窗口的工具,方便用户在此环境下开发界面并快捷地创建GUI应用程序,它可以根据用户设计的GUI布局,自动生成M文件的框架,供用户编制应用程序。笔者探讨了MATLAB GUI在水力计算中的应用。
1.1 GUI设计的原则
在设计GUI时,应遵守简单性、一致性及习常性的原则。设计界面时,应力求简洁、直接、清晰地体现出界面的功能和特征,并尽量使风格一致。此外,还应使用人们所熟悉的标志与符号。
1.2 GUI设计的步骤
(1)明确设计任务,构思草图。在命令窗口直接输入命令GUIDE。在创建新的GUI时,MATLAB提供空白模板、带有控制按钮模板、带有坐标轴和菜单模板、问答式对话框模板4种模板。
(2)设计界面,添加控件和设置属性。控件的标识(Tag)是对于各控件的识别。每个控件创建时,都会由开发环境自动产生一个标识。在程序设计中,为了编辑、记忆和维护的方便,一般为控件设置一个新的标识。
(3)编写代码,实现控件的交互作用。GUI图形界面的功能要通过一定的设计思路和计算方法,由特定的程序来实现。为了实现程序的功能,还需要在运行程序前编写一些代码,完成程序中变量的赋值、输入、输出、计算及绘图等工作。
2.1 已知条件[5]
如图1所示,一梯形断面渠道,已知流量Q=450 m3/s,边坡系数m=1,渠道糙率n=0.025,渠道的底宽b=45m,底坡i=0.32/1 000,求正常水深h0。
图1 梯形明渠断面图Fig.1 Trapezoidal open channel cross-section
式中:i为明渠底坡;n为明渠糙率;A为过水断面面积;R为水力半径;R=A/χ,χ为湿周。
明渠均匀流流量Q的计算公式为。所以,公式(1)可变为
此时,解得f(h)的水深便为正常水深h0。
2.2 用GUI实现计算
2.2.1 创建M函数文件
将式(2)和式(4)编写成如下M函数文件,并保存在matlab的work文件夹中,备用。
2.2.2 布置控件
构思草图,形成框架,在布局编辑器中布置控件。使用几何位置排列工具对控件的位置进行调整。建立3个坐标轴对象,分别用于显示梯形水渠、公式、水量与水深函数图像。建立3个按钮,用来绘图、
式(2)可变形为
当其他条件已知,只有水深未知时,式(3)左端只是水深的函数。于是,可令求解和结束程序。建立8个静态文本标签,显示相应控件的提示和计算结果。5个可编辑文本框,用来输入参数值。界面设计布局如图2所示。
图2 计算界面设计布局图Fig.2 Calculation interface design layout
2.2.3 设置控件的相关属性
控件的标识Tag是对各控件的识别。每个控件创建时,都会由开发环境自动产生一个标识。在程序设计中,为了编辑、记忆和维护的方便,一般为控件设置新的标识。
本文设置 3个按钮的 Tag标识分别为:solve_puhbtton、huitu_puhbtton、close_puhbtton;设置5个可编辑文本框的Tag标识分别为:b_edit、m_edit、n_edit、i_edit、Q_edit。用来显示计算水深结果的静态文本标签Tag标识为:h0_text。另外,建立一级菜单file,在其下设置solve、huitu和close 3个子菜单项。
2.2.4 编写代码,实现控件的交互作用
编写代码,完成程序中变量的赋值、输入、输出及绘图等工作。在程序初始化的时候,显示梯形水渠、公式、水量与水深函数图像,输入默认数值,代码如下:
plot([h2 h2],[0 Q2],'r-*');%%%验证计算结果
xlabel('正常水深');ylabel('水流量')
legend('Q=f(h)',4);hold off
按钮close_pushbutton调用close函数关闭结束程序。
2.2.5 运行调试程序
单击“solve”和“绘图”按钮后,运行结果如图3所示。图3中,求得水深h0=4.8863m。该结果在流量与水深函数图中得到验证。
图3 梯形断面正常水深计算图Fig.3 Normal water depth calculation of trapezoidal cross-section
在整个GUI界面中,有图、公式、各参数值,实现了数据的可视化。每次只需在相应的编辑文本框中输入对应数值,单击solve和绘图按钮,就可实现求解。如在文献[5]中,梯形渠道的底宽b=7m,边坡系数m=1.5,底坡i=0.0003,渠道糙率n=0.025,渠道流量Q=9.68m3/s,计算正常水深h0。此时,只需在相应的编辑文本框中输入对应数值,单击solve和绘图按钮,就可实现如图4所示的结果 (求得水深h0=1.4441m)。
又如,在计算河道过水断面面积计算中,只需在离左岸距离,水深,内插点数编辑框中输入实测数据和计算精度要求后,点击计算按钮,就能求得结果S=22.1044m2,并给出如图5所示的示意图。
本文以在MATLAB环境中如何实现数值计算方法为主线,以水力经典案例为驱动,解决水力计算问题。通过一个具体案例研究GUI系统的可视化操作界面的结构设计、功能设计以及控件的选择和布局、控件功能的实现。
以MATLAB为自由工作平台,以GUI为人机交互界面,笔者坚信,通过大家的共同努力,建立完整的数值计算方法知识系统,必然可以更多地解决各种复杂的水力计算问题。由于数值计算方法的通用性,最终可具备解决诸多领域工程计算的能力。
图4 梯形断面明渠正常水深计算图Fig.4 Normal water depth calculation of trapezoidal open channel cross-section
[1]张宇华.M icrosoft Excel在水力计算中的应用[J].黄河水利职业技术学院学报,2009(10):16-18.
[2]吕良军,杨盛用.Matlab在大学物理中应用的几个实例[J].中国科技信息,2008(19):250-251.
图5 河道过水断面面积计算Fig.5 River way discharge section area calculation
[3]霍倩.Matlab数值计算方法及其在水力计算中的应用[M].北京:中国建筑工业出版社,2013:90-99.
[4]陈垚光.精通MATLAB GUI设计[M].北京:电子工业出版社,2011.100-105.
[5]罗全胜,王勤香.水力分析与计算[M].郑州:黄河水利出版社,2011:111-113.
[责任编辑 杨明庆]
TV131.4
B
1008-486X(2015)03-0047-04
2015-05-19
河南省科技发展计划基础与前沿研究项目(项目编号:132300410142河南科技厅);黄河水利职业技术学院科学技术项目水力学计算的MATLAB数学实验系统设计研究(2015KXJS011)。
吕良军(1969-),男,浙江宁波人,副教授,主要从事高校基础数学教学与研究工作。