最近為期權開發一些基本技術指標,用到一些C++的數學庫,剛好看到JavaScript的math.js
庫,這里對math.js
做一下簡單介紹。
一、什么是math.js
math.js
是一個廣泛應用于JavaScript 和 Node.js的數學庫,它的特點是靈活表達式解析器,支持符號計算,內置大量函數與常量,并提供集成解決方案來處理不同的數據類型,如數字,大數字,復數,分數,單位和矩陣。math.js
可以在瀏覽器、node.js 和任何JavaScript引擎中使用。[下載地址:http://mathjs.org/download.html]
二、Features
? ? ? 1、支持數字,大數,復數,分數,單位,字符串,數組和矩陣。
? ? ? 2、與JavaScript的內置數學庫兼容。
? ? ? 3、包含一個靈活的表達式解析器
? ? ? 4、符號計算。
? ? ? 5、內置大量的函數和常量。
? ? ? 6、沒有依賴,運行在任何JavaScript引擎。
? ? ? 7、可以用作命令行應用程序。
? ? ? 8、容易擴展
? ? ? 9、開源
三、用法
math.js
支持各種軟件包管理器(ex:npm
?&?bower
)安裝,也可以從網站http://mathjs.org/download.html下載庫。
通過npm
安裝:
pm?install?mathjs
通過bower
安裝:
bower?install?mathjs
math.js
?可以從cdnjs
?下載或者鏈接:
https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.16.0/math.min.js
math.js
可以類似于JavaScript的內置Math庫。 此外,math.js
可以使用eval表達式并支持鏈接操作。一下是math.js
三種使用方式:
1、用靜態函數和常數(就像JavaScript的Math對象)
math.round(math.e,?3);????????????//?2.718math.add(2,?3);??//?5?math.sqrt(-4);??//?2i?math.pow([[-1,?2],?[3,?1]],2);?????//?[[7,?0],?[0,?7]]math.derivative('x^2?+?x',?'x');??//?2?*?x?+?1math.atan2(3,?-3)?/?math.pi;??????//?0.75
2、對字符串表達式進行求值運算
math.eval('12?/?(2.3?+?0.7)');????//?4math.eval('12.7?cm?to?inch');?????//?5?inchmath.eval('sin(45?deg)?^?2');?????//?0.5math.eval('9?/?3?+?2i');??????????//?3?+?2imath.eval('det([-1,?2;?3,?1])');??//?-7
3、鏈式操作
math.chain(3)????.add(4)????.multiply(2)????.done();?//?14
4、矩陣操作
var?n?=?math.matrix([[4,3,2],?[6,6,8],?[7,4,5]]);???console.log(n.valueof());?//?[[4,3,2],[6,6,8],[7,4,5]]
可以使用如下代碼來創建一個用0填充的矩陣:
var?z?=?math.zeros(2,2);??console.log(z.valueof());???//?[[0,?0],?[0,?0]]
注:大多數math.js函數,都需要valueof()
或者done()
函數來真正地獲取操作的值,如上面代碼所示。
5、BigNumbers
var?b?=?math.complex('4-2i');b.re?=?5;console.log(b.valueof());?//?5-2i
math.js對BigNumbers的支持,擁有任意精度的數值,并且是具有實部和虛部的復數。
math.js文檔地址:http://mathjs.org/docs/index.html