[R] R help for invoking nmmin()

DJadeChou yuyu.zhou at pdf.com
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);
	}
	return total;
}
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.

DJade
-- 
View this message in context: http://www.nabble.com/R-help-for-invoking-nmmin%28%29-tp20258786p20258786.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list