/** * Setter for initialProbability * * @param initialProbability Initial probability Vector over the states. Each entry must be * nonnegative and the Vector must sum to 1. */ public void setInitialProbability(Vector initialProbability) { final int k = initialProbability.getDimensionality(); double sum = 0.0; for (int i = 0; i < k; i++) { double value = initialProbability.getElement(i); if (value < 0.0) { throw new IllegalArgumentException("Initial Probabilities must be >= 0.0"); } sum += value; } if (sum != 1.0) { initialProbability.scaleEquals(1.0 / sum); } this.initialProbability = initialProbability; }
/** * Returns the steady-state distribution of the state distribution. This is also the largest * eigenvector of the transition-probability matrix, which has an eigenvalue of 1. * * @return Steady-state probability distribution of state distribution. */ public Vector getSteadyStateDistribution() { final double tolerance = 1e-5; final int maxIterations = 100; Vector p = EigenvectorPowerIteration.estimateEigenvector( this.initialProbability, this.transitionProbability, tolerance, maxIterations); // We do the manual sum (instead of norm1) in case the EVD found // the negative of the eigenvector. double sum = 0.0; for (int i = 0; i < p.getDimensionality(); i++) { sum += p.getElement(i); } p.scaleEquals(1.0 / sum); return p; }