Kaie"s Blog 2.0 beta!
Back to "Top"

My Secret Notebook
 Show "Table of Contents"
Contact Me
Subscribe to my Posts feed
Subscribe to my Comments feed
My Flickr
Back to "Top"
My Secret Notebook
 Show "Table of Contents"
Contact Me
Subscribe to my Posts feed
Subscribe to my Comments feed
My Flickr

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的同一資料夾,就可以直接用了。
  • 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在這兩套跑,發現都是Octave比較快,不知MATLAB在龜啥,要不是他比較好Debug,早就叫他去死了...」

我跑了同一段Code,測試結果如下:(Executing Time in second)
  1. Matlab on Pentium 4 3.0 G:
  2. Total1 = 7.812000, Total2 = 110.719000, Total3 = 7.391000, Total4 = 107.625000
  3. Octave on Pentium 4 3.0 G:
  4. Total1 = 2.296999, Total2 = 36.093000, Total3 = 1.843999, Total4 = 33.234000
  5. Matlab on Barton 2500+ oc 3000+:
  6. Total1 = 4.953000, Total2 = 95.015000, Total3 = 5.079000, Total4 = 68.796000
  7. Octave on Barton 2500+ oc 3000+:
  8. Total1 = 1.618999, Total2 = 23.355000, Total3 = 1.273999, Total4 = 22.122000
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;

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