張建斌, 趙 靜, 許曉晴
(長(zhǎng)安大學(xué) 經(jīng)濟(jì)與管理學(xué)院, 西安 710064)
基于Matlab-GUI的數(shù)值積分界面設(shè)計(jì)
張建斌, 趙 靜, 許曉晴
(長(zhǎng)安大學(xué) 經(jīng)濟(jì)與管理學(xué)院, 西安 710064)
為了解決原函數(shù)完全未知、原函數(shù)已知但其形式復(fù)雜、原函數(shù)已知且存在解析解3種情況下的復(fù)雜積分計(jì)算問(wèn)題,提出了關(guān)于數(shù)值積分界面的設(shè)計(jì)。將Matlab中可開(kāi)發(fā)的GUI工具結(jié)合數(shù)值積分計(jì)算中的典型算法構(gòu)造開(kāi)放式的用戶界面,設(shè)計(jì)出數(shù)值積分求解器并實(shí)現(xiàn)數(shù)值積分可視化功能;同時(shí)通過(guò)采用自定義方式設(shè)置積分區(qū)間等分?jǐn)?shù)的思路,提高了梯形、辛普森、復(fù)合梯形、高斯-勒讓德數(shù)和自適應(yīng)5種積分方法的計(jì)算精度。最后,用所設(shè)計(jì)的數(shù)值積分GUI界面對(duì)3種類型復(fù)雜積分函數(shù)進(jìn)行驗(yàn)證和求解,結(jié)果表明,該設(shè)計(jì)能在同一界面同時(shí)實(shí)現(xiàn)用5種積分方法按用戶任意設(shè)定的精度進(jìn)行積分求解并能將計(jì)算結(jié)果可視化,因此該界面具有適應(yīng)性強(qiáng)、使用方便、界面友好、操作簡(jiǎn)潔的優(yōu)點(diǎn)。
數(shù)值積分; 圖形用戶界面; Matlab; 積分求解器; 可視化
Matlab是一個(gè)基于矩陣運(yùn)算,有強(qiáng)大的數(shù)據(jù)處理能力的工具箱。它既能進(jìn)行科學(xué)計(jì)算,又能開(kāi)發(fā)出所需的圖形界面。Matlab-GUI是指圖形用戶界面,用戶可以根據(jù)自己的需要,通過(guò)構(gòu)思和編輯GUI,創(chuàng)建方便快捷的窗口,執(zhí)行一些如計(jì)算、繪圖和仿真等可視化操作。在當(dāng)今科學(xué)研究和工程實(shí)踐過(guò)程中,模型建立結(jié)果通常涉及諸如e-x^2等復(fù)雜函數(shù)的積分問(wèn)題,其原函數(shù)不能用初等函數(shù)表達(dá),從而積分基本定理牛頓-萊布尼茨(Newton-Leibniz)公式[1]
則不能求解出其積分值。而數(shù)值積分理論提供了多種求解被積函數(shù)近似積分值的方法,因此,在實(shí)際生活中數(shù)值計(jì)算已經(jīng)發(fā)展成為一個(gè)重要的研究方法。
Matlab-GUI設(shè)計(jì)模塊受到了許多研究者的青睞,在各個(gè)領(lǐng)域中都有它的應(yīng)用。利用Matlab-GUI與其他學(xué)科的融合,大大方便了研究者的深入學(xué)習(xí)和 研究。魯曉東[2]利用Visual C++與Matlab-GUI混合編程,提高了軟件交互界面的友好性;張鳴[3]把Matlab-GUI融入到通信原理的課程中,豐富了實(shí)驗(yàn)教學(xué)手段;李彤等[4]把Matlab-GUI應(yīng)用到了材料力學(xué)中,對(duì)力學(xué)教學(xué)提供了方便的演示手段;鐘可君等[5]采用Matlab-CUI對(duì)光學(xué)實(shí)驗(yàn)進(jìn)行仿真,為光學(xué)理論分析提供了方便;謝麗蓉[6]更是采用Matlab-GUI開(kāi)發(fā)出了研究異步電機(jī)特性的虛擬平臺(tái)。蘭紅等在應(yīng)用Matlab-GUI進(jìn)行圖像處理、飛機(jī)下滑控制、車輛路徑及過(guò)程控制等問(wèn)題的建模與仿真方面進(jìn)行了相關(guān)研究[7-10]。在數(shù)學(xué)方面,有關(guān)GUI可視化功能在求解線性方程組和高等數(shù)學(xué)教學(xué)實(shí)驗(yàn)及圖形用戶界面系統(tǒng)開(kāi)發(fā)方面的應(yīng)用[11-14],而數(shù)值積分研究理論知識(shí)與Matlab-GUI設(shè)計(jì)相結(jié)合的討論則相對(duì)較少。其中2009年于育民[15]在Matlab-GUI數(shù)值積分中的應(yīng)用一文中寫過(guò)相關(guān)內(nèi)容,但是他沒(méi)有充分利用Matlab-GUI設(shè)計(jì)所涉及到的一些細(xì)節(jié)問(wèn)題,諸如:沒(méi)有個(gè)性化的數(shù)值積分界面設(shè)計(jì);沒(méi)有導(dǎo)入音樂(lè)功能,不能為用戶提供輕松快樂(lè)的操作環(huán)境;沒(méi)有設(shè)計(jì)菜單板塊,不能實(shí)現(xiàn)積分結(jié)果的輸出和積分界面退出功能;忽略了GUI中指針功能,沒(méi)能實(shí)現(xiàn)在有限積分界面中為用戶傳遞更多信息,操作更加便捷的功能;沒(méi)有將各種積分方法結(jié)果同時(shí)呈現(xiàn)于同一界面,使用戶無(wú)法比較不同方法積分結(jié)果的差異程度。本文將集成Matlab系統(tǒng)的ODE suite及自定義的常見(jiàn)數(shù)值積分方法,設(shè)計(jì)一個(gè)數(shù)值積分求解器。為用戶提供一個(gè)簡(jiǎn)單、便捷的可視化操作界面。
將Matlab-GUI應(yīng)用于設(shè)計(jì)積分界面,為沒(méi)有深入學(xué)習(xí)過(guò)數(shù)值積分理論知識(shí)和不了解Matlab-GUI相關(guān)知識(shí)的人提供了極大的方便,實(shí)現(xiàn)可視化果。主要功能如下:
(1) 個(gè)性化的數(shù)值積分界面,能夠吸引用戶的眼球。
(2) 該界面能夠同時(shí)求解被積函數(shù)在5種數(shù)值積分方法下任意精度的積分結(jié)果,并能同時(shí)比較不同積分方法求解結(jié)果的準(zhǔn)確程度。
(3) 該界面能夠繪制出被積函數(shù)在自變量取值范圍內(nèi)的函數(shù)圖,并在圖中標(biāo)注出積分區(qū)間部分。
(4) 該界面能繪出被積函數(shù)在積分區(qū)間上的函數(shù)圖,并進(jìn)行左矩形積分動(dòng)畫演示,讓用戶對(duì)數(shù)值積分的幾何意義有直觀、形象的理解。
(5) 該界面利用指針功能實(shí)現(xiàn)多個(gè)GUI界面相結(jié)合的方法,不但節(jié)省了積分界面空間,而且使界面設(shè)計(jì)更具有人性化和條理化。
(6) 該界面利用指針導(dǎo)入音樂(lè),并且可以實(shí)現(xiàn)隨時(shí)播放和停止的功能,為用戶操作提供了輕松愉快的環(huán)境。
GUI界面的制作包括前臺(tái)界面設(shè)計(jì)和后臺(tái)程序編寫兩部分,其制作過(guò)程需要進(jìn)行反復(fù)修改,才能實(shí)現(xiàn)相應(yīng)的功能。它的一般制作過(guò)程如圖1所示。
圖1 GUI制作流程圖
2.1 主界面設(shè)計(jì)
設(shè)計(jì)的主要目的是實(shí)現(xiàn)Matlab-GUI與數(shù)值積分的結(jié)合,得到相應(yīng)的積分界面。為了使設(shè)計(jì)的GUI更加人性化,讓用戶對(duì)該設(shè)計(jì)的目的有更清晰的了解。專門設(shè)計(jì)了個(gè)性化的主界面,其設(shè)計(jì)思路為:像其他開(kāi)發(fā)軟件擁有自己個(gè)性的主界面一樣,將設(shè)計(jì)標(biāo)題嵌入主界面,當(dāng)運(yùn)行該程序時(shí),伴隨著10 s的優(yōu)美音樂(lè)。另外設(shè)置了Start按鈕,單擊它時(shí)可跳過(guò)音樂(lè)直接進(jìn)入積分界面。實(shí)現(xiàn)上述功能的核心控件代碼如下:
II=imread(‘啟動(dòng)頁(yè)面.bmp’);
image(II)
colormap gray
set(ha,‘handlevisibility’,‘off’,‘visible’,‘off’);
global p %音樂(lè)播放
[y,fs,bits]=wavread(‘啟動(dòng)音樂(lè).wav’);
p=audioplayer(y,fs);
play(p)
設(shè)計(jì)的GUI主界面如圖2所示。
圖2 GUI主界面
2.2 界面菜單項(xiàng)設(shè)計(jì)
Matlab-GUI中菜單項(xiàng)設(shè)計(jì)包括下拉式菜單編輯和現(xiàn)場(chǎng)菜單編輯兩部分。本文在文件主菜單下設(shè)計(jì)了兩個(gè)子菜單項(xiàng),分別為積分和關(guān)閉。用戶可以通過(guò)積分界面菜單項(xiàng)實(shí)現(xiàn)相應(yīng)的功能。以積分菜單項(xiàng)的設(shè)計(jì)為例,其設(shè)計(jì)過(guò)程如下,首先在兩種菜單編輯下編輯文件主菜單,并正確調(diào)用其相應(yīng)函數(shù)。然后將子菜單項(xiàng)積分的Tag設(shè)置為“jifen”,用于求得函數(shù)的積分,設(shè)置其調(diào)用函數(shù)為:
Function jifen_Callback(hObject, eventdata, handles)
pushbutton3_Callback(hObject, eventdata, handles);
設(shè)計(jì)界面過(guò)程如圖3所示。
圖3 GUI菜單項(xiàng)設(shè)計(jì)圖
2.3 積分界面設(shè)計(jì)
積分界面的主要功能為實(shí)現(xiàn)求解一元函數(shù)分別在梯形法、Simposon、復(fù)合梯形、高斯-勒讓德和自適應(yīng)數(shù)值積分方法下的積分值,其中精度設(shè)計(jì)由等分?jǐn)?shù)n來(lái)確定。其中涉及到的求解過(guò)程均是根據(jù)理論編寫相應(yīng)代碼,而不是Matlab自帶的求解命令。設(shè)計(jì)左矩形動(dòng)畫演示程序,使用戶清楚理解積分的幾何意義。編輯繪圖區(qū)域,方便用戶得到被積函數(shù)在積分區(qū)間下的函數(shù)圖。同時(shí),利用GUI與GUI之間的調(diào)用功能,設(shè)計(jì)說(shuō)明和注意事項(xiàng)按鈕,為用戶提供了方便使用說(shuō)明及如何應(yīng)對(duì)使用過(guò)程中可能出現(xiàn)的問(wèn)題。最后設(shè)計(jì)背景音樂(lè)區(qū)域,該區(qū)域設(shè)計(jì)了音樂(lè)下拉菜單,用戶可以選擇喜歡的音樂(lè),并能夠?qū)崿F(xiàn)隨時(shí)播放和停止的功能。其GUI控件布局結(jié)構(gòu)如圖4所示。
圖4 GUI積分界面
積分方法選擇及其相應(yīng)積分結(jié)果控件實(shí)現(xiàn)的核心代碼實(shí)現(xiàn)過(guò)程為:首先通過(guò)輸入一元函數(shù)或二元函數(shù),并給出自變量的取值范圍記為a,b,將函數(shù)表達(dá)式及相應(yīng)參數(shù)值傳遞給積分方法選擇控件,該控件為下拉菜單,通過(guò)選擇積分方法,并調(diào)用與該方法對(duì)應(yīng)的程序,最后將運(yùn)行結(jié)果顯示在積分結(jié)果區(qū)域。
其中獲得函數(shù)及積分區(qū)間的代碼為:
a=str2num(get(handles.kj3,‘string’));
b1=a(1); b2=a(2); d=0.001;
x=b1:d:b2;
c=get(handles.kj1,‘string’);
f=inline(c,‘x’);
積分方法選擇中主要使用了switch語(yǔ)句,其中的核心代碼為:
switch var
case 1
m=trapr1(f,b1,b2,n);
?
case 4
m = Gauss_Legendre(f,b1,b2,10)
?
case 5
m=SmartSimpson(ff,b1,b2);
?
end
音樂(lè)功能區(qū)域?qū)崿F(xiàn)包括播放和停止兩個(gè)部分,其相應(yīng)的回調(diào)函數(shù)分別為:
音樂(lè)播放按鈕的回調(diào)函數(shù):
function pushbutton7_Callback(hObject, eventdata, handles)
global p
[y,fs,bits]=wavread(‘背景音樂(lè).wav’);
p=audioplayer(y,fs);
play(p);
音樂(lè)停止按鈕的回調(diào)函數(shù):
function pushbutton8_Callback(hObject, eventdata, handles)
global p
pause(p);
其中GUI與GUI的調(diào)用說(shuō)明部分設(shè)計(jì)如圖5所示。
圖5 GUI設(shè)計(jì)說(shuō)明書
Matlab-GUI積分界面主要解決數(shù)值積分理論中如下3種積分問(wèn)題:求解被積函數(shù)在積分區(qū)間內(nèi)解析解積分問(wèn)題;求解被積函數(shù)原函數(shù)未知時(shí)的積分問(wèn)題;求解即使被積函數(shù)原函數(shù)已知,但其形式非常復(fù)雜時(shí)的積分問(wèn)題。對(duì)于上述問(wèn)題,運(yùn)用積分界面分別進(jìn)行求解。
(1) 對(duì)于能夠求出原函數(shù)的被積函數(shù),并且其積分結(jié)果為的解析解的情況。運(yùn)行所設(shè)計(jì)的GUI界面,比較5種數(shù)值積分方法的積分結(jié)果。
令y=sin(x),x∈(0,2π),積分區(qū)間為[0,0.5π],n=100時(shí)的結(jié)果如圖6所示。
圖6 計(jì)算結(jié)果顯示圖
積分的幾何意義為曲邊梯形的面積,隨著所分成的子區(qū)間數(shù)目不斷增加,所求積分的面積和就越來(lái)越接近被積函數(shù)在積分區(qū)間上曲邊梯形的面積,其變化的動(dòng)畫演示過(guò)程如圖7所示。
(2) 求解被積函數(shù)原函數(shù)未知情況下的積分結(jié)果。令y=sin(x)/x,x∈(1,10),積分區(qū)間為[2,7],n=100時(shí)的數(shù)值積分GUI運(yùn)行結(jié)果和動(dòng)畫顯示如圖8所示。5種數(shù)值積分方法的積分結(jié)果如表1所示。
序號(hào)積分方法積分結(jié)果1Trapz-0.1507062Simpson-0.1508163CombineTrapz-0.1495044GaussLegendre-0.1508165Smart-0.151072
(3) 求解被積函數(shù)原函數(shù)已知,但原函數(shù)結(jié)構(gòu)復(fù)雜因此難以求出積分結(jié)果的函數(shù)積分值。令y=1/(1+x6),x∈(-5,5),積分區(qū)間為[-2,1],n=7時(shí)的結(jié)果顯示。
其原函數(shù)為:
因此很難求出其積分結(jié)果,運(yùn)用數(shù)值積分GUI運(yùn)行結(jié)果和動(dòng)畫顯示如圖9所示。5種數(shù)值積分方法的積分結(jié)果如表2所示。
序號(hào)積分方法積分結(jié)果1Trapz1.919272Simpson1.945283CombineTrapz1.943474GaussLegendre1.946095Smart1.94502
(4) Matlab-GUI積分界面計(jì)算二重積分。當(dāng)所給函數(shù)是二元函數(shù),積分區(qū)間為體積時(shí),便涉及到二重積分計(jì)算問(wèn)題。這里采用矩形法計(jì)算二重積分。設(shè)f(x,y)=sin(x)+x·cos(y),x∈(0,3),y∈(0,3),積分區(qū)間為x∈(1,2),y∈(0,3),其運(yùn)行結(jié)果如圖10所示。
將Matlab—GUI應(yīng)用于設(shè)計(jì)積分界面,設(shè)計(jì)出了GUI積分界面,為未掌握數(shù)值積分理論知識(shí)和不了解Matlab-GUI相關(guān)知識(shí)的人提供了極大的方便,為他們提供可視化的積分結(jié)果。另外,該界面使得被積函數(shù)不管為哪種積分類型,都能計(jì)算出積分結(jié)果。
仍需完善的方面是由于系統(tǒng)對(duì)輸入法不兼容,可能導(dǎo)致用戶在使用過(guò)程中出現(xiàn)一些輸入法上的問(wèn)題。該設(shè)計(jì)可用于工程模型及高校建模過(guò)程中涉及到的積分求解問(wèn)題。
[1] 陳垚光.精通Matlab GUI設(shè)計(jì)(3版)[M].北京:電子工業(yè)出版社,2013.
[2] 魯曉東. Visual C++與Matlab的界面混合編程[J]. 實(shí)驗(yàn)室研究與探索, 2011, 30(7):76-78.
[3] 張 鳴. 基于Matlab GUI的通信原理演示系統(tǒng)設(shè)計(jì)[J]. 實(shí)驗(yàn)技術(shù)與管理, 2013(9):111-113.
[4] 李 彤, 項(xiàng)四通, 李吉宗. 基于Matlab的材料力學(xué)圖形用戶界面系統(tǒng)開(kāi)發(fā)[J]. 實(shí)驗(yàn)室研究與探索, 2010, 29(8):42-44.
[5] 鐘可君, 張海林..基于Matlab GUI設(shè)計(jì)的光學(xué)實(shí)驗(yàn)仿真[J]. 實(shí)驗(yàn)室研究與探索, 2010, 29(10):52-53.
[6] 謝麗蓉.基于Matlab GUI異步電動(dòng)機(jī)人機(jī)界面設(shè)計(jì)[J]. 實(shí)驗(yàn)技術(shù)與管理, 2014(8):50-53.
[7] 蘭 紅,田 進(jìn).基于Matlab GUI的圖像處理平臺(tái)設(shè)計(jì)[J]. 江西理工大學(xué)學(xué)報(bào),2014,35(3):79-84.
[8] 曲東才, 盧建華, 謝孔樹. 飛機(jī)下滑定高控制GUI設(shè)計(jì)與仿真實(shí)驗(yàn)[J]. 實(shí)驗(yàn)室研究與探索, 2015, 34(10):111-115.
[9] 楊 娟,郭海湘,楊文霞,等.基于 Matlab 的 GUI 設(shè)計(jì)車輛路徑問(wèn)題的仿真優(yōu)化平臺(tái)[J].系統(tǒng)仿真學(xué)報(bào),2012, 24(3):722-727.
[10] 王紅梅, 張厚升, 邢雪寧. 基于 Matlab GUI的過(guò)程控制仿真實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)[J]. 山東理工大學(xué)學(xué)報(bào)(自然科學(xué)版), 2015(6):58-60.
[11] 高紅兵.GUI可視化功能在求解線方程組中應(yīng)用研究[J]. 內(nèi)江科技,2014(11):53-54.
[12] 楊傳勝, 曹金亮. Matlab大學(xué)數(shù)學(xué)實(shí)驗(yàn)[M]. 北京:中國(guó)人民大學(xué)出版社, 2014.
[13] 沈 靜, 黃登斌. 基于Matlab的GUI在高等數(shù)學(xué)教學(xué)中的應(yīng)用[J]. 高等繼續(xù)教育學(xué)報(bào), 2012(3):45-46.
[14] 唐世星. 基于Matlab的高等數(shù)學(xué)實(shí)驗(yàn)圖形用戶界面系統(tǒng)開(kāi)發(fā)[J]. 實(shí)驗(yàn)室研究與探索, 2012, 31(9):202-203.
[15] 于育民,連冬艷.Matlab-GUI在數(shù)值積分中的應(yīng)用[J].南陽(yáng)理工學(xué)院學(xué)報(bào),2009(6):116-120.
[16] 石學(xué)軍. 基于Matlab GUI軟件制作方法的研究與實(shí)現(xiàn)[J]. 信息系統(tǒng)工程, 2015(2):46-46.
The Numerical Integration Design Based on Matlab-GUI
ZHANGJian-bin,ZHAOJing,XUXiao-qing
(School of Economics and Management, Chang’an University, Xi’an 710064, China)
This paper puts forward the problem about the design of numerical integral interface, to solve the complex integral calculation under three situations: first, the function is completely unknown; second, the function is known while its form is complex; third, the function is known and the analytical solutions exist. Combining the GUI tool which can be developed in Matlab with typical algorithm in the calculation of numerical integration, this paper constructs an open users' interface, and designs the numerical integral solver even realize visualization of the numerical integration. At the same time, the thinking of using a custom way to set integral interval equivalent fractions has improved the computational accuracy of five integral methods. Finally, the designed numerical integration GUI interface is used to verify three types of complex integral function. The results show that the design can solve the integration at any set accuracy by using the five methods in the same interface, and visualizes the computed results. Therefore, the designed interface has advantages of strong adaptability, convenience, friendliness and simple operation.
numerical integration; graphical users' interfaces; Matlab; integral solver; visualization
2016-03-14
張建斌(1967-),男,陜西合陽(yáng)人,博士,副教授,碩士生導(dǎo)師,主要研究方向:統(tǒng)計(jì)學(xué);
Tel.:13909208719; E-mail:zhangjb@d.edu.cn
TP 317
A
1006-7167(2017)01-0127-05