龐聰 杜瑞林 王磊 賀克鋒 龍坤 羅棋
摘 要: 由于JavaScript具有跨平臺性和免安裝、輕量級等優(yōu)點,已經(jīng)實現(xiàn)線性代數(shù)、無約束優(yōu)化、信號處理等數(shù)學(xué)計算,其在未來的“瘦客戶端”領(lǐng)域會有很大的應(yīng)用空間。分析了JavaScript和MATLAB的數(shù)值數(shù)據(jù)類型特點,對比測試了兩種語言在不同迭代次數(shù)情況下、不同計算機上執(zhí)行的計算結(jié)果差異,并根據(jù)測試得出結(jié)論:JavaScript比MATLAB的迭代計算結(jié)果更加精確,運行速度也更快;MATLAB的計算結(jié)果幾乎不受計算機配置影響,而JavaScript的運行情況容易受計算機配置影響,這是因為瀏覽器的運行受到了計算機內(nèi)存等的影響。
關(guān)鍵詞: JavaScript; MATLAB; 處理時間; 數(shù)據(jù)精度; 迭代; 計算機
中圖分類號:TP393;TP311 文獻(xiàn)標(biāo)志碼: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 引言
科研人員與研究生在進行數(shù)值仿真時一般采用MATLAB進行數(shù)學(xué)計算,其完美的數(shù)據(jù)工具箱幾乎囊括了所有主流數(shù)學(xué)類計算算法和仿真,但在處理大量數(shù)據(jù)時,運行時間過長,并且MATLAB的功能完善也需要客戶端軟件的升級拓展。
JavaScript的代碼執(zhí)行不依賴專有軟件,而是跨平臺的在支持瀏覽器的系統(tǒng)上運行,即有瀏覽器的PC、移動端都可以支持JavaScript的執(zhí)行。這也免除了專有軟件安裝升級的煩惱[1]。
本文分析討論了JavaScript與MATLAB的數(shù)據(jù)類型特點,并在不同迭代次數(shù)條件下和不同計算機配置環(huán)境下,分別對比了JavaScript和MATLAB的計算性能狀況,計算特性包括數(shù)據(jù)的結(jié)果精度和最終處理時間(ms)。
1 JavaScript
JavaScript的數(shù)據(jù)類型主要分為字符串、對象、Null、數(shù)組、數(shù)字、Undefined等。數(shù)字類型(number)可以用于數(shù)學(xué)運算,但是它只有一種數(shù)字類型,這是由JavaScript的寬松型特性決定的,在具體的計算中數(shù)字可以選擇是否帶小數(shù)點。
isNaN用來檢測數(shù)據(jù)對象是否為數(shù)值內(nèi)數(shù)據(jù),NaN表示Not a Number,如果檢測的結(jié)果為false,就說明是數(shù)值數(shù)據(jù),例如alert(isNaN(78)),結(jié)果返回false。其中,字符串類型的數(shù)值也可以通過isNaN自動轉(zhuǎn)換為number[2]。
JavaScript支持拓展各種計算庫(library)。例如number.js是一個用于服務(wù)器端的插件,支持復(fù)數(shù)、數(shù)字信號處理DSP、微積分、矩陣運算、統(tǒng)計等;而numeric.js支持無約束優(yōu)化、ODE求解、線性代數(shù)、稀疏矩陣等。通過庫的拓展,JavaScript可以支持許多MATLAB也支持的算法[3]。
2 MATLAB
MATLAB的運算基礎(chǔ)是矩陣計算,在操作中的指令輸入方式明顯不同于C、Java等高級程序語言,而是更加人性化的界面體驗,支持各種算法工具箱用于拓展。它在工程優(yōu)化、數(shù)值計算、系統(tǒng)仿真、圖像處理等方面有著重要應(yīng)用,不僅在經(jīng)濟學(xué)、地球科學(xué)受到重視,在機械工程、統(tǒng)計學(xué)等學(xué)科都有其存在的意義[5]。
MATLAB支持的算法非常多,主要有十種:最優(yōu)化設(shè)計、網(wǎng)格算法、數(shù)據(jù)離散化、線性規(guī)劃、圖論算法、數(shù)據(jù)擬合、數(shù)值分析、圖像處理算法、動態(tài)規(guī)劃、蒙特卡洛算法等[6]。
MATLAB的數(shù)值類型主要分為雙精度、單精度、無符號、有符號等。具體的分類情況如表1所示。
3 實驗對比分析
3.1 同一計算機上不同迭代次數(shù)的計算性能對比
我們首先利用一系列常用的編程軟件對比測試,測試的結(jié)果包括計算精度和運行時間。JavaScript測試代碼具體過程如下:首先定義初始變量x=4.237,y=0;利用for循環(huán)實現(xiàn)函數(shù)式y(tǒng)=y+x*x迭代100000000次;函數(shù)的每一次迭代后i都自動累加一次。然后創(chuàng)建函數(shù)運行時間測量函數(shù)test(),包含兩個時間監(jiān)測點:開始時間函數(shù)Date().getTime()和結(jié)束時間函數(shù)Date().getTime(),放置在函數(shù)內(nèi)部首尾兩端;最后在test()內(nèi)部運行for循環(huán)迭代,時間監(jiān)測點函數(shù)的差值就是函數(shù)運行時間。
MATLAB具體的測試過程如下:首先在運算代碼的首位放置計時器tic和toc,tic表示從此時開始計時,toc表示計時到此結(jié)束;設(shè)置函數(shù)初始值x=4.237;y=0;i=0;利用while循環(huán)在條件i<100000000時運算停止,迭代函數(shù)為y=y+x*x;同時函數(shù)每迭代一次,i就累加一次;最后end結(jié)束迭代過程。
MATLAB和JavaScript在同一計算機上不同迭代次數(shù)的計算性能對比結(jié)果如表2所示。
單獨看待JavaScript的不同迭代次數(shù)對比結(jié)果表明:數(shù)據(jù)長度都在16位左右,結(jié)果的精確度可以保留在小數(shù)點后第11位,比較理想的保留了數(shù)據(jù)結(jié)果的有效數(shù)位;迭代10000次的時間1Ms明顯比100000000次的232Ms短很多,迭代100000000次的時間不足1s證明JavaScript的運行速度較快。
MATLAB的兩次計算情況也說明了迭代次數(shù)的較大差異直接影響運行時間的較大延長;計算結(jié)果則是以科學(xué)計算法1.7952e+05表示,有效數(shù)位都是只有5位。
對比JavaScript與MATLAB在相同迭代次數(shù)100000000條件下的結(jié)果,明顯表明:JavaScript的數(shù)據(jù)結(jié)果1795216895.930967比MATLAB的1.7952e+09精確很多;運行時間232ms比MATLAB的517.256ms小一倍多??傊?,在相同計算機上進行迭代計算,JavaScript在數(shù)據(jù)精度、處理時間都比MATLAB更加精確、短,這也證明了JavaScript在計算方面的優(yōu)越性,并且JavaScript的解釋執(zhí)行不依賴客戶端軟件,具有跨平臺特性。
3.2 不同計算機上相同迭代次數(shù)的計算性能對比
迭代次數(shù)設(shè)置為100000000次,迭代函數(shù)為y=y+x*x,初始條件不變,依然為x=4.237;y=0;i=0。具體的代碼執(zhí)行過程與3.1相同。
計算機主要配置如下:
⑴ Lenovo z460:Windows 7旗艦版32位、Intel Core i3-M350 @ 2.27GHz、2.00GB內(nèi)存;
⑵ 臺式機:Windows 7旗艦版64位;Intel Core i3-3220 @ 3.30GHz;8.00GB內(nèi)存。
MATLAB和JavaScript在不同計算機上相同迭代次數(shù)的計算性能對比結(jié)果如表3所示。
上述結(jié)果是JavaScript、MATLAB分別在不同計算機上運行得出的計算結(jié)果。
JavaScript在不同計算機條件下的計算結(jié)果得出結(jié)論:Lenovo z460筆記本與臺式機的計算結(jié)果保持一致,但在運行時間上臺式機明顯更快,達(dá)到了106Ms。MATLAB在不同計算機條件下的計算結(jié)果得出結(jié)論:兩者的計算結(jié)果皆為1.7952e+09;處理時間兩者相差不大,皆為500ms以上。
對比兩種語言可以得出結(jié)論:JavaScript無論在哪種計算機環(huán)境下都比MATLAB的數(shù)據(jù)精度、運行時間效果要好;MATLAB的運行結(jié)果與計算機關(guān)系不大;JavaScript的運行情況容易受支持瀏覽器運行的計算機配置影響。
3.3 小結(jié)
上述兩次實驗,從不同迭代次數(shù)、不同運行計算機的條件下進行JavaScript與MATLAB的對比測試,得到以下幾個結(jié)論。
JavaScript比MATLAB的迭代計算結(jié)果更加精確、運行速度也更快;
MATLAB的計算結(jié)果幾乎不受計算機配置影響;
JavaScript的運行情況容易受計算機配置影響,這是因為瀏覽器的運行受計算機內(nèi)存等影響。
4 結(jié)束語
JavaScript的計算特性不只是在迭代計算方面可以發(fā)揮作用,同樣在線性代數(shù)、無約束優(yōu)化等方面也有自己獨特的支持功能。MATLAB不僅支持矩陣運算、二三維曲線繪圖,在工程優(yōu)化方面也有著JavaScript不可企及的優(yōu)勢。
本文研究的JavaScript雖然在迭代方面處在優(yōu)勢,但相對于MATLAB強大的工程運算功能也存在許多不足,在此指出:
數(shù)據(jù)類型單一。JavaScript的數(shù)據(jù)類型為松散型,并不能像一些高級程序設(shè)計語言一樣可以設(shè)置數(shù)據(jù)精度或者支持int、double、long等數(shù)據(jù)類型。實際計算中,JavaScript都會以最接近理想結(jié)果的形式把數(shù)據(jù)結(jié)果展現(xiàn)出來。
功能支持不夠。MATLAB在工程優(yōu)化方面有兩個重要作用,一是最小二乘法擬合、優(yōu)化,二是擬牛頓優(yōu)化。JavaScript并沒有MATLAB那樣功能完整的算法工具箱或插件等,只能通過編寫代碼實現(xiàn)簡單曲線最小二乘法擬合。
參考文獻(xiàn)(References):
[1] Nicholas C.Zakas.JavaScript高級程序設(shè)計[M].人民郵電出
版社,2012.
[2] Loiane Groner.學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法[M].人民郵
電出版社,2015.
[3] Zakas N C.高性能JavaScript[M].電子工業(yè)出版社,2010.
[4] 司守奎,孫璽菁.數(shù)學(xué)建模算法與應(yīng)用[M].國防工業(yè)出版社,
2015.
[5] 張永恒.工程優(yōu)化設(shè)計與MATLAB實現(xiàn)[M].清華大學(xué)出版
社,2011.