List of usage examples for org.apache.commons.math.linear ArrayRealVector ArrayRealVector
public ArrayRealVector(double[] v1, double[] v2)
From source file:eu.amidst.core.exponentialfamily.EF_Normal_NormalParents2.java
/** * {@inheritDoc}//www .j a v a 2 s. co m */ @Override public void updateNaturalFromMomentParameters() { /* * First step: means and convariances */ CompoundVector globalMomentParam = (CompoundVector) this.momentParameters; double mean_X = globalMomentParam.getXYbaseMatrix().getEntry(0); RealVector mean_Y = globalMomentParam.getTheta_beta0BetaRV(); double cov_XX = globalMomentParam.getcovbaseMatrix().getEntry(0, 0) - mean_X * mean_X; RealMatrix cov_YY = globalMomentParam.getcovbaseMatrix().getSubMatrix(1, nOfParents, 1, nOfParents) .subtract(mean_Y.outerProduct(mean_Y)); RealVector cov_XY = globalMomentParam.getcovbaseMatrix().getSubMatrix(0, 0, 1, nOfParents).getRowVector(0) .subtract(mean_Y.mapMultiply(mean_X)); //RealVector cov_YX = cov_XY; //outerProduct transposes the vector automatically /* * Second step: betas and variance */ RealMatrix cov_YYInverse = new LUDecompositionImpl(cov_YY).getSolver().getInverse(); RealVector beta = cov_YYInverse.preMultiply(cov_XY); double beta_0 = mean_X - beta.dotProduct(mean_Y); double variance = cov_XX - beta.dotProduct(cov_XY); /* * Third step: natural parameters (5 in total) */ /* * 1) theta_0 */ double theta_0 = beta_0 / variance; double[] theta_0array = { theta_0 }; /* * 2) theta_0Theta */ double variance2Inv = 1.0 / (2 * variance); RealVector theta_0Theta = beta.mapMultiply(-beta_0 / variance); ((CompoundVector) this.naturalParameters) .setXYbaseVector(new ArrayRealVector(theta_0array, theta_0Theta.getData())); /* * 3) theta_Minus1 */ double theta_Minus1 = -variance2Inv; /* * 4) theta_beta */ RealVector theta_beta = beta.mapMultiply(variance2Inv); /* * 5) theta_betaBeta */ RealMatrix theta_betaBeta = beta.outerProduct(beta).scalarMultiply(-variance2Inv * 2); /* * Store natural parameters */ RealMatrix natural_XY = new Array2DRowRealMatrix(nOfParents + 1, nOfParents + 1); double[] theta_Minus1array = { theta_Minus1 }; RealVector covXY = new ArrayRealVector(theta_Minus1array, theta_beta.getData()); natural_XY.setColumnVector(0, covXY); natural_XY.setRowVector(0, covXY); natural_XY.setSubMatrix(theta_betaBeta.getData(), 1, 1); ((CompoundVector) this.naturalParameters).setcovbaseVector(natural_XY); }
From source file:eu.amidst.core.exponentialfamily.EF_Normal_NormalParents.java
/** * {@inheritDoc}/*from w w w .j a v a 2 s. com*/ */ @Override public SufficientStatistics getSufficientStatistics(Assignment data) { CompoundVector vectorSS = this.createEmtpyCompoundVector(); double[] Xarray = { data.getValue(this.var) }; double[] Yarray = this.parents.stream().mapToDouble(w -> data.getValue(w)).toArray(); RealVector XYRealVector = new ArrayRealVector(Xarray, Yarray); vectorSS.setXYbaseVector(XYRealVector); RealMatrix covRealmatrix = XYRealVector.outerProduct(XYRealVector); vectorSS.setcovbaseVector(covRealmatrix); return vectorSS; }
From source file:eu.amidst.core.exponentialfamily.EF_Normal_NormalParents.java
/** * {@inheritDoc}/*from w w w . j a v a2s . c o m*/ */ @Override public SufficientStatistics createInitSufficientStatistics() { CompoundVector vectorSS = this.createEmtpyCompoundVector(); double[] Xarray = { 0.0 }; double[] Yarray = this.parents.stream().mapToDouble(w -> 0.0).toArray(); RealVector XYRealVector = new ArrayRealVector(Xarray, Yarray); vectorSS.setXYbaseVector(XYRealVector); RealMatrix covRealmatrix = new Array2DRowRealMatrix(Yarray.length + 1, Yarray.length + 1); //We perform the "laplace" correction in that way to break symmetric covariance matrixes. Random rand = new Random(0); for (int i = 0; i < Yarray.length + 1; i++) { for (int j = 0; j < Yarray.length + 1; j++) { covRealmatrix.addToEntry(i, j, rand.nextDouble() + 0.01); } } //covRealmatrix = covRealmatrix.scalarAdd(1.0); vectorSS.setcovbaseVector(covRealmatrix); return vectorSS; }
From source file:org.deegree.geometry.linearization.CurveLinearizer.java
private double[] solveLinearEquation(double[][] matrixA, double[] vectorb) { RealMatrix coefficients = new Array2DRowRealMatrix(matrixA, false); // LU-decomposition DecompositionSolver solver = new LUDecompositionImpl(coefficients).getSolver(); RealVector constants = new ArrayRealVector(vectorb, false); RealVector solution = null;// w w w.j av a2 s . com try { solution = solver.solve(constants); } catch (SingularMatrixException e) { LOG.error(e.getLocalizedMessage()); e.printStackTrace(); } return solution.getData(); }