As medições de raio certamente estão sujeitas a algum erro. Eu esperaria que a quantidade de erro fosse proporcional aos próprios raios. Vamos supor que as medidas sejam imparciais. Uma solução razoável usa o ajuste de mínimos quadrados não lineares ponderados , com pesos inversamente proporcionais aos raios quadrados.
Este é material padrão disponível em (entre outras coisas) Python, R
, Mathematica , e muitos pacotes estatísticos full-featured, por isso vou apenas ilustrá-la. Aqui estão alguns dados obtidos pela medição das distâncias, com erro relativo de 10%, a cinco pontos de acesso aleatório em torno da localização do dispositivo:
O Mathematica precisa de apenas uma linha de código e sem tempo de CPU mensurável para calcular o ajuste:
fit = NonlinearModelFit[data, Norm[{x, y} - {x0, y0}], {x0, y0}, {x, y}, Weights -> 1/observations^2]
Editar--
Para raios grandes, soluções mais precisas (esféricas ou elipsoidais) podem ser encontradas apenas substituindo a distância euclidiana Norm[{x, y} - {x0, y0}]
por uma função para calcular a distância esférica ou elipsoidal. No Mathematica, isso pode ser feito, por exemplo , via
fit = NonlinearModelFit[data, GeoDistance[{x, y}, {x0, y0}], {x0, y0}, {x, y},
Weights -> 1/observations^2]
- fim de edição
Uma vantagem de usar uma técnica estatística como essa é que ela pode produzir intervalos de confiança para os parâmetros (que são as coordenadas do dispositivo) e até uma elipse de confiança simultânea para a localização do dispositivo.
ellipsoid = fit["ParameterConfidenceRegion", ConfidenceLevel -> 0.95];
fit["ParameterConfidenceIntervalTable", ConfidenceLevel -> 0.95]
É instrutivo plotar os dados e a solução:
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]
Os pontos brancos são os locais (conhecidos) dos pontos de acesso.
O grande ponto azul é o verdadeiro local do dispositivo.
Os círculos cinza representam os raios medidos. Idealmente, todos eles se cruzariam no local real do dispositivo - mas obviamente não, devido a erro de medição.
O ponto vermelho grande é a localização estimada do dispositivo.
A elipse vermelha demarca uma região de confiança de 95% para a localização do dispositivo.
A forma da elipse neste caso é de interesse: a incerteza locacional é maior ao longo de uma linha NW-SE. Aqui, as distâncias para três pontos de acesso (para o NE e SW) mal mudam e há uma troca de erros entre as distâncias para os outros dois pontos de acesso (para o norte e sudeste).
(Uma região de confiança mais precisa pode ser obtida em alguns sistemas como contorno de uma função de probabilidade; essa elipse é apenas uma aproximação de segunda ordem a esse contorno.)
Quando os raios são medidos sem erro, todos os círculos terão pelo menos um ponto de interseção mútua e - se esse ponto for único - será a solução única.
Este método funciona com dois ou mais pontos de acesso. São necessários três ou mais para obter intervalos de confiança. Quando apenas dois estão disponíveis, ele encontra um dos pontos de interseção (se existirem); caso contrário, ele seleciona um local apropriado entre os dois pontos de acesso.