「芯歷史」「神器」也是「毒蘋果」,MATLAB是如何長成的?

愛集微app 發佈 2020-06-22T03:28:48+00:00

經過近40年的演變,如今MATLAB提供企業版、校園版和家庭版,世界上有180多個國家、數百萬工程師與數學家都在使用MATLAB,可作為整個汽車、航空航天、通信、電子和工業自動化領域的基本研發工具,可支持設計和開發各種先進產品,包括汽車系統、航空飛行控制和航空電子、電信和其他電子設備、工業機械以及醫療設備,在工業製造、學術研究等領域具有近乎壟斷的市場地位。

MATLAB與Mathematica、Maple被業內並稱為三大數學軟體。它是美國MathWorks公司研發出品的高級技術計算語言和交互式環境集成軟體,初版誕生於1984年,廣泛用於算法開發、數據可視化、數據分析、仿真建模以及數值計算。

經過近40年的演變,如今MATLAB提供企業版、校園版和家庭版,世界上有180多個國家、數百萬工程師與數學家都在使用MATLAB,可作為整個汽車、航空航天、通信、電子和工業自動化領域的基本研發工具,可支持設計和開發各種先進產品,包括汽車系統、航空飛行控制和航空電子、電信和其他電子設備、工業機械以及醫療設備,在工業製造、學術研究等領域具有近乎壟斷的市場地位。

那麼這款商業數學軟體是如何一步步變成一款「神器」的?

故事開始之前,先來簡單介紹幾個涉及到的程式語言。

Algol

Algol是一種指令式程式語言,發展於1950年代中期,對許多其它程式語言產生了重大影響。可與差不多同時期的FORTRAN、LISP及COBOL並列為四大最有影響力的高階語言。Algol被設計用來避免FORTRAN中一些已知的問題,最終引領了許多其它程式語言的興起,包括PL/I、Simula、BCPL、B、Pascal及C。Algol引入了代碼塊,並用begin⋯end來分隔。它是第一個利用詞法作用域實作巢狀函式的語言,也是第一個注重形式語言定義的語言。

1960年1月,圖靈獎獲得者:艾倫·佩利在巴黎舉行的有全世界一流軟體專家參加的討論會上,發表了"算法語言Algol 60報告",確定了程序設計語言Algol 60。Algol 60是程序設計語言發展史上的一個里程碑,它標誌著程序設計語言成為一門獨立的科學學科,並為後來軟體自動化及軟體可靠性的發展奠定了基礎。

Fortran

Fortran是一種程式語言,1957年由IBM開發出,是為了滿足數值計算的需求而發展出來的,是世界上第一個被正式採用併流傳至今的高級程式語言。Fortran語言的最大特性是接近數學公式的自然描述,在計算機里具有很高的執行效率,可以直接對矩陣和複數進行運算,其矩陣元素在記憶空間存儲順序是採用列優先(Column major),這幾個特點後來的MATLAB有繼承。

1966年,美國標準化協會制定了Fortran(x3.9-1966,也就是Fortran 66)和Fortran(x3.10-1966)標準,1976年又重新對Fortran 66進行了評估,公布了新的Fortran標準,也就是Fortran 77。Fortran 77是具有結構化特性的程式語言,並在短時間內獲取了巨大的成功,廣泛地應用於科學和工程計算,幾乎統治了數值計算領域,1980年被ISO接納為國際標準。

EISPACK和LINPACK

Cleve Moler是MathWorks現任首席數學家,董事長兼聯合創始人,曾在密西根大學,史丹福大學和新墨西哥大學擔任數學和計算機科學教授近20年。

上世紀70年代和80年代初期,Cleve在新墨西哥大學教授線性代數和數值分析。1970年和1975年,他所在的團隊向美國國家科學基金會(NSF)分別申請了兩個項目,目標是「探索開發高質量數學軟體的方法、成本和資源」。前一個項目中,他的團隊將手冊中解決特徵值問題的Algol轉換為Fortran,並在測試和可移植性方面做了大量研究,最終開發出EISPACK(矩陣特徵系統軟體包)。1975年,Cleve團隊重新提交了一個研究項目,調研數學軟體的開發方法,誕生了一個叫LINPACK的線性方程軟體包的副產品。

Cleve認為這兩個項目從某種意義上來說都失敗了,因為項目未「撰寫報告或論文,只研發了軟體。」這兩個軟體談不上多大的學術創新,但是非常有用,LINPACK更是世界超級計算機排行榜Tops500的基準測試程序,可以說是影響了世界超級計算機的發展。

初版MATLAB、商用及MathWorks創立

為了能讓學生更好地掌握線性代數與數值分析,用心教學的Cleve希望自己的學生能夠方便地使用LINPACK和EISPACK,而不必編寫Fortran程序,也就是為了讓學生把精力更多地投入到學習數學概念而不是程式語言上,於是用Fortran編寫了初版MATLAB,通過這個「小工具」把LINPACK和EISPACK兩個軟體接口封裝起來,從而方便使用。

