5

이 질문은 "C++의 수치적인 요리법"과 관련이 있으므로이 주제에 대해 조금 아는 사람들에게도 알려줄 것입니다. 다차원 최적화.Numerical recipes/Multidimensional root search (newt 사용) : 최대 오차를 최소화하는 방법

다차원 루트를 검색해야하는 프로그램을 작성 중이며이를 해결하기 위해 다차원 뉴턴 루트 찾기 메서드 인 "newt" 절차를 사용하고 있습니다.

세부 사항에 관심이있는 사용자를 위해 몇 가지 특징 지점 (두 카메라에서 보이는 특징 지점)을 기반으로 변형 가능한 3D 모델을 물체의 강렬한보기에 맞추려고합니다. 이를 위해

, 나는 다음과 도롱뇽 절차를 사용하고 있습니다 :

  • (11) 입력 매개 변수 : 내 변형 모델은 5 개 기하학적 매개 변수 구성 11 개 매개 변수 (및 6 자유 deegres로 모델링 할 수있다 3D 객체 위치) :
  • 14 출력 매개 변수 카메라를 통해 식별되는 특징 점을 기반으로 "입력 매개 변수"에 설정된 값을 기반으로 루트를 찾아야합니다. 카메라가 본 특징점과 이론적 인 점 사이의 거리 양이온. 그 날 14 개 매개 변수를 제공하므로

내 문제는 내가 입력 매개 변수보다 더 많은 출력 매개 변수 (14) (가지고있다 (7 거리의 2 배를 내가 두 카메라의 거리를 계산하기 때문에) 나는 그 점 7가 11) : "newt"를 호출 할 때마다 알고리즘이 항상 수렴하지만 11 개의 첫 번째 출력 매개 변수를 거의 완벽하게 최소화하는 솔루션을 찾을 수 있지만 나머지 매개 변수에는 많은 오류가 있습니다.

그러나 오류를 출력 매개 변수간에 균등하게 나누고 싶습니다.

이미 접근 방법은 아래에서 설명하려고 :

  1. 한번에 11 매개 변수로 (14 개) 출력 매개 변수를 결합 ( 예를 들어, 일부 거리의 평균을 대신 모두 거리를 사용). 발견 된 루트
  2. 변경 다시 mnewt를 호출 14 출력 매개 변수
  3. 의 순서에게 전화 mnewt
    • 및 암기 그러나 나는 다음과 같은 원칙
    • 믹스 몇 가지 솔루션이 방법에 100 % 만족하지 않다 해결책은 두 가지 발견 뿌리의 평균 발견 된 루트
    • 계산을 기억

루트 검색 알고리즘이 첫 번째 매개 변수를 선호하는 대신 출력 매개 변수간에 균등하게 분배되는 오류를 선호하는보다 일반적인 접근법을 알고 있습니까?

+0

하나의 '거리 측정 항목'을 설정하지 마세요. 7 개의 모든 특징 점에 대한 거리의 제곱을 합한 다음 몇 가지 최적화 루틴을 실행합니다. Levenberg-Marquardt는 맞는 것 같습니다. –

+1

나는 그것을 이미 시도했지만 실패했다. NR 책의 다차원 최적화를 읽는다면, multidim root 검색을 최소한의 검색으로 바꾸고 (당신의 제안에 따라) 시도하는 것이 나쁜 아이디어라는 것을 알게 될 것입니다. 하나의 방향으로 평평한 영역의 로컬 미니 마와 * 로트 *를 갖는 함수를 최소화하십시오 (즉, 한 구성 요소에서 파생 된 값은 null입니다 : newton과 같은 메서드의 경우 악몽입니다). –

+0

그러나, newt에 의해 주어진 시작점. 어쩌면 잘못된 지역 최소값으로 수렴하는 경향이 줄어들 것입니다. –

답변

2

F(x)f(x)=0으로 최소화하여보십시오. 여기서 x은 m 차원 벡터이고 f은 이것을 n 차원 벡터에 매핑합니다.최적화 문제가 미만인 경우m < n (귀하의 경우 11 < 14)입니다.

이러한 시스템의 경우 일반적인 문제 해결 방법은 벡터 x으로 최소화하는 것입니다. xLagrange-multiplierc에 대해 시스템 x^T A x + c f(x)^T f(x)을 최소화하여이 작업을 수행 할 수 있습니다. 더 자세한 정보가 없으면 A를 nxn 항등 매트릭스이 될 수 있습니다. 그러면 가장 작은 표준을 가지고 f(x)=0을 해결하는 x을 찾을 수 있습니다.

뉴턴의 방법으로이를 수행하는 방법에 대한 자세한 내용은 예 : 이 paper.

+0

와우, 좋은 답변, 고마워! –