龐聰 杜瑞林 王磊 賀克鋒 龍坤 羅棋
摘 要: 由于JavaScript具有跨平臺性和免安裝、輕量級等優點,已經實現線性代數、無約束優化、信號處理等數學計算,其在未來的“瘦客戶端”領域會有很大的應用空間。分析了JavaScript和MATLAB的數值數據類型特點,對比測試了兩種語言在不同迭代次數情況下、不同計算機上執行的計算結果差異,并根據測試得出結論:JavaScript比MATLAB的迭代計算結果更加精確,運行速度也更快;MATLAB的計算結果幾乎不受計算機配置影響,而JavaScript的運行情況容易受計算機配置影響,這是因為瀏覽器的運行受到了計算機內存等的影響。
關鍵詞: JavaScript; MATLAB; 處理時間; 數據精度; 迭代; 計算機
中圖分類號:TP393;TP311 文獻標志碼:A 文章編號:1006-8228(2016)10-05-03
Comparative study of computational performance between JavaScript and MATLAB
Pang Cong1, Du Ruilin1, Wang Lei1, He Kefeng1, Long Kun2, Luo Qi1
(1. Institute of Seismology, CEA, Wuhan, Hubei 430071, China; 2. Wuhan University, School of economics and management)
Abstract: Because JavaScript has the advantages of cross-platform, installation-free and lightweight, the mathematical computation such as linear algebra, unconstrained optimization, signal processing etc. has been realized by it, and it will have a lot of application space in the future of "thin client" field. The characteristics of JavaScript and MATLAB numeric data types are analyzed in this paper. Comparison test of the two different languages is made by the computational results performed in different times of iteration, and on different computers. The test results show that JavaScript iterative calculation results are more accurate than MATLAB, and the running speed is also faster; The result of MATLAB is almost not affected by the configuration of the computer, but the operation of JavaScript is easy to be affected by the configuration of the computer, because the browser's operation is affected by the computer memory etc.
Key words: JavaScript; MATLAB; processing time; data precision; iteration; computer
0 引言
科研人員與研究生在進行數值仿真時一般采用MATLAB進行數學計算,其完美的數據工具箱幾乎囊括了所有主流數學類計算算法和仿真,但在處理大量數據時,運行時間過長,并且MATLAB的功能完善也需要客戶端軟件的升級拓展。
JavaScript的代碼執行不依賴專有軟件,而是跨平臺的在支持瀏覽器的系統上運行,即有瀏覽器的PC、移動端都可以支持JavaScript的執行。這也免除了專有軟件安裝升級的煩惱[1]。
本文分析討論了JavaScript與MATLAB的數據類型特點,并在不同迭代次數條件下和不同計算機配置環境下,分別對比了JavaScript和MATLAB的計算性能狀況,計算特性包括數據的結果精度和最終處理時間(ms)。
1 JavaScript
JavaScript的數據類型主要分為字符串、對象、Null、數組、數字、Undefined等。數字類型(number)可以用于數學運算,但是它只有一種數字類型,這是由JavaScript的寬松型特性決定的,在具體的計算中數字可以選擇是否帶小數點。
isNaN用來檢測數據對象是否為數值內數據,NaN表示Not a Number,如果檢測的結果為false,就說明是數值數據,例如alert(isNaN(78)),結果返回false。其中,字符串類型的數值也可以通過isNaN自動轉換為number[2]。
JavaScript支持拓展各種計算庫(library)。例如number.js是一個用于服務器端的插件,支持復數、數字信號處理DSP、微積分、矩陣運算、統計等;而numeric.js支持無約束優化、ODE求解、線性代數、稀疏矩陣等。通過庫的拓展,JavaScript可以支持許多MATLAB也支持的算法[3]。
2 MATLAB
MATLAB的運算基礎是矩陣計算,在操作中的指令輸入方式明顯不同于C、Java等高級程序語言,而是更加人性化的界面體驗,支持各種算法工具箱用于拓展。它在工程優化、數值計算、系統仿真、圖像處理等方面有著重要應用,不僅在經濟學、地球科學受到重視,在機械工程、統計學等學科都有其存在的意義[5]。
MATLAB支持的算法非常多,主要有十種:最優化設計、網格算法、數據離散化、線性規劃、圖論算法、數據擬合、數值分析、圖像處理算法、動態規劃、蒙特卡洛算法等[6]。
MATLAB的數值類型主要分為雙精度、單精度、無符號、有符號等。具體的分類情況如表1所示。
3 實驗對比分析
3.1 同一計算機上不同迭代次數的計算性能對比
我們首先利用一系列常用的編程軟件對比測試,測試的結果包括計算精度和運行時間。JavaScript測試代碼具體過程如下:首先定義初始變量x=4.237,y=0;利用for循環實現函數式y=y+x*x迭代100000000次;函數的每一次迭代后i都自動累加一次。然后創建函數運行時間測量函數test(),包含兩個時間監測點:開始時間函數Date().getTime()和結束時間函數Date().getTime(),放置在函數內部首尾兩端;最后在test()內部運行for循環迭代,時間監測點函數的差值就是函數運行時間。
MATLAB具體的測試過程如下:首先在運算代碼的首位放置計時器tic和toc,tic表示從此時開始計時,toc表示計時到此結束;設置函數初始值x=4.237;y=0;i=0;利用while循環在條件i<100000000時運算停止,迭代函數為y=y+x*x;同時函數每迭代一次,i就累加一次;最后end結束迭代過程。
MATLAB和JavaScript在同一計算機上不同迭代次數的計算性能對比結果如表2所示。
單獨看待JavaScript的不同迭代次數對比結果表明:數據長度都在16位左右,結果的精確度可以保留在小數點后第11位,比較理想的保留了數據結果的有效數位;迭代10000次的時間1Ms明顯比100000000次的232Ms短很多,迭代100000000次的時間不足1s證明JavaScript的運行速度較快。
MATLAB的兩次計算情況也說明了迭代次數的較大差異直接影響運行時間的較大延長;計算結果則是以科學計算法1.7952e+05表示,有效數位都是只有5位。
對比JavaScript與MATLAB在相同迭代次數100000000條件下的結果,明顯表明:JavaScript的數據結果1795216895.930967比MATLAB的1.7952e+09精確很多;運行時間232ms比MATLAB的517.256ms小一倍多。總之,在相同計算機上進行迭代計算,JavaScript在數據精度、處理時間都比MATLAB更加精確、短,這也證明了JavaScript在計算方面的優越性,并且JavaScript的解釋執行不依賴客戶端軟件,具有跨平臺特性。
3.2 不同計算機上相同迭代次數的計算性能對比
迭代次數設置為100000000次,迭代函數為y=y+x*x,初始條件不變,依然為x=4.237;y=0;i=0。具體的代碼執行過程與3.1相同。
計算機主要配置如下:
⑴ Lenovo z460:Windows 7旗艦版32位、Intel Core i3-M350 @ 2.27GHz、2.00GB內存;
⑵ 臺式機:Windows 7旗艦版64位;Intel Core i3-3220 @ 3.30GHz;8.00GB內存。
MATLAB和JavaScript在不同計算機上相同迭代次數的計算性能對比結果如表3所示。
上述結果是JavaScript、MATLAB分別在不同計算機上運行得出的計算結果。
JavaScript在不同計算機條件下的計算結果得出結論:Lenovo z460筆記本與臺式機的計算結果保持一致,但在運行時間上臺式機明顯更快,達到了106Ms。MATLAB在不同計算機條件下的計算結果得出結論:兩者的計算結果皆為1.7952e+09;處理時間兩者相差不大,皆為500ms以上。
對比兩種語言可以得出結論:JavaScript無論在哪種計算機環境下都比MATLAB的數據精度、運行時間效果要好;MATLAB的運行結果與計算機關系不大;JavaScript的運行情況容易受支持瀏覽器運行的計算機配置影響。
3.3 小結
上述兩次實驗,從不同迭代次數、不同運行計算機的條件下進行JavaScript與MATLAB的對比測試,得到以下幾個結論。
JavaScript比MATLAB的迭代計算結果更加精確、運行速度也更快;
MATLAB的計算結果幾乎不受計算機配置影響;
JavaScript的運行情況容易受計算機配置影響,這是因為瀏覽器的運行受計算機內存等影響。
4 結束語
JavaScript的計算特性不只是在迭代計算方面可以發揮作用,同樣在線性代數、無約束優化等方面也有自己獨特的支持功能。MATLAB不僅支持矩陣運算、二三維曲線繪圖,在工程優化方面也有著JavaScript不可企及的優勢。
本文研究的JavaScript雖然在迭代方面處在優勢,但相對于MATLAB強大的工程運算功能也存在許多不足,在此指出:
數據類型單一。JavaScript的數據類型為松散型,并不能像一些高級程序設計語言一樣可以設置數據精度或者支持int、double、long等數據類型。實際計算中,JavaScript都會以最接近理想結果的形式把數據結果展現出來。
功能支持不夠。MATLAB在工程優化方面有兩個重要作用,一是最小二乘法擬合、優化,二是擬牛頓優化。JavaScript并沒有MATLAB那樣功能完整的算法工具箱或插件等,只能通過編寫代碼實現簡單曲線最小二乘法擬合。
參考文獻(References):
[1] Nicholas C.Zakas.JavaScript高級程序設計[M].人民郵電出
版社,2012.
[2] Loiane Groner.學習JavaScript數據結構與算法[M].人民郵
電出版社,2015.
[3] Zakas N C.高性能JavaScript[M].電子工業出版社,2010.
[4] 司守奎,孫璽菁.數學建模算法與應用[M].國防工業出版社,
2015.
[5] 張永恒.工程優化設計與MATLAB實現[M].清華大學出版
社,2011.