Jama是一个非常好用的Java的线性代数软件包。适用于日常编程可能碰到的各种矩阵运算问题,提供了一个优雅的简便的解决方案。
原本只是搬砖式的项目工程到后半部分就卡壳了,没有合适的算法来支撑,在经过各种脑洞和论文后,最后还是老老实实的捡回线性代数,尝试着一步步去推导。
Maven引入
<!-- https://mvnrepository.com/artifact/gov.nist.math/jama -->
<dependency>
<groupId>gov.nist.math</groupId>
<artifactId>jama</artifactId>
<version>1.0.3</version>
</dependency>
功能
Jama由6大类组成:Matrix
, CholeskyDecomposition
, LUDecomposition
, QRDecomposition
, SingularValueDecomposition
和 EigenvalueDecomposition
。
Matrix
类提供数值线性代数的基本运算。 各种构造函数从双精度浮点数的二维数组创建矩阵。 各种获取和设置提供对子矩阵和矩阵元素的访问。 基本的算术运算包括矩阵加法和乘法、矩阵范数和选定的逐元素数组运算。 还包括一种方便的矩阵打印方法。
矩阵的五大分解,对应于Jama的五个矩阵分解类,依次为:
- 对称正定矩阵的Cholesky分解
CholeskyDecomposition
- 矩阵的LU分解(高斯消元)
LUDecomposition
- 矩阵的QR分解
QRDecomposition
- 对称和非对称矩阵的特征向量值分解
EigenvalueDecomposition
- 矩阵的奇异值分解
SingularValueDecomposition
这些分解类可以由Matrix
类访问,可以求解线性方程组,求解行列式,求逆和其他矩阵运算。
目前的Jama仅处理实数矩阵。
使用
例子
// 求解 3x3 线性系统 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 =