Example usage for org.apache.commons.math3.linear CholeskyDecomposition getSolver

List of usage examples for org.apache.commons.math3.linear CholeskyDecomposition getSolver

Introduction

In this page you can find the example usage for org.apache.commons.math3.linear CholeskyDecomposition getSolver.

Prototype

public DecompositionSolver getSolver() 

Source Link

Document

Get a solver for finding the A × X = B solution in least square sense.

Usage

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