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版

早期保本


 

我們計划把jama做成java的標准庫,這一標准化將給java增加數值計算模塊,帶來更好的可移植性和性能,我們樂意聽到大家的任何反饋。 當然我們也自知jama並不適用於所有用戶,但對於日常的矩陣計算,我們相信還是會迎合大部分程序員的需求。

討論組. 用戶可在已經建立的討論組中評論.評論和建議可以發送至jama@nist.gov,它們將自動轉發給jama的作者們,以及其他郵件訂閱者。 如果你想訂閱郵件,請發郵件到 listproc@nist.gov ,包含文本為 subscribe jama your-name .訂閱郵件列表可在此閱覽: archive of the discussion.

剩下的不翻了

[Note: NIST will not use the email addresses provided for any purpose other than the maintenance of this discussion list. Participants may remove themselves at any time by sending an email message to listproc@nist.gov containing the text unsubscribe jama in the message body. See the NIST Privacy Policy.]

 

 

Authors

 

JAMA's initial design, as well as this reference implementation, was developed by

 

 

Joe Hicklin 
Cleve Moler 
Peter Webb
... from The MathWorks    
Ronald F. Boisvert 
Bruce Miller 
Roldan Pozo 
Karin Remington
... from NIST      

Copyright Notice This software is a cooperative product of The MathWorks and the National Institute of Standards and Technology (NIST) which has been released to the public domain. Neither The MathWorks nor NIST assumes any responsibility whatsoever for its use by other parties, and makes no guarantees, expressed or implied, about its quality, reliability, or any other characteristic.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM