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일 필요는 없겠다.
추가
measurement vector만 NULL로 넣어주면 된다고 하지만, n := 0으로 넣으면 # unknown params > # measurements라 계산할 수 없다고 나온다.
n := m으로 넣고 hx[0]만 계산하고 나머지 hx들은 0으로 채우면 된다.