呂良軍,郝振莉
MATLAB GUI在水力計(jì)算中的應(yīng)用
呂良軍,郝振莉
(黃河水利職業(yè)技術(shù)學(xué)院,河南 開(kāi)封 475004)
以MATLAB軟件為設(shè)計(jì)平臺(tái),進(jìn)行流態(tài)可視化操作界面的功能設(shè)計(jì)、控件選擇和邊界布局,通過(guò)梯形明渠求解正常水深的案例,闡述以GUI為人機(jī)交互界面,方便地解決各種復(fù)雜的水力計(jì)算問(wèn)題。
MATLAB GUI;可視化設(shè)計(jì);梯形明渠;水力計(jì)算;數(shù)值分析
水力計(jì)算內(nèi)容涵蓋了管道、明渠、堰閘、水壩、滲流等諸多工程領(lǐng)域的計(jì)算問(wèn)題,其中涉及許多筆算難以解決的問(wèn)題。如,求解明渠臨界水深與正常水深,若用Microsoft Excel進(jìn)行計(jì)算,簡(jiǎn)單快捷,但缺乏數(shù)據(jù)可視化[1]。MATLAB軟件是目前常用的工程軟件,它集數(shù)值計(jì)算、矩陣計(jì)算和圖形繪制等功能于一體,廣泛應(yīng)用于各種數(shù)學(xué)及工程計(jì)算中。將MATLAB數(shù)值計(jì)算方法與水力計(jì)算相結(jié)合,可以大大縮短計(jì)算時(shí)間,提高計(jì)算精度和工作效率。MATLAB圖形用戶(hù)界面(Graphical User Interface,簡(jiǎn)稱(chēng)GUI)平臺(tái)實(shí)現(xiàn)了人機(jī)交互,不但使計(jì)算更加簡(jiǎn)捷明了,而且其執(zhí)行動(dòng)作和變化能滿(mǎn)足用戶(hù)的需求[2]。文獻(xiàn)[3]給出用MATLAB數(shù)值計(jì)算求解明渠臨界水深的方法,但它只能在命令窗口中運(yùn)行,不方便工程人員使用。
圖形用戶(hù)界面是由窗口、光標(biāo)、按鍵、菜單、文字說(shuō)明等對(duì)象構(gòu)成的一個(gè)用戶(hù)界面。用戶(hù)通過(guò)一定的方法(如鼠標(biāo)或鍵盤(pán))選擇、激活這些圖形對(duì)象,使計(jì)算機(jī)產(chǎn)生某種動(dòng)作或變化,比如實(shí)現(xiàn)計(jì)算、繪圖等。MATLAB GUI開(kāi)發(fā)環(huán)境提供了一套可視化的創(chuàng)建圖形窗口的工具,方便用戶(hù)在此環(huán)境下開(kāi)發(fā)界面并快捷地創(chuàng)建GUI應(yīng)用程序,它可以根據(jù)用戶(hù)設(shè)計(jì)的GUI布局,自動(dòng)生成M文件的框架,供用戶(hù)編制應(yīng)用程序。筆者探討了MATLAB GUI在水力計(jì)算中的應(yīng)用。
1.1 GUI設(shè)計(jì)的原則
在設(shè)計(jì)GUI時(shí),應(yīng)遵守簡(jiǎn)單性、一致性及習(xí)常性的原則。設(shè)計(jì)界面時(shí),應(yīng)力求簡(jiǎn)潔、直接、清晰地體現(xiàn)出界面的功能和特征,并盡量使風(fēng)格一致。此外,還應(yīng)使用人們所熟悉的標(biāo)志與符號(hào)。
1.2 GUI設(shè)計(jì)的步驟
(1)明確設(shè)計(jì)任務(wù),構(gòu)思草圖。在命令窗口直接輸入命令GUIDE。在創(chuàng)建新的GUI時(shí),MATLAB提供空白模板、帶有控制按鈕模板、帶有坐標(biāo)軸和菜單模板、問(wèn)答式對(duì)話(huà)框模板4種模板。
(2)設(shè)計(jì)界面,添加控件和設(shè)置屬性??丶臉?biāo)識(shí)(Tag)是對(duì)于各控件的識(shí)別。每個(gè)控件創(chuàng)建時(shí),都會(huì)由開(kāi)發(fā)環(huán)境自動(dòng)產(chǎn)生一個(gè)標(biāo)識(shí)。在程序設(shè)計(jì)中,為了編輯、記憶和維護(hù)的方便,一般為控件設(shè)置一個(gè)新的標(biāo)識(shí)。
(3)編寫(xiě)代碼,實(shí)現(xiàn)控件的交互作用。GUI圖形界面的功能要通過(guò)一定的設(shè)計(jì)思路和計(jì)算方法,由特定的程序來(lái)實(shí)現(xiàn)。為了實(shí)現(xiàn)程序的功能,還需要在運(yùn)行程序前編寫(xiě)一些代碼,完成程序中變量的賦值、輸入、輸出、計(jì)算及繪圖等工作。
2.1 已知條件[5]
如圖1所示,一梯形斷面渠道,已知流量Q=450 m3/s,邊坡系數(shù)m=1,渠道糙率n=0.025,渠道的底寬b=45m,底坡i=0.32/1 000,求正常水深h0。
圖1 梯形明渠斷面圖Fig.1 Trapezoidal open channel cross-section
式中:i為明渠底坡;n為明渠糙率;A為過(guò)水?dāng)嗝婷娣e;R為水力半徑;R=A/χ,χ為濕周。
明渠均勻流流量Q的計(jì)算公式為。所以,公式(1)可變?yōu)?/p>
此時(shí),解得f(h)的水深便為正常水深h0。
2.2 用GUI實(shí)現(xiàn)計(jì)算
2.2.1 創(chuàng)建M函數(shù)文件
將式(2)和式(4)編寫(xiě)成如下M函數(shù)文件,并保存在matlab的work文件夾中,備用。
2.2.2 布置控件
構(gòu)思草圖,形成框架,在布局編輯器中布置控件。使用幾何位置排列工具對(duì)控件的位置進(jìn)行調(diào)整。建立3個(gè)坐標(biāo)軸對(duì)象,分別用于顯示梯形水渠、公式、水量與水深函數(shù)圖像。建立3個(gè)按鈕,用來(lái)繪圖、
式(2)可變形為
當(dāng)其他條件已知,只有水深未知時(shí),式(3)左端只是水深的函數(shù)。于是,可令求解和結(jié)束程序。建立8個(gè)靜態(tài)文本標(biāo)簽,顯示相應(yīng)控件的提示和計(jì)算結(jié)果。5個(gè)可編輯文本框,用來(lái)輸入?yún)?shù)值。界面設(shè)計(jì)布局如圖2所示。
圖2 計(jì)算界面設(shè)計(jì)布局圖Fig.2 Calculation interface design layout
2.2.3 設(shè)置控件的相關(guān)屬性
控件的標(biāo)識(shí)Tag是對(duì)各控件的識(shí)別。每個(gè)控件創(chuàng)建時(shí),都會(huì)由開(kāi)發(fā)環(huán)境自動(dòng)產(chǎn)生一個(gè)標(biāo)識(shí)。在程序設(shè)計(jì)中,為了編輯、記憶和維護(hù)的方便,一般為控件設(shè)置新的標(biāo)識(shí)。
本文設(shè)置 3個(gè)按鈕的 Tag標(biāo)識(shí)分別為:solve_puhbtton、huitu_puhbtton、close_puhbtton;設(shè)置5個(gè)可編輯文本框的Tag標(biāo)識(shí)分別為:b_edit、m_edit、n_edit、i_edit、Q_edit。用來(lái)顯示計(jì)算水深結(jié)果的靜態(tài)文本標(biāo)簽Tag標(biāo)識(shí)為:h0_text。另外,建立一級(jí)菜單file,在其下設(shè)置solve、huitu和close 3個(gè)子菜單項(xiàng)。
2.2.4 編寫(xiě)代碼,實(shí)現(xiàn)控件的交互作用
編寫(xiě)代碼,完成程序中變量的賦值、輸入、輸出及繪圖等工作。在程序初始化的時(shí)候,顯示梯形水渠、公式、水量與水深函數(shù)圖像,輸入默認(rèn)數(shù)值,代碼如下:
plot([h2 h2],[0 Q2],'r-*');%%%驗(yàn)證計(jì)算結(jié)果
xlabel('正常水深');ylabel('水流量')
legend('Q=f(h)',4);hold off
按鈕close_pushbutton調(diào)用close函數(shù)關(guān)閉結(jié)束程序。
2.2.5 運(yùn)行調(diào)試程序
單擊“solve”和“繪圖”按鈕后,運(yùn)行結(jié)果如圖3所示。圖3中,求得水深h0=4.8863m。該結(jié)果在流量與水深函數(shù)圖中得到驗(yàn)證。
圖3 梯形斷面正常水深計(jì)算圖Fig.3 Normal water depth calculation of trapezoidal cross-section
在整個(gè)GUI界面中,有圖、公式、各參數(shù)值,實(shí)現(xiàn)了數(shù)據(jù)的可視化。每次只需在相應(yīng)的編輯文本框中輸入對(duì)應(yīng)數(shù)值,單擊solve和繪圖按鈕,就可實(shí)現(xiàn)求解。如在文獻(xiàn)[5]中,梯形渠道的底寬b=7m,邊坡系數(shù)m=1.5,底坡i=0.0003,渠道糙率n=0.025,渠道流量Q=9.68m3/s,計(jì)算正常水深h0。此時(shí),只需在相應(yīng)的編輯文本框中輸入對(duì)應(yīng)數(shù)值,單擊solve和繪圖按鈕,就可實(shí)現(xiàn)如圖4所示的結(jié)果 (求得水深h0=1.4441m)。
又如,在計(jì)算河道過(guò)水?dāng)嗝婷娣e計(jì)算中,只需在離左岸距離,水深,內(nèi)插點(diǎn)數(shù)編輯框中輸入實(shí)測(cè)數(shù)據(jù)和計(jì)算精度要求后,點(diǎn)擊計(jì)算按鈕,就能求得結(jié)果S=22.1044m2,并給出如圖5所示的示意圖。
本文以在MATLAB環(huán)境中如何實(shí)現(xiàn)數(shù)值計(jì)算方法為主線(xiàn),以水力經(jīng)典案例為驅(qū)動(dòng),解決水力計(jì)算問(wèn)題。通過(guò)一個(gè)具體案例研究GUI系統(tǒng)的可視化操作界面的結(jié)構(gòu)設(shè)計(jì)、功能設(shè)計(jì)以及控件的選擇和布局、控件功能的實(shí)現(xiàn)。
以MATLAB為自由工作平臺(tái),以GUI為人機(jī)交互界面,筆者堅(jiān)信,通過(guò)大家的共同努力,建立完整的數(shù)值計(jì)算方法知識(shí)系統(tǒng),必然可以更多地解決各種復(fù)雜的水力計(jì)算問(wèn)題。由于數(shù)值計(jì)算方法的通用性,最終可具備解決諸多領(lǐng)域工程計(jì)算的能力。
圖4 梯形斷面明渠正常水深計(jì)算圖Fig.4 Normal water depth calculation of trapezoidal open channel cross-section
[1]張宇華.M icrosoft Excel在水力計(jì)算中的應(yīng)用[J].黃河水利職業(yè)技術(shù)學(xué)院學(xué)報(bào),2009(10):16-18.
[2]呂良軍,楊盛用.Matlab在大學(xué)物理中應(yīng)用的幾個(gè)實(shí)例[J].中國(guó)科技信息,2008(19):250-251.
圖5 河道過(guò)水?dāng)嗝婷娣e計(jì)算Fig.5 River way discharge section area calculation
[3]霍倩.Matlab數(shù)值計(jì)算方法及其在水力計(jì)算中的應(yīng)用[M].北京:中國(guó)建筑工業(yè)出版社,2013:90-99.
[4]陳垚光.精通MATLAB GUI設(shè)計(jì)[M].北京:電子工業(yè)出版社,2011.100-105.
[5]羅全勝,王勤香.水力分析與計(jì)算[M].鄭州:黃河水利出版社,2011:111-113.
[責(zé)任編輯 楊明慶]
TV131.4
B
1008-486X(2015)03-0047-04
2015-05-19
河南省科技發(fā)展計(jì)劃基礎(chǔ)與前沿研究項(xiàng)目(項(xiàng)目編號(hào):132300410142河南科技廳);黃河水利職業(yè)技術(shù)學(xué)院科學(xué)技術(shù)項(xiàng)目水力學(xué)計(jì)算的MATLAB數(shù)學(xué)實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)研究(2015KXJS011)。
呂良軍(1969-),男,浙江寧波人,副教授,主要從事高?;A(chǔ)數(shù)學(xué)教學(xué)與研究工作。