摘 要: 由于JavaScript具有跨平台性和免安装、轻量级等优点,已经实现线性代数、无约束优化、信号处理等数学计算,其在未来的“瘦客户端”领域会有很大的应用空间。分析了JavaScript和MATLAB的数值数据类型特点,对比测试了两种语言在不同迭代次数情况下、不同计算机上执行的计算结果差异,并根据测试得出结论:JavaScript比MATLAB的迭代计算结果更加精确,运行速度也更快;MATLAB的计算结果几乎不受计算机配置影响,而JavaScript的运行情况容易受计算机配置影响,这是因为浏览器的运行受到了计算机内存等的影响。
关键词: JavaScript; MATLAB; 处理时间; 数据精度; 迭代; 计算机
科研人员与研究生在进行数值仿真时一般采用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+xx迭代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+xx;同时函数每迭代一次,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.
转载请注明来源。原文地址:http://www.lw54.com/20161203/6517278.html