最近為期權開發一些基本技術指標,用到一些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