最初的MATLAB只是一個交互式矩陣計算器,這個版本的MATLAB只能進行簡單的矩陣運算,例如矩陣轉置、計算行列式和本徵值。它只是Cleve的興趣愛好,當時並沒有獲得任何資助,也沒有商業計劃。

Cleve Moler

1979年Cleve來到史丹福大學任教,教授數值分析的研究生課程,並在課程中引入了這一矩陣計算器。MATLAB引起了幾個學生的興趣,並主動提出用C語言重新寫一遍並移植到IBM PC上。在他的回憶錄中這樣寫道:

「Jack Little當時正在斯坦福攻讀研究生工程學位。他的一個朋友是我的學生並向他展示了MATLAB,隨後他便在工作中用到了它。

1983年,Little提議開發基於MATLAB的商用產品。彼時,IBM台式機才推出兩年,很難支持MATLAB這樣的程序的運行,但是Little希望對它進行改進。他辭掉了工作,在Sears購買了Compaq電腦克隆機,並搬到了斯坦福的後山上。在我的鼓勵下,他用C語言編寫了MATLAB新的擴展版本。我的一個朋友Steve Bangert也在業餘時間研究新版MATLAB。」

Little和Bangert在Cleve的初代版本的基礎上用C語言重新編寫了MATLAB並增加了一些新功能,Little還開發了第一個系統控制工具箱,其中一些代碼到現在仍然在使用。最終在1984年拉斯維加斯的IEEE決策與控制會議上,PC-MATLAB首次發布,同年,Cleve、Little和Bangert,在斯坦福後山Little居所租來的一個A型機艙中共同創立了MathWorks,正式將C語言版的面向MS-DOS系統的MATLAB 1.0推向市場。

1985年MathWorks發布了針對Unix工作站的Pro-MATLAB,即MATLAB 2.0,同時MATLAB 1.0第一份訂單向MIT售出了10份副本,收入500美元。

MathWorks成立不久後,Little將公司搬到了他的家鄉麻薩諸塞州,Bangert仍住在加州,而Cleve去了俄勒岡英特爾的衍生業務工作,該公司開發了世界上第一台商業並行計算機之一。在1989年成為全職員工之前,他一直擔任MathWorks的顧問。

1992年,學生版MATLAB推出;1993年,Microsoft Windows版MATLAB面世;1995年,Linux版推出。2007年,MathWorks進入中國市場。

MATLAB誕生的80年代,正趕上美國控制學界基於狀態空間的控制理論蓬勃發展時期,在控制學界推動、大牛加持下,MATLAB得到極快的發展。

從MATLAB的誕生到繁榮不難看出,雖然MathWorks的產品已演變成工業界科學計算和基於模型設計的標準平台,但是可以說教育界才是其根基所在。

MATLAB的重要工具箱Simulink誕生

基於矩陣數學運算的根基,MATLAB在幾十年里更新了十多個版本,並跟隨時代發展不斷引入新的理念,以滿足工程師和科學家們日益更新的需求。

例如最開始的MATLAB只有一種數值數據類型:以64位格式存儲的IEEE標準754雙精度浮點。1992年隨MATLAB 4推出了稀疏矩陣能夠顯示超大數組(幾乎不含非零值)又節省內存;1996年發布的MATLAB 5增加了單元陣列,以及結構和「圓點表示法」;2004年發布的MATLAB 7中開始支持單精度算法,將大型陣列的內存需求降低了一半。

此外,在MATLAB的可用性和易用性方面MathWorks也在不斷提升。首版MATLAB只是簡單的終端應用程式,隨著時間的推移逐漸增加了圖形化、編輯和其他工具的獨立窗口。這些改進使MATLAB的使用變得更加簡單,尤其是對那些沒有編程經驗的用戶來說。兩個影響最大的功能是桌面版和實時編輯器,分別於2000年和2016年推出。2004年還推出了並行計算工具包,比爾蓋茨就曾使用MATLAB演示了微軟向高性能計算領域的邁進。

Simulink工具包的引入是MathWorks一個重要的飛躍。

1990年,MATLAB加入Simulink仿真模塊,它用於動態系統和嵌入式系統的多領域模擬和基於模型的設計,Simulink提供一個交互式的圖形化環境及可定製模塊庫,可對各種時變系統,例如通訊、控制、信號處理、影像處理和圖像處理系統等進行設計、模擬、執行和測試,也可以進行基於模型的設計。Simulink與MATLAB緊密集成,可以直接訪問MATLAB大量的工具來進行算法研發、仿真的分析和可視化、批處理腳本的創建、建模環境的定製以及信號參數和測試數據的定義。

MATLAB+Simulink,以及上百種工具包,使得基於模型的設計概念迅速推廣,它可以使設計者無需手寫代碼和使用文檔,而是創建系統模型。以工業機器人為例,模型由機械臂、電機和控制器設計組成,通過MATLAB+Simulink軟體,可以隨時進行模型仿真,即時查看系統行為,測試多種假設分析場景,同時無需承擔風險和延遲,也無需依賴昂貴的硬體。

