n 개의 포인트에 대한 평가 알고리즘


27

원 T1, T2, T3, T4, T5, .., Tn 이 중심에서 선 R의 길이와 교차하는 그림에서 중심 A (일명 중력 중심, 기하학적 중심, 질량 중심)를 계산할 수있는 알고리즘을 찾아야합니다 . 언급 된 그림의 가장 먼 구석

다음과 같은 정보가 제공됩니다.

  • T1 위도 = 56.999883 경도 = 24.144473 반경 = 943
  • T2 위도 = 57.005352 경도 = 24.151168 반경 = 857
  • T3 위도 = 57.005352 경도 = 24.163356 반경 = 714
  • T4 위도 = 56.999042 경도 = 24.168506 반경 = 714
  • T5 위도 = 56.994226 경도 = 24.15709 반경 = 771

결과는 다음과 같아야합니다. 위도 = XX.XXXXXXX 경도 = XX.XXXXXXX 반경 = XX

여기에 이미지 설명을 입력하십시오

이미 알아 낸 것처럼 액세스 포인트 또는 기지국 수가 변경 될 수 있으므로 가장 가까운 Wifi 액세스 포인트 또는 모바일 기지국으로 장치 위치를 찾을 수있는 소프트웨어를 개발 중입니다. 불확실한 양의 포인트에 적응할 수있는 알고리즘이 필요합니다 .

여기여기에 비슷한 질문이 있지만 그 중 어느 것도 내 질문에 정확히 대답하지 않습니다.


어떤 언어로 작업하고 있습니까?
WolfOdrade

대부분 PHP, 약간의 JavaScript. 나는 이것을 전에 언급해야한다고 생각하지만 나는 웹 개발자이며 Whuber의 대답을 이해하려면 수학자를 찾아야합니다.
Kārlis Baumanis

반지름은 상대 신호 강도에서 파생됩니까?
커크 Kuykendall

예! 사실 반경은 dBm의에
카를리스 바우 마니 스

1
@Reddox, 부분적으로-서버 측에서 수학을 사용하여 php_exec ()로 계산했습니다.
Kārlis Baumanis

답변:


29

반지름 측정에는 약간의 오차가있을 수 있습니다. 나는 오차의 양이 반지름 자체에 비례 할 것으로 기대합니다. 측정 값이 편향되지 않은 것으로 가정하자. 그런 다음 합리적인 솔루션은 가중 비선형 최소 제곱 피팅을 사용하고 가중치는 제곱 반지름에 반비례합니다.

이것은 Python R,, Mathematica 및 많은 기능을 갖춘 통계 패키지 에서 사용할 수있는 표준 항목 이므로 간단히 설명하겠습니다. 다음은 장치 위치를 둘러싼 5 개의 임의 액세스 포인트까지의 거리를 상대 오차 10 %로 측정하여 얻은 일부 데이터입니다.

데이터 테이블

Mathematica 는 한 줄의 코드 만 있으면되고 적합도를 계산하는 데 CPU 시간이 필요하지 않습니다.

fit = NonlinearModelFit[data, Norm[{x, y} - {x0, y0}], {x0, y0}, {x, y}, Weights -> 1/observations^2]

편집하다--

큰 반지름의 Norm[{x, y} - {x0, y0}]경우 구면 또는 타원체 거리를 계산하는 함수로 유클리드 거리 를 바꾸면 더 정확한 (구형 또는 타원체) 솔루션을 찾을 수 있습니다 . 에 티카 이 작업을 수행 할 수있는, 예를 들어 ,를 통해

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까지의 3 개의 액세스 포인트까지의 거리는 거의 변하지 않으며, 2 개의 다른 액세스 포인트 (북쪽 및 남동쪽으로)까지의 거리 사이에서 오류가 발생합니다.

(일부 시스템에서는 가능성 함수의 윤곽으로 더 정확한 신뢰 영역을 얻을 수 있습니다.이 타원은 그러한 윤곽에 대한 2 차 근사치 일뿐입니다.)

