Hier ist eine Open-Source-Java-Bibliothek, die die Trilateration / Multilateration durchführt:
https://github.com/lemmingapex/Trilateration
Es verwendet einen beliebten nichtlinearen Optimierer für kleinste Quadrate, den Levenberg-Marquardt-Algorithmus von Apache Commons Math.
double[][] positions = new double[][] { { 5.0, -6.0 }, { 13.0, -15.0 }, { 21.0, -3.0 }, { 12.42, -21.2 } };
double[] distances = new double[] { 8.06, 13.97, 23.32, 15.31 };
NonLinearLeastSquaresSolver solver = new NonLinearLeastSquaresSolver(new TrilaterationFunction(positions, distances), new LevenbergMarquardtOptimizer());
Optimum optimum = solver.solve();
// the answer
double[] calculatedPosition = optimum.getPoint().toArray();
// error and geometry information
RealVector standardDeviation = optimum.getSigma(0);
RealMatrix covarianceMatrix = optimum.getCovariances(0);
Die meisten wissenschaftlichen Beispiele, wie das auf Wikipedia , behandeln genau drei Kreise und setzen vollkommen genaue Informationen voraus. Diese Umstände ermöglichen viel einfachere Problemformulierungen mit genauen Antworten und sind für praktische Situationen normalerweise nicht zufriedenstellend.
Das Problem im euklidischen Raum R 2 oder R 3 mit Abständen, die Messfehler, eine Fläche (Ellipse) oder ein Volumen (Ellipsoid) von Interesse enthalten, wird normalerweise anstelle eines Punktes erhalten. Wenn anstelle einer Region eine Punktschätzung gewünscht wird, sollte der Flächen- oder Volumenschwerpunkt verwendet werden. Der R 2 -Raum erfordert mindestens 3 nicht entartete Punkte und Abstände, um eine eindeutige Region zu erhalten. und in ähnlicher Weise erfordert der R 3 -Raum mindestens 4 nicht entartete Punkte und Abstände, um eine eindeutige Region zu erhalten.