comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/Fitting.java @ 7300:83bb52fa0c32

(issue1529) Be more tolerant in the fitting. The invalid value warning is removed because invalid data is expected there when datapoints are not valid for this KM
author Andre Heinecke <aheinecke@intevation.de>
date Fri, 11 Oct 2013 18:40:33 +0200
parents 08e3c22500f3
children a3f318347707 0a5239a1e46e
comparison
equal deleted inserted replaced
7299:cde863b2dae3 7300:83bb52fa0c32
146 for (int i = 0; i < qs.length; ++i) { 146 for (int i = 0; i < qs.length; ++i) {
147 if (!Double.isNaN(qs[i]) && !Double.isNaN(ws[i])) { 147 if (!Double.isNaN(qs[i]) && !Double.isNaN(ws[i])) {
148 xs.add(qs[i]); 148 xs.add(qs[i]);
149 ys.add(ws[i]); 149 ys.add(ws[i]);
150 } 150 }
151 else {
152 log.warn("remove invalid value " + qs[i] + " " + ws[i]);
153 }
154 } 151 }
155 152
156 if (xs.size() < 2) { 153 if (xs.size() < 2) {
157 log.warn("Too less points."); 154 log.warn("Too less points.");
158 return false; 155 return false;
164 161
165 LevenbergMarquardtOptimizer lmo = null; 162 LevenbergMarquardtOptimizer lmo = null;
166 163
167 for (;;) { 164 for (;;) {
168 parameters = null; 165 parameters = null;
169 for (double tolerance = 1e-10; tolerance < 1e-3; tolerance *= 10d) { 166 for (double tolerance = 1e-10; tolerance < 1e-1; tolerance *= 10d) {
170 167
171 lmo = new LevenbergMarquardtOptimizer(); 168 lmo = new LevenbergMarquardtOptimizer();
172 lmo.setCostRelativeTolerance(tolerance); 169 lmo.setCostRelativeTolerance(tolerance);
173 lmo.setOrthoTolerance(tolerance); 170 lmo.setOrthoTolerance(tolerance);
174 lmo.setParRelativeTolerance(tolerance); 171 lmo.setParRelativeTolerance(tolerance);
188 log.debug("tolerance " + tolerance + " + failed."); 185 log.debug("tolerance " + tolerance + " + failed.");
189 } 186 }
190 } 187 }
191 } 188 }
192 if (parameters == null) { 189 if (parameters == null) {
190 /*
191 log.debug("Parameters is null");
192 for (int i = 0, N = xs.size(); i < N; ++i) {
193 log.debug("DATA: " + xs.getQuick(i) + " " + ys.getQuick(i));
194 }*/
193 return false; 195 return false;
194 } 196 }
195 197
196 // This is the paraterized function for a given km. 198 // This is the paraterized function for a given km.
197 instance = function.instantiate(parameters); 199 instance = function.instantiate(parameters);

http://dive4elements.wald.intevation.org