• Domingo 17 de Noviembre de 2024, 06:46

Autor Tema:  mexFunction  (Leído 846 veces)

RossaRamos

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
mexFunction
« en: Viernes 17 de Abril de 2009, 16:15 »
0
Hola,
necesito ayuda urgente y he visto que hace unos cuantos meses hubo una pregunta igual pero no entiendo la respuesta, asi que me veo obligada a formularla de nuevo, a ver si algun alma caritativa con muchos mas conociemientos que yo, me soluciona en un plis plas el mayor de mis problemas ahora mismo.

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?

Código: C++
  1.  
  2.  
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;
   }
Código: C++
  1.  
  2.  

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[181],double *Y[181],double *Z[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

Rosa

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: mexFunction
« Respuesta #1 en: Lunes 20 de Abril de 2009, 11:33 »
0
Estaría bien que arreglaras la forma en que muestras el código. Primero selecciona el código y después dale a code, así te pondrá las etiquetas bien. No olvides formatearlo.

Salud