이 질문은 "C++의 수치적인 요리법"과 관련이 있으므로이 주제에 대해 조금 아는 사람들에게도 알려줄 것입니다. 다차원 최적화.Numerical recipes/Multidimensional root search (newt 사용) : 최대 오차를 최소화하는 방법
다차원 루트를 검색해야하는 프로그램을 작성 중이며이를 해결하기 위해 다차원 뉴턴 루트 찾기 메서드 인 "newt" 절차를 사용하고 있습니다.
세부 사항에 관심이있는 사용자를 위해 몇 가지 특징 지점 (두 카메라에서 보이는 특징 지점)을 기반으로 변형 가능한 3D 모델을 물체의 강렬한보기에 맞추려고합니다. 이를 위해
, 나는 다음과 도롱뇽 절차를 사용하고 있습니다 :- (11) 입력 매개 변수 : 내 변형 모델은 5 개 기하학적 매개 변수 구성 11 개 매개 변수 (및 6 자유 deegres로 모델링 할 수있다 3D 객체 위치) :
- 14 출력 매개 변수 카메라를 통해 식별되는 특징 점을 기반으로 "입력 매개 변수"에 설정된 값을 기반으로 루트를 찾아야합니다. 카메라가 본 특징점과 이론적 인 점 사이의 거리 양이온. 그 날 14 개 매개 변수를 제공하므로
내 문제는 내가 입력 매개 변수보다 더 많은 출력 매개 변수 (14) (가지고있다 (7 거리의 2 배를 내가 두 카메라의 거리를 계산하기 때문에) 나는 그 점 7가 11) : "newt"를 호출 할 때마다 알고리즘이 항상 수렴하지만 11 개의 첫 번째 출력 매개 변수를 거의 완벽하게 최소화하는 솔루션을 찾을 수 있지만 나머지 매개 변수에는 많은 오류가 있습니다.
그러나 오류를 출력 매개 변수간에 균등하게 나누고 싶습니다.
이미 접근 방법은 아래에서 설명하려고 :
- 한번에 11 매개 변수로 (14 개) 출력 매개 변수를 결합 ( 예를 들어, 일부 거리의 평균을 대신 모두 거리를 사용). 발견 된 루트
- 변경 다시 mnewt를 호출 14 출력 매개 변수
- 의 순서에게 전화 mnewt
- 및 암기 그러나 나는 다음과 같은 원칙
- 믹스 몇 가지 솔루션이 방법에 100 % 만족하지 않다 해결책은 두 가지 발견 뿌리의 평균 발견 된 루트
- 계산을 기억
루트 검색 알고리즘이 첫 번째 매개 변수를 선호하는 대신 출력 매개 변수간에 균등하게 분배되는 오류를 선호하는보다 일반적인 접근법을 알고 있습니까?
하나의 '거리 측정 항목'을 설정하지 마세요. 7 개의 모든 특징 점에 대한 거리의 제곱을 합한 다음 몇 가지 최적화 루틴을 실행합니다. Levenberg-Marquardt는 맞는 것 같습니다. –
나는 그것을 이미 시도했지만 실패했다. NR 책의 다차원 최적화를 읽는다면, multidim root 검색을 최소한의 검색으로 바꾸고 (당신의 제안에 따라) 시도하는 것이 나쁜 아이디어라는 것을 알게 될 것입니다. 하나의 방향으로 평평한 영역의 로컬 미니 마와 * 로트 *를 갖는 함수를 최소화하십시오 (즉, 한 구성 요소에서 파생 된 값은 null입니다 : newton과 같은 메서드의 경우 악몽입니다). –
그러나, newt에 의해 주어진 시작점. 어쩌면 잘못된 지역 최소값으로 수렴하는 경향이 줄어들 것입니다. –