原文鏈接:JAMA:Java矩陣包
API文檔鏈接:線性代數Java包 JAMA
jama是一個非常好用的java的線性代數軟件包。適用於日常編程可能碰到的各種矩陣運算問題,提供了一個優雅的簡便的解決方案。
jama:java 矩陣包
背景
jama是一個基本的線性代數java包,它提供了實數非稀疏矩陣類,程序員可構造操控這些類。對於經常使用到矩陣運算的碼農來說,即使不精通線性代數也沒有關系,因為jama包提供的功能已經夠用,調用方便,使用自然,而且易於理解。Jama包意欲稱為java的標准矩陣包,這一標准計划將提交給Java Grande論壇,轉而交給sun公司。java矩陣類的潛在競爭對手包括Mathworks公司和國家標准化管理委員會(NIST)實現的矩陣類,我們發布這一版本,以廣收評議。將來jama的新版本不一定和現在的版本兼容。
NIST和馬里蘭大學曾開發過一個類似的矩陣包:Jampack,這兩個包的出現,出於用戶對矩陣的不同實現需求。Jama基於單個矩陣類,是一個嚴格的面向對象的框架,而Jampack的方案更為開放,便於用戶的擴展。對一般用戶而言,這兩個包只是在矩陣操作的語法層面上有所差別。我們希望你有時間同時了解一下這兩個矩陣包,一定會受益匪淺。
功能:
jama由如下6個類組成: Matrix,CholeskyDecomposition, LUDecomposition, QRDecomposition, SingularValueDecomposition and EigenvalueDecomposition
Matrix類提供了基本的線性代數數值運算的功能,不同的構造函數可以構造雙精度和浮點精度的二維數組,而不同的gets和
sets方法可以返回子矩陣和矩陣元素。基本的算術運算包括矩陣相加,矩陣相乘,矩陣范式以及基於矩陣元素的算術運算。打印矩陣的函數也包括在內。
矩陣的五大分解,涉及一對或三元組,排列向量矩陣等,對應於jama的5個矩陣分解類。這些分解類可由Matrix類訪問,可以求解線性方程組,求解方陣行列式,求逆和其他矩陣運算。這些分解類如下:
- 對稱正定矩陣的Cholesky分解
- 矩陣的LU分解(高斯消元)
- 矩陣的QR分解
- 對稱和非對稱方陣的特征向量值分解
- 矩陣的奇異值分解
目前jama只支持實數矩陣。將來可能會加入復數矩陣的支持。現在暫不實現復數矩陣,主要是由於現在還沒有太多這方面的需求,故先不冒重新設計而帶來的復雜風險。
Jama的設計其實是一種純面向對象的易用性和高性能計算需求之間的折中。
對象操作 |
構造函數 set 方法 get 方法 拷貝方法 克隆方法 |
矩陣元素級別的操作 | 矩陣加法 矩陣減法 矩陣乘法 放大縮小 元素乘法 元素除法 求反 倒置 范式 |
矩陣分解 | Cholesky |
線性方程求解 | 非奇異系統 |
矩陣相關的數學量 |
條件數 |
使用范例 下面的例子求解了一個線性方程Ax = b,矩陣規模為 3 * 3,最后算出了殘差的范式。
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();
參考實現.
本網站下載的jama實現只能作為參考實現。它本質上還是一個教學性質的軟件包。其中的算法類於於Wilkinson和Reinsch的手冊中的內容,比如在EISPACK,LINPACK和MATLAB中使用的算法。Matrices類的內部數據存儲為java的基本數組類型(比如,double[][]),代碼可讀性強,易於理解。雖然對於中小型的數據規模,我們的程序足夠快速,但我們還是非常希望軟件商和java虛擬機能夠針對特征環境做一些優化。
未涵蓋的內容
jama不是一個完整的線性代數運算庫,比如我們就沒有提供特征結構的矩陣類(比如帶狀矩陣,稀疏矩陣等),也沒有實現更多的特定矩陣分解類(比如Shur,泛特征值分解等)。復數矩陣也不在其內。忽略這些實現並不是我們的本意。我們希望未來的本版中可以提供其中的一些功能(比如復數矩陣)。我們設計的宗旨是,不封死將來針對其他擴展功能的路。
最后,jama也不是一個通用的數組類,相反,它主要關注於與矩陣數值計算相關的數學運算。所以其中並沒有任何關於數組的操作,比如對矩陣各個元素求sine,exp,log,或者變形矩陣之類的操作。這些操作在很多應用中很有用,在一個單獨的array類中提供顯然最好。
矩陣包1.0.2版
- 文檔
- 例子
- 源碼 [ zip archive, 105Kb ] [ gzipped tar file, 77Kb ]
- Jar file [ Jama-1.0.2.jar ]
- 更新日志
早期保本
- Jama-1.0.1 Source: Jama-1.0.1.tar.gz, Jama-1.0.1.zip
- Jama-1.0.0 Source: Jama-1.0.0.tar.gz, Jama-1.0.0.zip
我們計划把jama做成java的標准庫,這一標准化將給java增加數值計算模塊,帶來更好的可移植性和性能,我們樂意聽到大家的任何反饋。 當然我們也自知jama並不適用於所有用戶,但對於日常的矩陣計算,我們相信還是會迎合大部分程序員的需求。
討論組. 用戶可在已經建立的討論組中評論.評論和建議可以發送至jama@nist.gov,它們將自動轉發給jama的作者們,以及其他郵件訂閱者。 如果你想訂閱郵件,請發郵件到listproc@nist.gov ,包含文本為 subscribe jama your-name .訂閱郵件列表可在此閱覽:archive of the discussion.