用MATLAB的GUIDE進(jìn)行圖像界面的編程是非常簡(jiǎn)單的。在這里唐僧幾句,學(xué)習(xí)MATLAB最好的資料是MATLAB自帶的幫助文檔。這個(gè),王星焱跟我說(shuō)過(guò)好多次了,其實(shí)其他的好多軟件都是這樣的。不過(guò)我的自學(xué)能力差一些。在去年暑假在合肥電院實(shí)習(xí)的時(shí)候,手邊什么書(shū)都沒(méi)有,沒(méi)有辦法,只好硬著頭皮看MATLAB幫助文檔。雖然是e文的,但是還是能看懂的,在金山詞霸的幫助下。
所以,關(guān)于GUI的入門,就交給MATLAB的幫助文檔了。下面說(shuō)說(shuō)更進(jìn)一步的東西,面向的讀者,是已經(jīng)入門的。關(guān)于GUI,我認(rèn)為,如果變出一個(gè)能用的像樣的東西,一是菜單,二是控件。
菜單很簡(jiǎn)單,就是弄清除菜單之間的關(guān)系就可以了。我沒(méi)有做過(guò)菜單,但是相信用到的時(shí)候肯定會(huì)做。
控件的使用,主要是用好CreateFcn,Callback。用好這兩個(gè),一般的程序就能編了。CreateFcn中的語(yǔ)句就是在程序運(yùn)行時(shí),就立即執(zhí)行的script。如果是編很簡(jiǎn)單的,不需要復(fù)雜可控的交互的程序,這個(gè)就夠了。但是如果說(shuō)是希望界面可控,那么最好用callback。在相應(yīng)控件下,添加相應(yīng)的script就可以實(shí)現(xiàn)比較復(fù)雜的功能了。下面,舉幾個(gè)我整理的常用的控件的callback:
1可編輯文本框:
讀入數(shù)據(jù):
val=str2num(get(handles.edit1,'string'));
顯示數(shù)據(jù):
set(handles.edit1,'string',num2str(get(handles.slider1,'value')));
這條命令,把滑塊的值顯示出來(lái)。如果想顯示其他變量,把num2str(get(handles.slider1,'value'))改成該變量即可。
2滑條:
set(handles.slider1,'value',val)
這條命令把變量val的值顯示出來(lái)。
注意滑條需要設(shè)定min和max兩個(gè)屬性。
3button,這個(gè)最常用,在button的callback中直接寫(xiě)入程序即可。
昨天晚上,北大的辛誠(chéng)讓我?guī)退愕婪e分,用matlab進(jìn)行數(shù)值積分,其實(shí)也挺方便的。
第一句命令:syms a b x
第二句命令:int(x^a*exp(-x)*(cos(b*x)-sin(b*x))/b,x,0,inf)
然后就會(huì)得到結(jié)果。想用maple驗(yàn)證一下,結(jié)果maple沒(méi)有給出結(jié)果。郁悶。看來(lái)是自己maple學(xué)的不好。
剛才用maple算出來(lái)了,呵呵,用命令int(x^a*exp(-x)*(cos(b*x)-sin(b*x))/b,x=0..infinity);看來(lái)還是自己學(xué)藝不精啊!在數(shù)值方面,還是maple強(qiáng)那么一點(diǎn)點(diǎn),呵呵。
積分結(jié)果是:
2^a*b^(-a-2)*(Pi^(1/2)*GAMMA(1/2+1/2*a)*(1/b^2+1)^(-1/2*a-1/2)*cos(2*(1/2+1/2*a)*arctan(1/b))/GAMMA(-1/2*a)-2*Pi^(1/2)*(1/b^2+1)^(-1-1/2*a)*cos(a*arctan(1/b))*GAMMA(1+1/2*a)/(b*(1+a)*GAMMA(-1/2*a-1/2))-2*Pi^(1/2)*(1/b^2+1)^(-1-1/2*a)*sin(a*arctan(1/b))*GAMMA(1+1/2*a)/((1+a)*GAMMA(-1/2*a-1/2)))-2^a*b^(-a-2)*(Pi^(1/2)*GAMMA(1+1/2*a)*(1/b^2+1)^(-1/2*a-1/2)*cos(2*(1/2+1/2*a)*arctan(1/b))/GAMMA(-1/2*a+1/2)-2*Pi^(1/2)*(1/b^2+1)^(-1-1/2*a)*cos(a*arctan(1/b))*GAMMA(3/2+1/2*a)/(b*(1+a)*GAMMA(-1/2*a))-2*Pi^(1/2)*(1/b^2+1)^(-1-1/2*a)*sin(a*arctan(1/b))*GAMMA(3/2+1/2*a)/((1+a)*GAMMA(-1/2*a)))