annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/LogLinearFittingOperation.java @ 9646:0380717105ba

Implemented alternative fitting strategy for Log-Linear function.
author Gernot Belger <g.belger@bjoernsen.de>
date Mon, 02 Dec 2019 17:56:15 +0100
parents
children
rev   line source
9646
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
2 * Software engineering by
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
5 *
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
9 */
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
10 package org.dive4elements.river.artifacts.model.fixings;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
11
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
12 import java.util.List;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
13
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
14 import org.dive4elements.river.artifacts.math.fitting.LogLinearAlternative;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
15 import org.dive4elements.river.artifacts.model.fixings.fitting.LinearLogLinearizedFitting;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
16 import org.dive4elements.river.artifacts.model.fixings.fitting.LinearLogLinearizedFitting.Result;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
17
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
18 /**
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
19 * @author Gernot Belger
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
20 */
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
21 final class LogLinearFittingOperation extends AbstractFittingOperation implements IFittingOperation {
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
22
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
23 public LogLinearFittingOperation(final LogLinearAlternative function) {
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
24 super(function);
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
25 }
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
26
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
27 @Override
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
28 public Fitting execute(final List<FittingData> data) {
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
29
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
30 final double[] obsDischarges = new double[data.size()];
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
31 final double[] obsWaterlevels = new double[data.size()];
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
32
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
33 for (int i = 0; i < data.size(); i++) {
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
34 final FittingData fittingData = data.get(i);
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
35
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
36 obsDischarges[i] = fittingData.q;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
37 obsWaterlevels[i] = fittingData.w;
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
38 }
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
39
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
40 final LinearLogLinearizedFitting fitting = new LinearLogLinearizedFitting(obsDischarges, obsWaterlevels);
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
41
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
42 final Result result = fitting.optimize();
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
43 final double a = result.getA();
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
44 final double b = result.getB();
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
45 final double m = result.getM();
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
46 final double chiSquare = result.getChiSquare();
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
47
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
48 final double[] parameters = new double[] { a, m, b };
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
49
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
50 return createFitting(parameters, chiSquare, data);
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
51 }
0380717105ba Implemented alternative fitting strategy for Log-Linear function.
Gernot Belger <g.belger@bjoernsen.de>
parents:
diff changeset
52 }

http://dive4elements.wald.intevation.org