標籤:
原文連結: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的設計其實是一種純物件導向的易用性和高效能運算需求之間的折中。
JAMA功能匯總
對象操作 |
建構函式 set 方法 get 方法 拷貝方法 複製方法 |
| 矩陣元素層級的操作 |
矩陣加法 矩陣減法 矩陣乘法 放大縮小 元素乘法 元素除法 求反 倒置 範式 |
| 矩陣分解 |
Cholesky LU QR SVD 對稱矩陣的特徵值 非對稱矩陣的特徵值 |
| 線性方程求解 |
非奇異系統 最小二乘 |
矩陣相關的數學量
|
條件數 行列式 矩陣秩 求逆 偽逆 |
使用範例 下面的例子求解了一個線性方程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並不適用於所有使用者,但對於日常的矩陣計算,我們相信還是會迎合大部分程式員的需求。
討論群組. 使用者可在已經建立的討論群組中評論.評論和建議可以發送至[email protected],它們將自動轉寄給jama的作者們,以及其他郵件訂閱者。 如果你想訂閱郵件,請發郵件到[email protected] ,包含文本為 subscribe jama your-name .訂閱郵件清單可在此閱覽:archive of the discussion.
JAMA:Java矩陣包