使用JAMA包求伪逆

来源:互联网 发布:lua源码分析 编辑:程序博客网 时间:2024/06/06 00:34

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);}}


0 0
原创粉丝点击