[R] R help for invoking nmmin()

Fri Oct 31 02:39:55 CET 2008

```My code is as follows:

#include <iostream>
#include <cmath>
using namespace std;

#define MATHLIB_STANDALONE 1

extern "C"
{
#include "R_ext/Applic.h"
}

typedef struct TT{
double ** tempX;
double * tempY;
int tempN;
} TT, *MM;

double fn(int N, double * beta, void * ex){
double total = 0;
int i = 0,j = 0;
double * betaFn = new double[N];
MM tmp = (MM)ex;
for(i = 0; i < N; i++)
{
betaFn[i] = exp(beta[i]);
}
for(j = 0; j < tmp->tempN; j++) {
double temp = 0;
for(i = 0; i < N; i ++) {
temp += tmp->tempX[j][i] * betaFn[i];
}
total += pow(tmp->tempY[j] - temp,2);
}
}
void mgr(int, double *, double *, void *){}

int main()
{
//cout<<pchisq(2,7,1,0)<<endl;
//cout << qnorm(0.7, 0.0, 1.0, 0, 0) << endl;

int n = 5;
double *dpar, *opar;
int fncount, fail;
dpar = new double [n];
opar = new double [n];
dpar[0] = 13.67318;
dpar[1] = 0;
dpar[2] = 17.02707;
dpar[3] = 0;
dpar[4] = 24.08231;
double value;
double abstol = 1e-16;
double intol = 1e-8;

int y = 12;
MM t = (MM)malloc(y*(n+2)*sizeof(TT));
t-> tempX = new double * [y];
for(size_t ii = 0; ii < y; ii++) {
t->tempX[ii] = new double [n];
}

t->tempX[0][1] = -0.03;
t->tempX[1][1] = -0.02;
t->tempX[2][1] = -0.015;
t->tempX[3][1] = -0.01;
t->tempX[4][1] = -0.005;
t->tempX[5][1] = 0;
t->tempX[6][1] = 0.005;
t->tempX[7][1] = 0.01;
t->tempX[8][1] = 0.015;
t->tempX[9][1] = 0.02;
t->tempX[10][1] = 0.03;
t->tempX[11][1] = 0.04;
for(int ii = 0; ii < n; ii++) {
for(int yy = 0; yy < y; yy++)
t->tempX[yy][ii] = pow(t->tempX[yy][1], ii);
}

t-> tempY = new double [y];
t->tempY[0] = 930862;
t->tempY[1] = 893736;
t->tempY[2] = 882721;
t->tempY[3] = 872066;
t->tempY[4] = 871729;
t->tempY[5] = 868550;
t->tempY[6] = 865100;
t->tempY[7] = 862132;
t->tempY[8] = 870266;
t->tempY[9] = 870493;
t->tempY[10] = 893980;
t->tempY[11] = 952914;

t->tempN = y;

cout << fn(n,dpar,(void*)t)<<endl;
nmmin(n, dpar, opar, &value, fn,
&fail, abstol, intol, (void *)t,
1, 0.5, 2, 0,
&fncount, 500);
for(int aa = 0 ; aa < n; aa++) {
cout<< opar[aa]<<",";
}
cout<<"\n";
return 0;
}

I run this code, It told me  "Segmentation fault". I dont know if the
parameter is wrong or not.
Thank you very much.