MATLAB 2008

這幾個星期一直忙着作業和考試,這裏有些天沒有更新了。剛過了mid-term,回到這裏和朋友們說說話。

今年3月,Mathworks推出了MATLAB一個重要的新版本,MATLAB 2008a,也叫做MATLAB 7.6。在這個版本里,MATLAB解決了幾個長期以來固有的弊端,而且加入了一些重要的能力。這次的更新是非常aggressive的,可能代表了MATLAB的一種歷史性的轉型。
完全實現面向對象編程。其實,在MATLAB的早期版本里面,也有class的概念,不過大家如果使用過的話,可能知道那是一種不太好的設計。功能不強,過程繁瑣,而且,很多很tricky的地方,尤其是重載numel, subsref這類函數的時候。而新的設計拋開了歷史包袱,現在寫出來的類和在python裏面寫的長得差不多,舒服多了。這套設計,吸取(或者“抄襲”)了Python和C#的優點,除了支持封裝(encapsulation),繼承(inheritance),和多態(polymorphism)這些基本特性以外,還支持了一些新興的特性,包括屬性(property),事件(event),和靜態方法(static method)。
支持Handle類型——用另外一種說法,就是支持函數調用傳引用。以前matlab傳遞參數只有一種方法,copy on write。就是說,當你傳一個東西進去,如果它要發生改變,那麼,這個東西會整個copy一份,然後修改會在副本上生效。這使得實現動態數據結構變得非常困難。比如一個列表,如果每添加一個元素,都要拷貝整個列表一次,將是什麼效果呢?因此,傳統上matlab擅長於以矩陣爲基礎的算法,但是對於以經典動態數據結構爲基礎的算法,比如動態列表,哈希表,搜索樹,圖等,就力不從心了。這個新版本終於引入了對引用的支持,這將使MATLAB實現經典數據結構和算法變得前所未有的輕鬆。現在,數值和統計算法與經典算法越來越多地合流,很多應用都需要同時使用兩方面的算法,MATLAB的這個變化正好適應了這種需求。
引入了名空間的管理。以前,MATLAB所有的函數都在同一個global的名空間下面。比如兩個工具包裏面出現了同名函數,解決起來很麻煩。比如現在有兩個算法叫LDA,一個是Latent Dirichlet Allocation,一個是Linear Discriminant Analysis,在一個應用中需要同時用到兩個算法,而寫這兩個算法的人各自把它們命名爲lda.m,那麼問題就出來了。一種naive的方法是改名字,不過會直接破壞掉那些toolbox裏面對那個函數的依賴。而這個版本,它借鑑其它高級語言的經驗,終於引入了namespace,給這個問題一個很好的解決。

從這些特點看來,MATLAB這個版本的重要改變,就是全面吸收其它高級語言的特性,從一個數值運算語言開始邁向一個以數值計算爲強項的通用語言,以應對複雜或者更大規模應用的需要。

一直以來,由於matlab缺乏處理高級數據結構和建立複雜應用的能力,它有一個有力的競爭者numpy,這是python裏面進行矩陣和數值運算的包,它建基於python這種著名的通用語言,並且提供matlab矩陣的部分能力。這次MATLAB的全面升級,對於numpy無疑提出了嚴峻的挑戰。

除了程序設計結構方面的變化,MATLAB 2008在多個方面也有重要進步。
它的優化工具箱(optimization toolbox)首次引進了interior point algorithm。interior point algorithm在convex optimization中佔有重要地位,並且性能優越。MATLAB optimization toolbox一直以爲因爲使用老式算法,性能太差,而飽受詬病。這次終於引入interior point,希望它的優化性能能得到顯著改善。
重寫核心JIT引擎(運行時編譯,可以顯著提高運行效率),並且採用了最新的BLAS/Lapack核心,運算速度會有相當程度的提高。另外,還大幅度提高了對sparse matrix的計算速度。
它的統計工具箱增強了對很多著名的統計算法的有力支持,比如HMM, GMM,還有NMF(Nonnegative Matrix Factorization),並且開始引入對蒙特卡羅採樣的支持。

MATLAB 2008剛剛發行,現在學校內部還沒開始支持。不過,這個版本確實非常值得期待

轉載於 http://dahua.spaces.live.com/blog/cns!28AF4251DF30CA42!2287.entry

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章