diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/Fitting.java @ 3565:b136113dad53

FixA: Only evict only one(!) data point as outlier before recalculating the function. flys-artifacts/trunk@5163 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 31 Jul 2012 16:46:36 +0000
parents 1b9f791937c3
children e727e3ebdf85
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/Fitting.java	Tue Jul 31 16:14:17 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/Fitting.java	Tue Jul 31 16:46:36 2012 +0000
@@ -1,8 +1,5 @@
 package de.intevation.flys.artifacts.model.fixings;
 
-import de.intevation.flys.artifacts.math.Outlier.IndexedValue;
-import de.intevation.flys.artifacts.math.Outlier.Outliers;
-
 import de.intevation.flys.artifacts.math.Outlier;
 
 import de.intevation.flys.artifacts.math.fitting.Function;
@@ -157,7 +154,7 @@
             return false;
         }
 
-        List<IndexedValue> inputs = new ArrayList<IndexedValue>(xs.size());
+        List<Double> inputs = new ArrayList<Double>(xs.size());
 
         de.intevation.flys.artifacts.math.Function instance = null;
 
@@ -204,27 +201,23 @@
             for (int i = 0, N = xs.size(); i < N; ++i) {
                 double y = instance.value(xs.getQuick(i));
                 if (Double.isNaN(y)) {
-                    continue;
+                    y = Double.MAX_VALUE;
                 }
-                inputs.add(new IndexedValue(i, ys.getQuick(i) - y));
+                inputs.add(Double.valueOf(ys.getQuick(i) - y));
             }
 
-            Outliers outliers = Outlier.findOutliers(inputs);
+            Integer outlier = Outlier.findOutlier(inputs);
 
-            if (!outliers.hasOutliers()) {
+            if (outlier == null) {
                 break;
             }
 
-            List<IndexedValue> rem = outliers.getRemoved();
-
-            for (int i = rem.size()-1; i >= 0; --i) {
-                int idx = rem.get(i).getIndex();
-                removed.add(
-                    qwdFactory.create(
-                        xs.getQuick(idx), ys.getQuick(idx)));
-                xs.remove(idx);
-                ys.remove(idx);
-            }
+            int idx = outlier.intValue();
+            removed.add(
+                qwdFactory.create(
+                    xs.getQuick(idx), ys.getQuick(idx)));
+            xs.remove(idx);
+            ys.remove(idx);
         }
 
         StandardDeviation stdDev = new StandardDeviation();

http://dive4elements.wald.intevation.org