1、commons-math/commons-lang-math
以上兩個包是apache下的,前者比後者的功能強大,後者有的功能前都有,後者主要解決平時程式中的一些基本的數學計算,主要是範圍判斷(*Range),隨機數產生(JVMRandom,RandomUtils),分數處理(Fraction),數字轉化、大小判斷(NumberUtils)等。前者可以處理更複雜的資料分析(org.apache.commons.math.analysis)、複數(org.apache.commons.math.complex)、分散式處理(org.apache.commons.math.distribution)、資料預測估計(org.apache.commons.math.estimation)、分數、遺傳學(org.apache.commons.math.genetics)、幾何圖形(org.apache.commons.math.geometry)、線性代數(org.apache.commons.math.linear)、最佳化(org.apache.commons.math.optimization)、統計(org.apache.commons.math.stat),傳換(org.apache.commons.math.transform)、還有一些常用工具類(org.apache.commons.math.util)。
例子:求兩直線的交點,第一條兩個端點分別為(0,0)、(1,1),另一條兩個端點分別(1,0)、(0,1)。
思路:再條直線的交點,實際就是一個二元一次方程的解。方程的解實際可轉化為線性代數中的矩陣。如3x+y=4和x+2y=3這個二元一次方程。轉為矩陣為:
現在就可以用上麵包org.apache.commons.math.geometry的類RealMatrix計算。
代碼:
double[][] coefficientsData = { { 3, 1 }, { 1, 2 } };
RealMatrix coefficients = new RealMatrixImpl(coefficientsData);
double[] constants = { 4, 3 };
double[] solution = coefficients.solve(constants);
System.out.println("它們的交點是:x=" + solution[0] + ";y=" + solution[1]);
總結:如果要用到相應功能的(比如方差variance是在統計stat包裡),可查看對應的包中的API和官方例子怎麼用。
2、jsjava
這個外掛程式,幾乎用js語言重寫了apache commons lang中的功能,其實是上面commons-math的js版(jsjava-math.js),主要有
1) jsjava-core.js : include jsjava core classes
2) jsjava-ajax.js : include jsjava ajax classes
3) jsjava-anim.js : include jsjava animation classes
4) jsjava-math.js : include jsjava math classes
5) jsjava-blog.js : include jsjava blog classes
6) jsjava-comp.js : include jsjava components classes
7) jsjava-info.js : include jsjava information classes
3、jmathlib
JMathLib是一個用於計算複雜數學運算式並能夠圖形化顯示計算結果的Java開源類庫。它是Matlab、Octave、FreeMat、Scilab的一個複製,但完全採用純Java實現。
4、matlab for java
提供java介面調用matlab裡的一些方法。
5、jscience
Jscience 軟體包是一個強大的基於 Java 的物理和數學函數庫,它通過提供單個用於所有開發的體繫結構,旨在協助跨不同科學領域構建協同作用。主要是物理、數學、經濟3方面的協同作用。
6、Jama
主要用來解決基本線性代數中的喬萊斯基分解,特徵值與特徵向量,LU分解,矩陣列,奇異值分解
等。
Summary of JAMA Capabilities |
Object Manipulation |
constructors set elements get elements copy clone |
Elementary Operations |
addition subtraction multiplication scalar multiplication element-wise multiplication element-wise division unary minus transpose norm |
Decompositions |
Cholesky LU QR SVD symmetric eigenvalue nonsymmetric eigenvalue |
Equation Solution |
nonsingular systems least squares |
Derived Quantities |
condition number determinant rank inverse pseudoinverse |
下面是個列子,3X3矩陣Ax=b,然後用Ax-b檢測溢出值。
double[][] array = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}};
Matrix A = new Matrix(array);
Matrix b = Matrix.random(3,1);
Matrix x = A.solve(b);
Matrix Residual = A.times(x).minus(b);
double rnorm = Residual.normInf();
7、總結:總的來說commons-math/commons-lang-math這個是個不錯的選擇,文檔和例子都比較多。