00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00019
00020 #ifndef _LM_H_
00021 #define _LM_H_
00022
00023
00024
00025 #define LINSOLVERS_RETAIN_MEMORY // comment this is if you don't want routines in Axb.c retain working memory between calls
00026
00027
00028
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032
00033
00034 #define FABS(x) (((x)>=0.0)? (x) : -(x))
00035
00036
00037
00038
00039 #define LM_DER_WORKSZ(npar, nmeas) (2*(nmeas) + 4*(npar) + (nmeas)*(npar) + (npar)*(npar))
00040 #define LM_DIF_WORKSZ(npar, nmeas) (3*(nmeas) + 4*(npar) + (nmeas)*(npar) + (npar)*(npar))
00041
00042 #define LM_OPTS_SZ 5
00043 #define LM_INFO_SZ 9
00044 #define LM_INIT_MU 1E-03
00045 #define LM_STOP_THRESH 1E-17
00046 #define LM_DIFF_DELTA 1E-06
00047 #define LM_VERSION "2.1.3 (Jan. 2006)"
00048
00049
00050
00051 extern int dlevmar_der(
00052 void (*func)(double *p, double *hx, int m, int n, void *adata),
00053 void (*jacf)(double *p, double *j, int m, int n, void *adata),
00054 double *p, double *x, int m, int n, int itmax, double *opts,
00055 double *info, double *work, double *covar, void *adata);
00056
00057 extern int dlevmar_dif(
00058 void (*func)(double *p, double *hx, int m, int n, void *adata),
00059 double *p, double *x, int m, int n, int itmax, double *opts,
00060 double *info, double *work, double *covar, void *adata);
00061
00062
00063 extern int dlevmar_bc_der(
00064 void (*func)(double *p, double *hx, int m, int n, void *adata),
00065 void (*jacf)(double *p, double *j, int m, int n, void *adata),
00066 double *p, double *x, int m, int n, double *lb, double *ub,
00067 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
00068
00069 extern int dlevmar_bc_dif(
00070 void (*func)(double *p, double *hx, int m, int n, void *adata),
00071 double *p, double *x, int m, int n, double *lb, double *ub,
00072 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
00073
00074
00075 extern int dlevmar_lec_der(
00076 void (*func)(double *p, double *hx, int m, int n, void *adata),
00077 void (*jacf)(double *p, double *j, int m, int n, void *adata),
00078 double *p, double *x, int m, int n, double *A, double *b, int k,
00079 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
00080
00081 extern int dlevmar_lec_dif(
00082 void (*func)(double *p, double *hx, int m, int n, void *adata),
00083 double *p, double *x, int m, int n, double *A, double *b, int k,
00084 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
00085
00086
00087
00088
00089 extern int slevmar_der(
00090 void (*func)(float *p, float *hx, int m, int n, void *adata),
00091 void (*jacf)(float *p, float *j, int m, int n, void *adata),
00092 float *p, float *x, int m, int n, int itmax, float *opts,
00093 float *info, float *work, float *covar, void *adata);
00094
00095 extern int slevmar_dif(
00096 void (*func)(float *p, float *hx, int m, int n, void *adata),
00097 float *p, float *x, int m, int n, int itmax, float *opts,
00098 float *info, float *work, float *covar, void *adata);
00099
00100
00101 extern int slevmar_bc_der(
00102 void (*func)(float *p, float *hx, int m, int n, void *adata),
00103 void (*jacf)(float *p, float *j, int m, int n, void *adata),
00104 float *p, float *x, int m, int n, float *lb, float *ub,
00105 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
00106
00107 extern int slevmar_bc_dif(
00108 void (*func)(float *p, float *hx, int m, int n, void *adata),
00109 float *p, float *x, int m, int n, float *lb, float *ub,
00110 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
00111
00112
00113 extern int slevmar_lec_der(
00114 void (*func)(float *p, float *hx, int m, int n, void *adata),
00115 void (*jacf)(float *p, float *j, int m, int n, void *adata),
00116 float *p, float *x, int m, int n, float *A, float *b, int k,
00117 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
00118
00119 extern int slevmar_lec_dif(
00120 void (*func)(float *p, float *hx, int m, int n, void *adata),
00121 float *p, float *x, int m, int n, float *A, float *b, int k,
00122 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
00123
00124
00125 extern int dAx_eq_b_QR(double *A, double *B, double *x, int m);
00126 extern int dAx_eq_b_QRLS(double *A, double *B, double *x, int m, int n);
00127 extern int dAx_eq_b_Chol(double *A, double *B, double *x, int m);
00128 extern int dAx_eq_b_LU(double *A, double *B, double *x, int m);
00129 extern int dAx_eq_b_SVD(double *A, double *B, double *x, int m);
00130
00131 extern int sAx_eq_b_QR(float *A, float *B, float *x, int m);
00132 extern int sAx_eq_b_QRLS(float *A, float *B, float *x, int m, int n);
00133 extern int sAx_eq_b_Chol(float *A, float *B, float *x, int m);
00134 extern int sAx_eq_b_LU(float *A, float *B, float *x, int m);
00135 extern int sAx_eq_b_SVD(float *A, float *B, float *x, int m);
00136
00137
00138 extern void dlevmar_chkjac(
00139 void (*func)(double *p, double *hx, int m, int n, void *adata),
00140 void (*jacf)(double *p, double *j, int m, int n, void *adata),
00141 double *p, int m, int n, void *adata, double *err);
00142
00143 extern void slevmar_chkjac(
00144 void (*func)(float *p, float *hx, int m, int n, void *adata),
00145 void (*jacf)(float *p, float *j, int m, int n, void *adata),
00146 float *p, int m, int n, void *adata, float *err);
00147
00148 #ifdef __cplusplus
00149 }
00150 #endif
00151
00152 #endif