상세 컨텐츠

본문 제목

levmar에서 Jacobian 문제

학술

by 양고 2009. 12. 30. 17:37

본문


(Jacobian, F : RnRm, from wikipedia)

Levmar에서 Jacobian 사용 가능성 검토.

# parameters = m

# measurements = n
(위의 J와는 m,n이 반대인 듯)

void (*jacf)(double *p, double *j, int m, int n, void *adata) 함수는 j (n×m) 을 계산해서 채워야 함.

 

Levmar의 예제 rosenbrock ros()에서는 모든 measurements x에 대해 똑같은 값을 리턴하고 있다.

Jacobian jac()에서는 jac[0,2], jac[1,3]이 각각 같은 값으로 채워짐.
 
(Rosenbrock function, from wikipedia)

 

[오늘의 해결책]

Measurements를 무시하면 된다.

cost function 값 자체를 measurement로 취급하면 됨 (n=1).

Jacobian m×1로, derivative 값을 채워주면 될 것임.

이로써 levmar에 대한 좀 더 직접적인 컨트롤이 가능.

지난 번 고민했던 weighted least squares 문제도 해결 가능!!

물론 실험은 안 해 봤다. ㅜㅠ


dlevmar_der() 주석에는 다음과 같이 analytic Jacobian이 필요한 것처럼 기술돼 있지만, 간단하게 evaluation할 수 있다면 꼭 analytic일 필요는 없겠다.

An analytic Jacobian is required. In case the latter is unavailable or expensive to compute, use dlevmar_dif() below.


추가
measurement vector만 NULL로 넣어주면 된다고 하지만, n := 0으로 넣으면 # unknown params > # measurements라 계산할 수 없다고 나온다.
n := m으로 넣고 hx[0]만 계산하고 나머지 hx들은 0으로 채우면 된다.

관련글 더보기