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