반지름이 오류없이 측정되면 모든 원은 적어도 하나의 상호 교차 지점을 가지며 해당 지점이 고유 한 경우 고유 한 솔루션이됩니다.

이 방법은 둘 이상의 액세스 포인트에서 작동합니다. 신뢰 구간을 얻으려면 3 개 이상이 필요합니다. 두 개만 사용할 수있는 경우 교차 지점 중 하나를 찾습니다 (존재하는 경우). 그렇지 않으면 두 액세스 포인트 사이의 적절한 위치를 선택합니다.


3
잘 했어 빌!

1
@Reddox 원칙적으로 그렇습니다. 모든 튜링 완료 언어는 문자 그대로 모든 계산을 수행 할 수 있습니다. 그러나 PHP는 대상 언어로서의 선택 목록을 무너 뜨릴 것입니다. 심지어 는 PHP 매뉴얼 만큼 인정 : "당신이 PHP를 잘 이해하고 클라이언트 측에 PHP의 고급 기능을 사용하고자하는 경우 PHP 아마 그래픽 사용자 인터페이스와 데스크톱 응용 프로그램을 만들 수있는 최고의 언어는 아닐 것이지만, PHP-GTK를 사용하여 이러한 프로그램을 작성할 수도 있습니다. "
whuber

1
@Reddox 링크 주셔서 감사합니다. 지오메트리 계산을 제공하는 방법을 봅니다. 이 상황에서 그것들은 실제로 필요하지 않습니다. 유일한 계산은 피타고라스 정리를 적용하여 거리를 제곱근 ( Norm내 코드에서 호출)으로 거리를 얻습니다 . 모든 작업은 가중 비선형 최소 제곱 피팅과 관련이 있지만 GEOS 라이브러리가 그러한 기능을 제공한다고 생각하지 않습니다. 정확한 타원형 거리가 필요할 때 GEOS가 도움이 될 수 있습니다.
whuber

2
@BenR을 올바르게 읽으면 데이터에 반비례 하지 않고 제곱 반지름에 비례하여 데이터에 가중치를 부여하는 것 같습니다 . 당신이하면 어떻게됩니까 분할 에 의해 square(data[2])그것을 곱 대신?
whuber


1

이 경우 모든 원이 다른 모든 원과 교차하므로 다음과 같이 교차점을 결정할 수 있습니다.

먼저 모든 n * (n-1) 교차점을 결정하십시오. 이 교차점 세트 I을 호출하십시오 . 가장 안쪽 점이 포함 된 점 T 의 목록을 가져옵니다 . 그런 다음 I의 각 점 p 에 대해 p 가 모든 원 안에 있는지 확인하십시오 . p 가 모든 원 안에 있으면 이것은 가장 안쪽 교차점의 점입니다. 이러한 점을 목록 T에 추가하십시오 .

이제 원하는 교차 좌표가 있습니다. 위치를 예측하는 적어도 두 가지 방법을 생각할 수 있습니다.

  1. T로 형성된 다각형의 중심 (무게로 사용 거리?)을 계산하기 만하면 중심이 원하는 위치입니다.
  2. T의 모든 점을 포함하는 최소 원을 계산합니다 . 그런 다음이 원의 중심이 원하는 위치입니다. 이 후 R 계산 은 간단해야합니다.

또 다른 참고 사항 : 먼저 여유 공간 경로 모델 (또는 변형)을 사용하여 신호 강도를 거리로 변환하십시오. 내 취지는 : 훈련 데이터 세트가 있으면 고정 값으로 n = 2 또는 n = 2.2를 사용하는 대신 몇 가지 학습 기술을 사용하여 경로 손실 지수를 찾아야합니다.


T ... "가장 안쪽 점"이란 무엇입니까? 5 개의 노드가있는 경우 몇 개의 "가장 안쪽 점"을 확인해야합니까?
ewizard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.