List of usage examples for org.apache.commons.math3.linear CholeskyDecomposition getSolver
public DecompositionSolver getSolver()
From source file:org.ojalgo.benchmark.lab.library.ACM.java
@Override public MutatingUnaryMatrixOperation<RealMatrix, Array2DRowRealMatrix> getOperationInvert(final int dim, final boolean spd) { if (spd) {//from w w w. jav a 2s . c o m return (matA, result) -> { final CholeskyDecomposition chol = new CholeskyDecomposition(matA); this.copy(chol.getSolver().getInverse(), result); }; } else { return (matA, result) -> { final LUDecomposition lu = new LUDecomposition(matA); this.copy(lu.getSolver().getInverse(), result); }; } }
From source file:org.rhwlab.variationalbayesian.GaussianMixture.java
public void init(int K) { this.K = K;/*from ww w . ja v a 2 s. co m*/ this.N = new double[K]; this.m = new RealVector[K]; inModel = new boolean[K]; for (int k = 0; k < K; ++k) { inModel[k] = true; } Dln2 = X.getD() * Math.log(2.0); Dln2Pi2 = X.getD() * Math.log(2.0 * Math.PI) / 2.0; r = new Array2DRowRealMatrix(X.getN(), K); if (X instanceof ClusteredDataSource) { ClusteredDataSource clSource = (ClusteredDataSource) X; for (int n = 0; n < X.getN(); ++n) { int cluster = clSource.getCluster(n); for (int k = 0; k < K; ++k) { if (k == cluster) { r.setEntry(n, k, 1.0); } else { r.setEntry(n, k, 0.0); } } } } else { for (int n = 0; n < X.getN(); ++n) { double[] dir = dirichlet(0.001, K); for (int k = 0; k < K; ++k) { r.setEntry(n, k, dir[k]); } } } calculateN(); if (mu0 == null) { mu0 = new ArrayRealVector(X.getD(), 0.0); } if (W0 == null) { W0 = MatrixUtils.createRealIdentityMatrix(X.getD()); W0 = W0.scalarMultiply(.01); } CholeskyDecomposition de = new CholeskyDecomposition(W0); W0inverse = de.getSolver().getInverse(); W0det = de.getDeterminant(); W = new RealMatrix[K]; Winverse = new RealMatrix[K]; detW = new double[K]; detWinv = new double[K]; /* for (int k=0 ; k<K ; ++k){ W[k] = W0.copy(); W[k].scalarMultiply(0.0000000001); detW[k] = de.getDeterminant(); } */ alpha = new double[K]; beta = new double[K]; lnLambdaTilde = new double[K]; nu = new double[K]; xBar = new RealVector[K]; for (int k = 0; k < K; ++k) { xBar[k] = new ArrayRealVector(X.getD()); // nu[k] = nu0 + N[k]; } lnPi = new double[K]; for (int k = 0; k < K; ++k) { // lnPi[k] = Math.log(N[k]/X.getN()); } S = new RealMatrix[K]; for (int k = 0; k < K; ++k) { S[k] = new Array2DRowRealMatrix(X.getD(), X.getD()); } lnRho = new double[K]; a0 = new double[K]; for (int k = 0; k < K; ++k) { a0[k] = alpha0; } C0 = lnC(a0); // alphaBetaNu(); // lambdaTilde(); }
From source file:org.rhwlab.variationalbayesian.SuperVoxelGaussianMixture.java
public void init(int K) { this.K = K;//from w w w.j a v a2s . co m Dln2 = X.getD() * Math.log(2.0); Dln2Pi2 = X.getD() * Math.log(2.0 * Math.PI) / 2.0; r = new Array2DRowRealMatrix(X.getN(), K); if (mu0 == null) { mu0 = new ArrayRealVector(X.getD(), 0.0); } // initialize the means m = new RealVector[K]; N = new double[K]; double Nk = (double) X.getN() / (double) K; for (int k = 0; k < K; ++k) { m[k] = X.get(k).centroid; N[k] = Nk; } if (W0 == null) { W0 = MatrixUtils.createRealIdentityMatrix(X.getD()); W0 = W0.scalarMultiply(.01); } CholeskyDecomposition de = new CholeskyDecomposition(W0); W0inverse = de.getSolver().getInverse(); W0det = de.getDeterminant(); W = new RealMatrix[K]; detW = new double[K]; for (int k = 0; k < K; ++k) { W[k] = W0.copy(); detW[k] = de.getDeterminant(); } alpha = new double[K]; beta = new double[K]; lnLambdaTilde = new double[K]; nu = new double[K]; xBar = new RealVector[K]; for (int k = 0; k < K; ++k) { xBar[k] = new ArrayRealVector(X.getD()); nu[k] = nu0 + N[k]; } lnPi = new double[K]; lnPi(); /* for (k=0 ; k<K ; ++k){ lnPi[k] = Math.log(N[k]/X.getN()); } */ S = new RealMatrix[K]; for (int k = 0; k < K; ++k) { S[k] = new Array2DRowRealMatrix(X.getD(), X.getD()); } lnRho = new double[K]; a0 = new double[K]; for (int k = 0; k < K; ++k) { a0[k] = alpha0; } C0 = lnC(a0); alphaBetaNuLambda(); }