C/Visual C - MATLAB--C

 
Vista:

MATLAB--C

Publicado por rosa (17 intervenciones) el 17/04/2009 19:32:03
Hola,

no se si es el foro mas adecuado pero como se trata de una interfaz entre MATLAB y C, lo escribo aqui mismo, que la experiencia en foros me dice que los programadores de MATLAB por alguna extragna razon son mas estirados.

Esta es mi duda:

Mi problema en cuestion es que llamando desde MATLAB a una funcion en C, necesito recuperar un array de 361x181 y no se como hacerlo al tratarse de punteros dobles.

os pongo mi codigo para que explicarme mejor,ok?



void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{

int buflen = (mxGetM(prhs[0]) * mxGetN(prhs[0])*sizeof(mxChar))+1;
char *buf = new char[buflen];
mxGetString(prhs[0], buf, buflen);

if(strcmp("Simulate",buf)==0)
{
....
}
else if(strcmp("loss",buf)==0)
{
if(nrhs=6)
{
float freq=ZERO;
double *X[181];
double *Y[181];
double *Z[181];
double *pos=NULL;
struct SatVEC *sat;
double **L=NULL;
int ii=ZERO;
int jj=ZERO;
mwSize size_memo=65341;
double *new_pr=NULL;

freq=(float)mxGetScalar(prhs[1]);

prhs[2]=mxCreateDoubleMatrix(361,181,mxREAL); //AQUI!!!
new_pr=(double*)mxCalloc(size_memo,sizeof(double));
new_pr=X;
X=mxGetPr(prhs[2]);

prhs[3]=mxCreateDoubleMatrix(361,181,mxREAL);
new_pr=(double*)mxCalloc(size_memo,sizeof(double));
new_pr=Y;
Y=mxGetPr(prhs[3]);

prhs[4]=mxCreateDoubleMatrix(361,181,mxREAL);
new_pr=(double*)mxCalloc(size_memo,sizeof(double));
new_pr=Z;
Z=mxGetPr(prhs[4]);

pos=mxGetPr(prhs[5]);
sat->pos[0]=*pos;
sat->pos[1]=*(pos+1);
sat->pos[2]=*(pos+2);

L=loss(X,Y,Z,sat,freq);
mxSetPr(plhs[0],*L);
}
else
{
mexErrMsgTxt("Errosinput arguments");
}
return;
}




los parametros de entrada prhs[2],prhs[3] y prhs[4] son como he dicho arrays procedentes de MATLAB de 361x181. y me gustaria recuperarlos en C para pasarlos como parametros de entrada a la funcion loss, que la tengo definida como

double** loss(double X[361][181],double Y[361][181],double Z[361][181],struct SatVEC *sat,float freq)

El codigo que he puesto, es el ultimo que he probado pero todos los anteriores me han dado el mismo problema y es que cuando recupero la direccion con mxGetPr me devuelve un puntero y mis matrices estan definidas como puntero a puntero....¿alguien sabe como podria solucionarlo?

muchas gracias y espero de todo corazon una respuesta
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder