56 lines
1.8 KiB
C
56 lines
1.8 KiB
C
#ifndef VARMET_H
|
|
#define VARMET_H
|
|
|
|
/* Variable Metric multivariate minimiser */
|
|
|
|
/*
|
|
* Copyright 2000, 2007 Graeme W. Gill
|
|
* All rights reserved.
|
|
*
|
|
* This material is licenced under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 :-
|
|
* see the License.txt file for licencing details.
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Variable Metric Gradient optimiser */
|
|
/* return 0 on sucess, 1 on failure due to excessive itterations */
|
|
/* Result will be in cp */
|
|
int varmet(
|
|
double *rv, /* If not NULL, return the residual error */
|
|
int di, /* Dimentionality */
|
|
double cp[], /* Initial starting point */
|
|
double s[], /* Size of initial search area */
|
|
double ftol, /* Tollerance of error change to stop on */
|
|
int maxit, /* Maximum iterations allowed */
|
|
double (*func)(void *fdata, double tp[]), /* Error function to evaluate */
|
|
double (*dfunc)(void *fdata, double dp[], double tp[]), /* Gradient function to evaluate */
|
|
void *fdata /* Opaque data needed by function */
|
|
);
|
|
|
|
/* Example user function declarations */
|
|
double varmet_funk( /* Return function value */
|
|
void *fdata, /* Opaque data pointer */
|
|
double tp[]); /* Multivriate input value */
|
|
|
|
/* Line in multi-dimensional space minimiser */
|
|
double brentnd( /* vector multiplier return value */
|
|
double ax, /* Minimum of multiplier range */
|
|
double bx, /* Starting point multiplier of search */
|
|
double cx, /* Maximum of multiplier range */
|
|
double ftol, /* Tollerance to stop search */
|
|
double *xmin, /* Return value of multiplier at minimum */
|
|
int n, /* Dimensionality */
|
|
double (*func)(void *fdata, double tp[]), /* Error function to evaluate */
|
|
void *fdata, /* Opaque data */
|
|
double pcom[], /* Base vector point */
|
|
double xicom[]); /* Vector that will be multiplied and added to pcom[] */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* VARMET_H */
|