Skip to content

Commit

Permalink
Organize App class
Browse files Browse the repository at this point in the history
  • Loading branch information
bxt committed May 21, 2015
1 parent 06752f7 commit 88c843d
Showing 1 changed file with 42 additions and 33 deletions.
75 changes: 42 additions & 33 deletions unilectures/src/bxt/unilectures/algogis/leastsquares/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import java.util.Locale;
import java.util.Scanner;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
Expand All @@ -11,42 +10,29 @@

public class App {

private static boolean USE_STDIN = false;

private static String EXAMPLE_INPUT = ""
+ "4\n"
+ "5\n"
+ "1 2 4.1 1\n"
+ "2 3 -7 1\n"
+ "3 4 1.1 1\n"
+ "4 1 1.2 1\n"
+ "4 2 5.4 1\n"
+ "\n"
+ "\n"
+ "\n"
;

public static void main(String[] args) {
String input = ""
+ "4\n"
+ "5\n"
+ "1 2 4.1 1\n"
+ "2 3 -7 1\n"
+ "3 4 1.1 1\n"
+ "4 1 1.2 1\n"
+ "4 2 5.4 1\n"
+ "\n"
+ "\n"
+ "\n"
;
Measurements m = scanMeasurements(new Scanner(input));
Scanner sc = USE_STDIN ? new Scanner(System.in) : new Scanner(EXAMPLE_INPUT);

LeastSquaresAdjustment l = m.getLeastSquaresAdjustment();
Measurements m = scanMeasurements(sc);

BiFunction<Integer, Matrix, String> printSqrtDiagonal = (n, x) ->
IntStream.range(0, n)
.mapToObj(i -> x.get(i, i))
.map(v -> Double.toString(Math.sqrt(v)))
.collect(Collectors.joining("\n"));
LeastSquaresAdjustment l = m.getLeastSquaresAdjustment();

Stream.of( "Least-squares estimates of heights:"
, Util.matrixToString(l.getUnknowns())

, "Corrected measurements:"
, Util.matrixToString(l.getTrueObservations())

, "Standard deviation of heights:"
, printSqrtDiagonal.apply(m.getPointsSize()-1, l.getUnknownVariance())

, "Standard deviation of measurements:"
, printSqrtDiagonal.apply(m.getMeasurementsSize(), l.getObservationVariance())

).forEachOrdered(System.out::println);
printResults(m, l);
}

private static Measurements scanMeasurements(Scanner scanner) {
Expand All @@ -67,4 +53,27 @@ private static Measurements scanMeasurements(Scanner scanner) {
return maseurements;
}

private static void printResults(Measurements m, LeastSquaresAdjustment l) {
Stream.of( "Least-squares estimates of heights:"
, Util.matrixToString(l.getUnknowns())

, "Corrected measurements:"
, Util.matrixToString(l.getTrueObservations())

, "Standard deviation of heights:"
, stringSqrtDiagonal(m.getPointsSize()-1, l.getUnknownVariance())

, "Standard deviation of measurements:"
, stringSqrtDiagonal(m.getMeasurementsSize(), l.getObservationVariance())

).forEachOrdered(System.out::println);
}

private static String stringSqrtDiagonal(int n, Matrix m) {
return IntStream.range(0, n)
.mapToObj(i -> m.get(i, i))
.map(v -> Double.toString(Math.sqrt(v)))
.collect(Collectors.joining("\n"));
}

}

0 comments on commit 88c843d

Please sign in to comment.