Ось бібліотека Java з відкритим кодом, яка буде виконувати трилатерацію / багатосторонність:
https://github.com/lemmingapex/Trilateration
Він використовує популярний нелінійний оптимізатор найменших квадратів, алгоритм Левенберга-Марквардта, від 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);
Більшість наукових прикладів, наприклад, у вікіпедії , стосуються саме трьох кіл і припускають абсолютно точну інформацію. Ці обставини дозволяють набагато простіше формулювати проблеми з точними відповідями, і, як правило, не задовільні для практичних ситуацій.
Зазвичай в евклідовому просторі R 2 або R 3 з відстанями, що містять похибку вимірювання, площу (еліпс) або об’єм (еліпсоїд), що цікавить, зазвичай отримують замість точки. Якщо замість області бажана оцінка точки, слід використовувати центроїд площі або центроїд об’єму. Простір R 2 вимагає принаймні 3 невироджених точок та відстаней для отримання унікальної області; і аналогічно космос R 3 вимагає принаймні 4 невироджених точок та відстаней для отримання унікальної області.