/** * Creates a Cholesky decomposition of the symmetric positive definite * matrix A. The result is a Cholesky factor R, such that * R.transpose().times( R ) equals the original symmetirc PD matrix A. * * @param A * Symmetric positive definite matrix A to decompose * @return * Cholesky decomposition of the given matrix A. */ public static CholeskyDecompositionMTJ create( final DenseMatrix A ) { DenseCholesky cholesky = DenseCholesky.factorize( A.getInternalMatrix() ); if( !cholesky.isSPD() ) { throw new IllegalArgumentException( "Matrix must be symmetric and positive definite!" ); } DenseMatrix R = DenseMatrixFactoryMTJ.INSTANCE.createWrapper( new no.uib.cipr.matrix.DenseMatrix( cholesky.getU() ) ); return new CholeskyDecompositionMTJ( R ); }
/** * Creates a Cholesky decomposition of the symmetric positive definite * matrix A. The result is a Cholesky factor R, such that * R.transpose().times( R ) equals the original symmetirc PD matrix A. * * @param A * Symmetric positive definite matrix A to decompose * @return * Cholesky decomposition of the given matrix A. */ public static CholeskyDecompositionMTJ create( final DenseMatrix A ) { DenseCholesky cholesky = DenseCholesky.factorize( A.getInternalMatrix() ); if( !cholesky.isSPD() ) { throw new IllegalArgumentException( "Matrix must be symmetric and positive definite!" ); } DenseMatrix R = DenseMatrixFactoryMTJ.INSTANCE.createWrapper( new no.uib.cipr.matrix.DenseMatrix( cholesky.getU() ) ); return new CholeskyDecompositionMTJ( R ); }
/** * Creates a Cholesky decomposition of the symmetric positive definite * matrix A. The result is a Cholesky factor R, such that * R.transpose().times( R ) equals the original symmetirc PD matrix A. * * @param A * Symmetric positive definite matrix A to decompose * @return * Cholesky decomposition of the given matrix A. */ public static CholeskyDecompositionMTJ create( final DenseMatrix A ) { DenseCholesky cholesky = DenseCholesky.factorize( A.getInternalMatrix() ); if( !cholesky.isSPD() ) { throw new IllegalArgumentException( "Matrix must be symmetric and positive definite!" ); } DenseMatrix R = DenseMatrixFactoryMTJ.INSTANCE.createWrapper( new no.uib.cipr.matrix.DenseMatrix( cholesky.getU() ) ); return new CholeskyDecompositionMTJ( R ); }
@Override public long process(BenchmarkMatrix[] inputs, BenchmarkMatrix[] outputs, long numTrials) { DenseMatrix matA = inputs[0].getOriginal(); DenseCholesky cholesky = new DenseCholesky(matA.numRows(),false); LowerSPDDenseMatrix uspd = new LowerSPDDenseMatrix(matA); DenseMatrix result = null; long prev = System.nanoTime(); for( long i = 0; i < numTrials; i++ ) { // the input matrix is over written uspd.set(matA); if( !cholesky.factor(uspd).isSPD() ) { throw new RuntimeException("Is not SPD"); } result = cholesky.solve(Matrices.identity(matA.numColumns())); } long elapsedTime = System.nanoTime()-prev; if( outputs != null ) { outputs[0] = new MtjBenchmarkMatrix(result); } return elapsedTime; } }
@Override public long process(BenchmarkMatrix[] inputs, BenchmarkMatrix[] outputs, long numTrials) { DenseMatrix matA = inputs[0].getOriginal(); DenseCholesky cholesky = new DenseCholesky(matA.numRows(),false); LowerSPDDenseMatrix uspd = new LowerSPDDenseMatrix(matA); LowerTriangDenseMatrix L = null; long prev = System.nanoTime(); for( long i = 0; i < numTrials; i++ ) { // the input matrix is over written uspd.set(matA); if( !cholesky.factor(uspd).isSPD() ) { throw new DetectedException("Is not SPD"); } L = cholesky.getL(); } long elapsedTime = System.nanoTime()-prev; if( outputs != null ) { outputs[0] = new MtjBenchmarkMatrix(L); } return elapsedTime; } }