曾慶雨 田婭 劉向虎 徐梅
[摘要]MATLAB是一套高性能的數(shù)值計(jì)算和可視化軟件。GUI是人機(jī)交互的中介。在數(shù)學(xué)的學(xué)習(xí)過程中,部分問題是復(fù)雜抽象,難于理解的。如線性回歸、常微分方程求解、二元非齊次線性方程組的幾何意義等問題,在學(xué)習(xí)時(shí)是很難去琢磨的。本文試圖利用MATLAB 對(duì)常微分方程的求解問題進(jìn)行GUI仿真,使積分曲線的理論可視化,使理論寓于圖像中,讓數(shù)學(xué)問題變得更加直觀、易懂。期望對(duì)今后的教改有所幫助。
[關(guān)鍵詞]MATLAB GUI 可視化仿真 工科數(shù)學(xué)教學(xué) 常微分方程
[中圖分類號(hào)]G434 [文獻(xiàn)標(biāo)識(shí)碼]A [文章編號(hào)]1009-5349(2016)08-0196-02
運(yùn)用軟件仿真教學(xué)提高效率,是近年來的一個(gè)熱門話題,賀玉珍,李萍,王紅梅等結(jié)合現(xiàn)代化的教學(xué)方式及手段,提出了自己的看法。
MATLAB是美國Mathworks公司推出的一個(gè)高性能的科技計(jì)算軟件,它集數(shù)值計(jì)算、符號(hào)運(yùn)算、圖形圖像處理、編程等多種功能于一體,應(yīng)用非常廣泛。圖形用戶界面(Graphical User Interface,簡稱GUI,又稱圖形用戶接口),是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面,主要由組件、圖形窗口、回應(yīng)三部分構(gòu)成,可以進(jìn)行數(shù)據(jù)可視化編程。
使用MATLAB創(chuàng)建GUI仿真學(xué)習(xí)中所涉及的數(shù)學(xué)問題,可以充分提高數(shù)學(xué)學(xué)習(xí)的興趣難度,降低學(xué)習(xí)的難度。采用GUI進(jìn)行仿真教學(xué),為教學(xué)提供一個(gè)以實(shí)驗(yàn)探索和發(fā)現(xiàn)為特征的交互環(huán)境,充分激發(fā)學(xué)生對(duì)數(shù)學(xué)學(xué)習(xí)的興趣,調(diào)動(dòng)學(xué)生主動(dòng)學(xué)習(xí)積極性,也可以達(dá)到提高應(yīng)用計(jì)算機(jī)來解決數(shù)學(xué)問題的能力。
一、可視化原理
利用MATLAB GUI軟件將抽象的數(shù)學(xué)理論進(jìn)行可視化可分為以下四步:
①分析界面所要求實(shí)現(xiàn)的主要功能和明確設(shè)計(jì)任務(wù);
②在稿紙中繪出界面草圖;
③按繪制的草圖,制作靜態(tài)的界面,并對(duì)其進(jìn)行基本檢查;
④使用回調(diào)函數(shù),編寫界面上相應(yīng)控件功能的程序。
二、仿真演示
通過MATLAB的強(qiáng)大功能,采用GUI設(shè)計(jì)常微分方程解(積分曲線)的可視化仿真界面,直觀地體會(huì)積分曲線的概念,掌握常微分方程的求解結(jié)果是一個(gè)函數(shù),并能直觀地觀察這個(gè)函數(shù)的性質(zhì)。
(一)主要功能及設(shè)計(jì)任務(wù)
主要功能:計(jì)算一階常微分方程的通解和給定初值的特解,并繪制出特解的圖形,即對(duì)應(yīng)微分方程的一條積分曲線,以便理解積分曲線的概念,直觀地看出積分曲線是一個(gè)函數(shù)。
設(shè)計(jì)任務(wù):計(jì)算一階常微分方程的特解,仿真積分曲線。
(二)仿真界面草圖構(gòu)思
①建立4個(gè)靜態(tài)文本框,用于標(biāo)注相應(yīng)控件的提示;
②建立4個(gè)動(dòng)態(tài)文本框,2個(gè)用于輸入常微分方程和所滿足的初值條件,2個(gè)用于顯示常
微分方程的通解與特解;
③建立3個(gè)按鈕分別用于常微分方程求解,清空界面和結(jié)束程序;
④建立1個(gè)坐標(biāo)軸對(duì)象,用于顯示積分曲線;
⑤建立8個(gè)面板,用來裝載控件分組;
⑥建立4個(gè)單選按鈕,2個(gè)用來對(duì)坐標(biāo)軸的網(wǎng)格線進(jìn)行設(shè)置,2個(gè)用對(duì)坐標(biāo)軸的邊框進(jìn)行設(shè)置。
(三)制作靜態(tài)界面
圖1 界面布局圖
如圖1所示,利用GUIDE創(chuàng)建GUI,在GUI對(duì)象設(shè)計(jì)區(qū)中按草圖構(gòu)思布置控件,使用幾何位置排列工具對(duì)控件的位置進(jìn)行調(diào)整。并設(shè)置相應(yīng)控件的相關(guān)屬性,使其容易記憶,方便編輯和維護(hù)。
①分別將4個(gè)靜態(tài)文本框的string設(shè)置為相應(yīng)的提示,其中text1,text2,text3,text4的string分別設(shè)置為:輸入常微分方程,輸入初始值條件,輸出方程的通解,輸出方程對(duì)應(yīng)初值的解;
②將四個(gè)動(dòng)態(tài)文本框的string設(shè)置為空,tag不變;
③將3個(gè)按鈕的string分別設(shè)置為:求解,清空,退出;
④將8個(gè)面板的title分別設(shè)置為:初始值解的圖像,輸入?yún)^(qū),函數(shù)顯示區(qū),坐標(biāo)設(shè)置,網(wǎng)格線設(shè)置,邊框設(shè)置,初始值解的顯示區(qū),操作區(qū);
⑤將網(wǎng)格線設(shè)置面板里的2個(gè)單選按鈕的string分別設(shè)置為:grid on,grid off。將邊框設(shè)置面板里的2個(gè)單選按鈕的string分別設(shè)置為:box on,box off。保存文件名為gui_equation。
(四)仿真程序編寫
編寫代碼完成程序中變量的賦值,輸入/輸出及繪圖等工作,打開gui_equation文件,系統(tǒng)自動(dòng)生成M文件。
①編寫求解按鈕的回調(diào)函數(shù)(CallBack)如下:
f1=get(handles.edit1,'string');f2=get(handles.edit3,'string');
h1=dsolve(f1,f2);ezplot(h1)
h3=char(h1);set(handles.edit2,'string',h3);
h=dsolve(f1);h2=char(h);
set(handles.edit4,'string',h2);
②編寫清空按鈕的回調(diào)函數(shù)(CallBack)如下:
set(handles.edit1,'string',[]);set(handles.edit2,'string',[]);
set(handles.edit3,'string',[]);set(handles.edit4,'string',[]);
Cla; grid off
③編寫退出按鈕的回調(diào)函數(shù)(CallBack)如下:
ss=questdlg(‘你真的要退出嗎?'‘退出信息窗口!'‘不,我還想看看!'‘是的,我要退出!'‘是的,我要退出!');
switch ss
case‘是的,我要退出!'
delete(handles.figure1);
End
④編寫string設(shè)置為grid on單選按鈕的回調(diào)函數(shù)(CallBack)如下:
c=get(handles.radiobutton3,'value');
if c==1
axes(handles.axes1);grid on
set(handles.radiobutton4,'value',0);
end
⑤編寫string設(shè)置為grid off單選按鈕的回調(diào)函數(shù)(CallBack)如下:
c=get(handles.radiobutton4,'value');
if c==1
axes(handles.axes1);grid off
set(handles.radiobutton3,'value',0);
end
另外兩個(gè)單選按鈕按相同方法編寫。
(五)仿真結(jié)果
圖2 仿真圖
圖3 退出界面圖
運(yùn)行程序后在輸入常微分方程的文本框中以Dy=f(t)的形式輸入微分方程,以為例;在輸入初始值條件后面的文本框中以y(a)=b的形式輸入初值,以y(4)=7為例;如圖2,點(diǎn)擊求解按鈕運(yùn)行仿真界面,求解微分方程在對(duì)應(yīng)初值條件下的解,并繪制解的圖形;點(diǎn)擊清空按鈕清空界面,等待下次求解方程的輸入;點(diǎn)擊退出按鈕產(chǎn)生退出對(duì)話框,選擇相應(yīng)信息退出(如圖3)。
三、總結(jié)
本文通過對(duì)常微分方程的仿真,使學(xué)生充分理解積分曲線的含義,感受常微分方程解的性質(zhì)。使抽象的、難以想象的問題轉(zhuǎn)化為可視化的界面,引發(fā)學(xué)習(xí)數(shù)學(xué)的興趣,調(diào)動(dòng)自主學(xué)習(xí)的積極性。不僅如此,也讓學(xué)生了解到很多抽象數(shù)學(xué)問題都可以通過GUI編程來實(shí)現(xiàn),有極大的作用。它可以使很多難以想象的數(shù)學(xué)問題變得具體、形象、直觀。如函數(shù)圖形的繪制、空間解析幾何應(yīng)用、微分與導(dǎo)數(shù)、集何的運(yùn)算與Venn圖的展示等,都可運(yùn)用MATLAB GUI進(jìn)行仿真,讓學(xué)生更深刻地理解數(shù)學(xué)中的抽象概念。
【參考文獻(xiàn)】
[1]賀玉珍.計(jì)算機(jī)軟件類課程體系改革初探[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2008,(03):56-57.
[2]李萍.計(jì)算機(jī)軟件專業(yè)主干課程群探索[J].無錫職業(yè)技術(shù)學(xué)院學(xué)報(bào),2005,(04):4-5+8.
[3]王紅梅,于德海,孫衛(wèi)佳.計(jì)算機(jī)軟件專業(yè)課程體系改革的幾點(diǎn)思考[J].長春工業(yè)大學(xué)學(xué)報(bào)(高教研究版),2003、(04):63-65.
[4]陳垚光,毛濤濤,王正林等.精通MATLAB GUI設(shè)計(jì)(第3版)[M].北京:電子工業(yè)出版社,2013.
[5]同濟(jì)大學(xué)數(shù)學(xué)系編.高等數(shù)學(xué)(第六版)[M].北京:高等教育出版社,2007.
責(zé)任編輯:楊柳