Измерения радиуса, безусловно, подвержены некоторой ошибке. Я ожидаю, что количество ошибок будет пропорционально самим радиусам. Давайте предположим, что измерения в противном случае беспристрастны. Разумное решение тогда использует взвешенную нелинейную аппроксимацию по методу наименьших квадратов с весами, обратно пропорциональными квадратам радиусов.
Это стандартный материал доступен в (среди прочего) Python, R
, Mathematica , и многие полнофункциональные статистические пакеты, так что я просто проиллюстрировать. Вот некоторые данные, полученные путем измерения расстояний с относительной погрешностью 10% до пяти точек произвольного доступа, расположенных вокруг устройства:
Mathematica требуется всего одна строка кода и не измеримое время процессора для вычисления соответствия:
fit = NonlinearModelFit[data, Norm[{x, y} - {x0, y0}], {x0, y0}, {x, y}, Weights -> 1/observations^2]
Редактировать--
Для больших радиусов более точные (сферические или эллипсоидальные) решения можно найти, просто заменив евклидово расстояние Norm[{x, y} - {x0, y0}]
на функцию для вычисления сферического или эллипсоидального расстояния. В Mathematica это можно сделать, например , с помощью
fit = NonlinearModelFit[data, GeoDistance[{x, y}, {x0, y0}], {x0, y0}, {x, y},
Weights -> 1/observations^2]
- конец редактирования
Одно из преимуществ использования статистического метода, подобного этому, заключается в том, что он может создавать доверительные интервалы для параметров (которые являются координатами устройства) и даже одновременный доверительный эллипс для местоположения устройства.
ellipsoid = fit["ParameterConfidenceRegion", ConfidenceLevel -> 0.95];
fit["ParameterConfidenceIntervalTable", ConfidenceLevel -> 0.95]
Поучительно представить данные и решение:
Graphics[{Opacity[0.2], EdgeForm[Opacity[0.75]], White, Disk[Most[#], Last[#]] & /@ data,
Opacity[1], Red, ellipsoid,
PointSize[0.0125], Blue, Point[source], Red, Point[solution],
PointSize[0.0083], White, Point @ points},
Background -> Black, ImageSize -> 600]
Белые точки - это (известные) точки доступа.
Большая синяя точка - это истинное местоположение устройства.
Серые кружки представляют измеренные радиусы. В идеале они все должны пересекаться в истинном местоположении устройства - но, очевидно, нет, из-за ошибки измерения.
Большая красная точка - приблизительное местоположение устройства.
Красный эллипс определяет 95% доверительную область для местоположения устройства.
Форма эллипса в этом случае представляет интерес: локальная неопределенность является наибольшей вдоль линии NW-SE. Здесь расстояния до трех точек доступа (до NE и SW) практически не меняются, и существует компромисс между ошибками между расстояниями до двух других точек доступа (к северу и юго-востоку).
(Более точная доверительная область может быть получена в некоторых системах в виде контура функции правдоподобия; этот эллипс является лишь приближением второго порядка к такому контуру.)
Когда радиусы измерены без ошибок, все окружности будут иметь хотя бы одну точку взаимного пересечения и - если эта точка является уникальной - это будет уникальное решение.
Этот метод работает с двумя или более точками доступа. Три или более необходимы для получения доверительных интервалов. Когда доступно только два, он находит одну из точек пересечения (если они существуют); в противном случае он выбирает подходящее место между двумя точками доступа.