Hi,
I wanted to use R's lbfgsb method for minimization from C. Unfortunately,
my toy examples always crashes (segmentation fault). What's wrong with it?
double eval(int n, double* par, void *ex) {
double result = 0;
for (int i=0; i<n; ++i) {
result += par[i]*par[i];
}
printf("result=%.2f\n", result);
return result;
}
void grad(int n, double *par, double *gr, void *ex) {
gr[0] = 2*par[0];
gr[1] = 2*par[1];
}
int main(void) {
int n = 2;
int m = 5;
double init[] = {2,3};
double lower[] = {-100, -100};
double upper[] = {100, 100};
int nbd[] = {0, 0};
double Fmin;
int fail;
void *ex = 0;
double factr = 1e7;
double pgtol = 0;
int fncount;
int grcount;
int maxit = 10;
char msg[1000];
int trace = 0;
int nREPORT = 10;
/* from http://cran.r-project.org/doc/manuals/R-exts.html#Optimization
void lbfgsb(int n, int lmm, double *x, double *lower,
double *upper, int *nbd, double *Fmin, optimfn fn,
optimgr gr, int *fail, void *ex, double factr,
double pgtol, int *fncount, int *grcount,
int maxit, char *msg, int trace, int nREPORT); */
lbfgsb(n, m, init, lower, upper, nbd, &Fmin, &eval, &grad,
&fail, ex,
factr, pgtol, &fncount, &grcount, maxit, msg, trace, nREPORT);
printf("optimum at (%.2f,%.2f)\n", init[0], init[1]);
return 0;
}
Thanks a lot.
[[alternative HTML version deleted]]