JAMA全称为Java矩阵包,这是一个基础的线性代数运算的jar包,官网最后更新时间是2012年11月
官网地址:http://math.nist.gov/javanumerics/jama/
JAMA最新jar包下载:http://math.nist.gov/javanumerics/jama/Jama-1.0.3.jar
官方文档中说明这个包可以调用inverse方法求伪逆或逆矩阵,但实际上并不能求伪逆,inverse方法在求伪逆的时候依然调用LU分解函数,事实上伪逆通常应该做QR分解或SVD分解
好在JAMA提供了SVD分解的函数,可以通过调用SVD函数来实现求伪逆,下面是一个简单的代码
import Jama.Matrix;
import Jama.SingularValueDecomposition;
public class Test {
public static void main(String[] args) {
System.out.println("HelloWorld");
double[][] array = { { 2., 2. }, { 1., 1. } };
System.out.println(array.length);
Matrix A = new Matrix(array);
SingularValueDecomposition svd =A.svd();
Matrix S = svd.getS();
Matrix V = svd.getV().transpose();
Matrix U = svd.getU();
//将S中非0元素取倒数
Matrix sinv = UnaryNotZeroElement(S);
Matrix inv = V.times(sinv).times(U.transpose());
inv.print(8, 8);
}
//将矩阵中非0元素取倒数
private static Matrix UnaryNotZeroElement(Matrix x) {
double[][] array=x.getArray();
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
if(array[i][j]!=0){
array[i][j]=1.0/array[i][j];
}
}
}
return new Matrix(array);
}
}