Sunday, May 07, 2006
[Software] MATLAB & GNU Octave
大學修這麼多課,怎麼都沒用到這個好物呢?常常聽到,但一直都沒有機會,沒有動力驅使我去學這套(看來我真的太懶了...XD)。現在課業上需求,要算一些計算比較複雜的數學式,原本還笨笨的用C++自己去寫,後來Coding之後,發現很多棘手的問題,很容易就Overflow,後來想一想不對呀,我現在的目地不是在學如何Coding,而是如何更快速的解決我的問題,提及這解數學式的問題,當然就非得MATLAB莫數了,既然有專業人士在處理這方面的問題,理所當然我也該學一下了。
但這套軟體有點太肥了點,很多東西可能你一輩子都不會用到,若要達一般需求的話,推薦「GNU Octave」,重點他是FREE的,大推!而且,整個安裝程式只有20Mb左右,相當的平易近人 ^_^,語法也跟MATLAB相容。
※ Using Experience Note:
.Problem:發現 GNU Octave 會自動處理掉一些不合理的語法,ex: nchoosek(-1,2) = 1 , nchoosek(2,-1) = 0 ... 之類的狀況;在MATLAB中的話,此類情形會出現Error Message,不給執行。有時在取很大的值,為得只是得到一些數據,程式自行處理掉這些瑣碎的小事,其實還不錯,不造成影響,也比較不用再花時間作些不影響整體結果的Error Control。
.Solution:
可以用funtion來解決,自己寫一個Matlab用的 .M file(ex : nchooser.M),把nchoosek這個函數包起來,自己作處理,之後把這個檔(nchooser.M)放在要"呼叫"到這個funtion的同一資料夾,就可以直接用了。「目前使用感想,同樣的Code在這兩套跑,發現都是Octave比較快,不知MATLAB在龜啥,要不是他比較好Debug,早就叫他去死了...」
- nchooser.M Source Code:
function result = nchooser(x,y)
if x < 0
result = 0;
else
if x < y
result = 1;
else
if y >= 0
result = nchoosek(x,y);
else
result = 0;
end
end
end
我跑了同一段Code,測試結果如下:(Executing Time in second)
- Matlab on Pentium 4 3.0 G: Total1 = 7.812000, Total2 = 110.719000, Total3 = 7.391000, Total4 = 107.625000
- Octave on Pentium 4 3.0 G: Total1 = 2.296999, Total2 = 36.093000, Total3 = 1.843999, Total4 = 33.234000
- Matlab on Barton 2500+ oc 3000+: Total1 = 4.953000, Total2 = 95.015000, Total3 = 5.079000, Total4 = 68.796000
- Octave on Barton 2500+ oc 3000+: Total1 = 1.618999, Total2 = 23.355000, Total3 = 1.273999, Total4 = 22.122000
.Solution:
%Method 1:
tic ();
many computations later...
elapsed_time = toc ();
%Method 2:
t = cputime;
% Your program
etime = cputime - t;
.Problem:Why 「CPU Usage」is at most 50% in Pentium4 CPU ?
.Solution:
在PTT Matlab版看到有人解釋如下:
有人先回說:「disable hyper-threading 不就好了」,但似乎不是這樣子的,有高手跳出來解釋說:「不過據我的了解... hyper-threading對於non(one)-thread的程式並不會有什麼影響,因為它的目的是充份利用每個運算單元,僅可能的填滿管線...而不是真的把CPU切成50% vs 50%。至於你說AthlonXP比較快... 這是有可能的... 事實上...現在的Matlab... 大部分都是在run Java...而且Matlab的script/fuction本身又是直譯式語言...AthlonXP會有比較好的效能是可以想像的...話說6.5之後應該已經改善6.0在P4上效能非常差的問題了, 但好像還是沒有Athlon好...另外, Dothan(Pentium M)的效能也非常好喔...」
結論:看來我的「巴頓將軍(Barton 2500+ oc 3200+)」,還有利用的餘地,果然是作Research用的好CPU呀...哇哈哈。還有,建議Lab該買些AMD K8的CPU了,不能總是買Intel Series的鳥貨。
.Problem:How to estimate executing time?
.Solution:
%Method 1:
tic ();
many computations later...
elapsed_time = toc ();
%Method 2:
t = cputime;
% Your program
etime = cputime - t;
%Method 3: (an explicit report..very cool, but only work in MATLAB)
profile on;
% Your program
profile report;
.Problem:How to comment in M-File Editor?
.Solution:
Method 1 : Select the code scope you want to make a comment, then
「Ctrl + R」- >make a comment.
「Ctrl + T」-> revome all comments.
Method 2 : (shit...It seems to be not work with Octave)
%{
your source code
%}
.Problem:一行Code太長,不好看,如何換行?
.Solution:
在某行Code最後面加上「...」就OK了。
Example :
result = nchoosek(100,2) + nchoosek(100,3) +...
nchoosek(100,4);
.Problem:M-Editor 同時開啟很多個File的話,如何切換?
.Solution:Ctrl + PageUp / Ctrl + PageDown
0 Comments:
Plz Post a Comment / 拜託你留個言啦...^^"