RcdMathLib_doc
Open Source Library for Linear and Non-linear Algebra
loc_levenberg_marquardt.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2020 Zakaria Kasmi <zkasmi@inf.fu-berlin.de>
3  * 2020 Freie Universität Berlin
4  *
5  * This file is subject to the terms and conditions of the GNU Lesser General
6  * Public License v2.1. See the file LICENSE in the top level directory for more
7  * details.
8  */
9 
24 #ifndef LOC_LEVENBERG_MARQUARDT_H_
25 #define LOC_LEVENBERG_MARQUARDT_H_
26 
27 #include <inttypes.h>
28 
29 #include "matrix.h"
30 
56 uint8_t loc_levenberg_marquardt(uint8_t ref_points_num,
57  matrix_t ref_points_matrix[ref_points_num][3],
58  matrix_t start_pos[3],
59  matrix_t measured_data_vec[ref_points_num],
60  matrix_t eps, matrix_t tau, matrix_t beta0,
61  matrix_t beta1, uint8_t max_iter_num,
62  matrix_t est_pos[3],
63  void (*f_i)(uint8_t ref_points_num,
64  matrix_t ref_point_mat[ref_points_num][3],
65  matrix_t point[3], matrix_t d_vec[], matrix_t f_vec[]),
66  void (*jacobian_get_JTJ)(uint8_t ref_points_num,
67  matrix_t ref_point_matrix[][3],
68  matrix_t point[3],
69  matrix_t data_vec[ref_points_num],
70  matrix_t JTJ[3][3]),
71  void (*jacobian_get_JTf)(uint8_t ref_points_num,
72  matrix_t ref_point_matrix[][3],
73  matrix_t point[3],
74  matrix_t data_vec[ref_points_num],
75  matrix_t JTf[3]),
76  void (*jacobian_get_J_mul_s)(uint8_t ref_points_num,
77  matrix_t ref_point_matrix[][3],
78  matrix_t point[3],
79  matrix_t s[3],
80  matrix_t J_s[ref_points_num])
81  );
82 
105 matrix_t loc_levenberg_marquardt_correction(uint8_t ref_points_num,
106  matrix_t ref_points_matrix[ref_points_num][3],
107  matrix_t point[3],
108  matrix_t measured_data_vec[ref_points_num],
109  matrix_t mu, matrix_t s[3],
110  void (*f_i)(uint8_t ref_point_num,
111  matrix_t ref_point_mat[ref_points_num][3],
112  matrix_t point[3],
113  matrix_t d_vec[], matrix_t f_vec[]),
114  void (*jacobian_get_JTJ)(
115  uint8_t ref_points_num,
116  matrix_t ref_point_matrix[ref_points_num][3],
117  matrix_t point[3],
118  matrix_t data_vec[ref_points_num],
119  matrix_t JTJ[3][3]),
120  void (*jacobian_get_JTf)(
121  uint8_t ref_points_num,
122  matrix_t ref_point_matrix[ref_points_num][3],
123  matrix_t point[3],
124  matrix_t data_vec[ref_points_num],
125  matrix_t JTf[3]),
126  void (*jacobian_get_J_mul_s)(
127  uint8_t ref_points_num,
128  matrix_t ref_point_matrix[ref_points_num][3],
129  matrix_t point[3], matrix_t s[3],
130  matrix_t J_s[ref_points_num])
131  );
144 
145 //compute: J'J + mu^2*I
146 
163 void loc_levenberg_marquardt_get_JTJ_mu2_I(uint8_t ref_points_num,
164  matrix_t ref_points_matrix[ref_points_num][3],
165  matrix_t point[3],
166  matrix_t measured_data_vec[ref_points_num], matrix_t mu,
167  matrix_t JTJ_mu2_I[3][3],
168  void (*jacobian_get_JTJ)(
169  uint8_t ref_points_num,
170  matrix_t ref_point_matrix[ref_points_num][3],
171  matrix_t point[3],
172  matrix_t data_vec[ref_points_num],
173  matrix_t JTJ[3][3])
174  );
175 
176 #endif /* LOC_LEVENBERG_MARQUARDT_H_*/
loc_levenberg_marquardt_get_mu0
matrix_t loc_levenberg_marquardt_get_mu0(matrix_t tau, matrix_t JTJ[3][3])
Compute the initial value of the Levenberg–Marquardt (LVM) algorithm.
Definition: loc_levenberg_marquardt.c:223
loc_levenberg_marquardt
uint8_t loc_levenberg_marquardt(uint8_t ref_points_num, matrix_t ref_points_matrix[ref_points_num][3], matrix_t start_pos[3], matrix_t measured_data_vec[ref_points_num], matrix_t eps, matrix_t tau, matrix_t beta0, matrix_t beta1, uint8_t max_iter_num, matrix_t est_pos[3], void(*f_i)(uint8_t ref_points_num, matrix_t ref_point_mat[ref_points_num][3], matrix_t point[3], matrix_t d_vec[], matrix_t f_vec[]), void(*jacobian_get_JTJ)(uint8_t ref_points_num, matrix_t ref_point_matrix[][3], matrix_t point[3], matrix_t data_vec[ref_points_num], matrix_t JTJ[3][3]), void(*jacobian_get_JTf)(uint8_t ref_points_num, matrix_t ref_point_matrix[][3], matrix_t point[3], matrix_t data_vec[ref_points_num], matrix_t JTf[3]), void(*jacobian_get_J_mul_s)(uint8_t ref_points_num, matrix_t ref_point_matrix[][3], matrix_t point[3], matrix_t s[3], matrix_t J_s[ref_points_num]))
Implements the Levenberg–Marquardt (LVM) algorithm.
Definition: loc_levenberg_marquardt.c:126
loc_levenberg_marquardt_correction
matrix_t loc_levenberg_marquardt_correction(uint8_t ref_points_num, matrix_t ref_points_matrix[ref_points_num][3], matrix_t point[3], matrix_t measured_data_vec[ref_points_num], matrix_t mu, matrix_t s[3], void(*f_i)(uint8_t ref_point_num, matrix_t ref_point_mat[ref_points_num][3], matrix_t point[3], matrix_t d_vec[], matrix_t f_vec[]), void(*jacobian_get_JTJ)(uint8_t ref_points_num, matrix_t ref_point_matrix[ref_points_num][3], matrix_t point[3], matrix_t data_vec[ref_points_num], matrix_t JTJ[3][3]), void(*jacobian_get_JTf)(uint8_t ref_points_num, matrix_t ref_point_matrix[ref_points_num][3], matrix_t point[3], matrix_t data_vec[ref_points_num], matrix_t JTf[3]), void(*jacobian_get_J_mul_s)(uint8_t ref_points_num, matrix_t ref_point_matrix[ref_points_num][3], matrix_t point[3], matrix_t s[3], matrix_t J_s[ref_points_num]))
Implements the correction-function of the Levenberg–Marquardt (LVM) algorithm.
Definition: loc_levenberg_marquardt.c:34
matrix.h
Matrix computations.
loc_levenberg_marquardt_get_JTJ_mu2_I
void loc_levenberg_marquardt_get_JTJ_mu2_I(uint8_t ref_points_num, matrix_t ref_points_matrix[ref_points_num][3], matrix_t point[3], matrix_t measured_data_vec[ref_points_num], matrix_t mu, matrix_t JTJ_mu2_I[3][3], void(*jacobian_get_JTJ)(uint8_t ref_points_num, matrix_t ref_point_matrix[ref_points_num][3], matrix_t point[3], matrix_t data_vec[ref_points_num], matrix_t JTJ[3][3]))
Compute the matrix .
Definition: loc_levenberg_marquardt.c:236
matrix_t
#define matrix_t
Define the data type of the matrix elements.
Definition: matrix.h:38