I've searched to find examples of  how to work with the C versions of
optim.

I've separated out the function just to test on it alone, and currently I'm
attempting to use fmmin as follows:


!~~CODE ~~!

double optimfn(int n, double *par, void *ex) {
        double * lambda = (double*)malloc(sizeof(double)*n);
        double sum = 0;

        for(int i =0; i < n; i++) { lambda[i] = (1+tanh(par[i]/2.0))/2.0; }

        for(int i = 0; i < n; i++) { sum += (par[i]*log(lambda[i]) +
(1-par[i]*log(1-lambda[i]))); }
        return sum;
}

void optimgr(int n, double *par, double *gr, void *ex)
{
        for(int i = 0; i < n; i++) { gr[i] = log(par[i]) - log(1-par[i]); }
}



void Test(SEXP SomeValues)
{
        PROTECT(SomeValues = AS_NUMERIC(SomeValues));

        double * CValues = NUMERIC_POINTER(SomeValues);

        void * optEx, *grEx, *overallEx;
        int mask = -1, fncount, grcount, failed;
        double *Fmax, *gradients;
        int size = sizeof(CValues)/sizeof(double);

        vmmin(size, CValues, Fmax,
                optimfn,
                optimgr,
                20, 0, mask, .00001, .000001, 40,
                overallEx, fncount, grcount, failed);
}


!~~ END CODE ~~!

----------------------------------------------

Beyond the basic optimfn/optimgr which I'll be changing...
I've gotten compiler complaints about the  'implicit declaration of vmmin',
which I'm a little stuck on.  But even beyond that, I'm unclear as to how
all of the information will be returned.   The "R Extensions" does a lot of
hand-waving on this subject.

Could anyone provide a solid example of how this would be done properly?
Also, with an output of things like the loglikelihood and gradient values,
as I need to work with the returned values and not simply pass things
straight back into R.

I hope that was phrased clearly and not asking too much. I've looked
through the manuals and other mail list questions I could find, but feel
very stuck still.

Thanks in advance,
~Eddie

	[[alternative HTML version deleted]]