如果說,MATLAB還有Python、Octave、Julia等開源軟體可以使用,那麼Simulink才是真正難以替代的部分。例如如果沒有Simulink,通信、控制、信號、車輛等專業的研究效率都會受到影響。哪怕不用Simulink,很多這方面的仿真軟體也只提供MATLAB的接口,是MATLAB核心競爭力之一。

經過近四十年,到2019年MathWorks的營業額已經達到10億美元規模,員工從最初的3個聯合創始人,到如今超過3000名遍布全球的員工。

MATLAB從簡單的計算器開始,成為一個富有生命力的生態系統。至此,MATLAB和Simulink已經不再是傳統意義上的仿真軟體,而是建立在MATLAB和Simulink基礎框架之下的工業應用平台。業內人士評價:MATLAB基於狀態機模型,在CMU的技術支援下,完成了符號計算引擎的研發,這就為EDA數字電路設計仿真、AI人工智慧數據分析,SDR/SCA軟體無線電應用提供了計算支持和基礎。

同半導體EDA領域大家所熟知的Synopsys、Cadence和Mentor Graphics三巨頭一樣,相比英特爾、三星、台積電這類公司他們的營業額並不算大,但是這種不斷積累,把一項技術做到極致,成為某個細分領域的隱形冠軍是我們所應當學習的。

MATLAB是神器,還是毒蘋果?

MATLAB語言的簡易性是其迅速繁榮的主要原因。時至今日,當年的數學計算霸主Fortran已經幾乎無人使用,而MATLAB一直都保持了相當的人氣。這要得益於它充分降低了學習門檻,在計算速度和易寫當中保持了一個很好的平衡。

與Fortran相比MATLAB是一種動態語言,可以逐步調試,而且可以直接運行,免去了編輯-編譯-連結-加載-執行等靜態語言繁瑣的步驟。它把常用的功能都變成了關鍵字,避免了不懂編程的人去處理各種庫的麻煩。

IEEE Spectrum 2019程式語言Top 10中MATLAB名列第八

最後,MATLAB簡化了控制流,只保留了循環、判斷、定義函數等最簡單的幾種語義。MATLAB的關鍵字如今多達近千個,但是必須掌握的控制流關鍵字就在10個左右。也就是說學會了這10個關鍵字的用法加上善於查詢MATLAB的幫助手冊,就可以進行數學計算、繪圖和仿真了。

到現在,MATLAB已經發展成為科學、工程領域應用最廣泛的科學計算軟體,在控制領域,MATLAB已成為國際控制界的標準計算軟體,在國內甚至已經形成了一家獨大的現實局面。

基於MATLAB平台的開發的各種函數、模型,均無法脫離MATLAB環境單獨使用,一旦更換軟體,需要重構所有模型積累,平台裝換成本過大,所以科研對團隊對MATLAB軟體的應用越深入、越持久,就越離不開MATLAB軟體,只能持續購買授權,所以有專家評論MATLAB的生態是「毒」立生態。

因此專家認為,「易用」的另一面是學生對算法的細節不求甚解,失去了對算法的基礎創新能力。而研究者們成了「調包族」 — 只需調用現成的軟體包,使得研究者們對基礎算法的理解趨於表面化、膚淺化,知其然不知其所以然,不知道如何改進算法,使其更加適用於自己的問題。這也是許多年來這些領域在基礎理論方面沒有突破的一個重要原因。因此專家指出,如果研究生和教授們只會調用別人的算法來解決問題,那麼他們就成為了「技工」,大學也就成了技工學校。

人工智慧是目前最火熱和最前沿的技術領域,對於涉及非線性關係和複雜大數據的機器學習人工智慧算法,許多核心敏感參數的選取直接影響系統的最終性能。

國科大教授王立新在其博客中寫到,只有深入理解算法的細節,才能理解並有效地選取這些敏感參數,使系統性能達到最優。理解算法細節最有效的方法是自己進行算法編程,在不斷的試錯中理解算法的核心奧秘、發現敏感參數的選取方法,而不是調用Matlab toolbox以及其它許多所謂的「開源軟體包」。

因此,此次MATLAB被禁,正好鞭策科研工作者回歸本學科科學研究的本質,給了我國人工智慧研究者們一個難得的「歪打正著」的機會,讓我們靜下心來自己編程基礎算法,深刻體會基礎模型與算法的核心要素與優缺點,在現有成績的基礎之上「百尺竿頭、更進一步」。

至於國內呼聲工業應用軟體的國產替代,行業專家指出,平台性、工具性的工業軟體研發需要很長時間,並且有很大風險,企業很難有動力去做這個事情,需要政府支持高校和專業研究院所來做,不能講效益。第一,要養成一支高素質的隊伍,有足夠的毅力和韌性精神,用時間去換經驗;第二,國家要給「試驗田」,只有這樣隊伍才能得到鍛鍊和成長,這些軟體產品才能成熟;第三,工業軟體在成長過程中難免會有一些缺陷和不足,國家要鼓勵、支持市場能容錯。(校對/Aki)


關鍵字: