Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/StdDevOutlier.java @ 4813:bf2fd9c58ac4
Fixed MINFO SQ calculation.
* Fixed calculation of sieve 8.
* Fixed calculation of 'Geschiebetransport'.
* Fixed calculation of fractions (Sand, gravel, coarse).
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Sun, 20 Jan 2013 15:02:19 +0100 |
parents | a7d080347ac3 |
children | 8ee270a3ef25 |
line wrap: on
line source
package de.intevation.flys.artifacts.math; import java.util.List; import org.apache.commons.math.MathException; import org.apache.commons.math.distribution.TDistributionImpl; import org.apache.commons.math.stat.descriptive.moment.Mean; import org.apache.commons.math.stat.descriptive.moment.StandardDeviation; import org.apache.log4j.Logger; import de.intevation.flys.artifacts.model.sq.SQ; public class StdDevOutlier { public static final double EPSILON = 1e-5; public static final double DEFAULT_FACTOR = 3; private static Logger log = Logger.getLogger(StdDevOutlier.class); protected StdDevOutlier() { } public static Integer findOutlier(List<Double> values) { return findOutlier(values, DEFAULT_FACTOR, null); } public static Integer findOutlier(List<Double> values, double factor, double[] stdDevResult) { boolean debug = log.isDebugEnabled(); if (debug) { log.debug("factor for std dev: " + factor); } int N = values.size(); if (debug) { log.debug("Values to check: " + N); } if (values.size() < 3) { return null; } StandardDeviation stdDev = new StandardDeviation(); double maxValue = -Double.MAX_VALUE; int maxIndex = -1; int ndx = 0; for (int i = values.size()-1; i >= 0; --i) { double value = Math.abs(values.get(i)); stdDev.increment(value); if (value > maxValue) { maxValue = value; maxIndex = ndx; } ++ndx; } double sd = stdDev.getResult(); double accepted = factor * sd; if (debug) { log.debug("std dev: " + stdDev); log.debug("accepted: " + accepted); log.debug("max value: " + maxValue); } if (stdDevResult != null) { stdDevResult[0] = sd; } return maxValue > accepted ? maxIndex : null; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :