2012-01-15 12 views
5

के साथ उपयोगकर्ता द्वारा परिभाषित structs मैं एक मैक्स फ़ंक्शन के उपयोग के माध्यम से अपने सी कोड को MATLAB से जोड़ने का प्रयास कर रहा हूं, और मुझे डर है कि मैं काफी उलझन में हूं। विशेष रूप से, मैं जानना चाहता हूं कि मैं अपने उपयोगकर्ता द्वारा परिभाषित डेटा प्रकारों का उपयोग कर सकता हूं (जैसे नीचे दिए गए उदाहरण में व्यक्ति संरचना)। मैं दस्तावेज में कुछ भी नहीं आया है ताकि यह सुझाव दिया जा सके कि मैं कर सकता हूं, लेकिन अगर यह अनुमति नहीं दी गई तो यह दुर्भाग्यपूर्ण होगा! यहाँ है कि मैं क्या एक प्रवेश द्वार समारोह के रास्ते में है:MATLAB मेक्सिको फ़ंक्शन

void makePeople(int* A, int* B, Person* people) 
{ 

int MANHATTAN, BRONX, BROOKLYN, QUEENS, STATEN; 

int i, j, k, p, q, n; 
int count, home, work, mode; 
double* loc1; 
double* loc2; 
Person oPerson; 

n = 5; 
count = 0; 

MANHATTAN = 1; 
BRONX = 2; 
BROOKLYN = 3; 
QUEENS = 4; 
STATEN = 5; 

for (i = 1; i <= n; i++) 
{ 
    for (j = 1; j <= n; j++) 
    { 
      for (k = 1; k <= 2; k++) 
      { 
       if (k == 1) 
        q = A[n*i+j]; 
       else 
        q = B[n*i+j]; 
       for (p = 1; p < q; p++) 
       { 
        home = i; 
        work = j; 
        mode = k; 
        if (home == MANHATTAN) 
        { 
          loc1[0] = 2.4; 
          loc1[1] = 2.4; 
          loc2[0] = 3.7; 
          loc2[1] = 3.4; 
        } 
        else 
        { 
          loc1[0] = 3.4; 
          loc1[1] = 4.4; 
          loc2[0] = 3.7; 
          loc2[1] = 3.4; 
        } 
        oPerson = Person_new(home, work, mode, loc1, loc2); 
        people[count] = oPerson; 
        count++; 
        } 
       } 
     } 
    } 
    return; 

}

अंत में, यहाँ person.h है:

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

int *inA; 
int *inB; 
const mxArray *people; 
const char *fieldnames[5]; 
int numFields, i; 

inA = (int *) mxGetPr(prhs[0]); 
inB = (int *) mxGetPr(prhs[1]); 

numFields = 5; 
fieldnames[0] = "home"; 
fieldnames[1] = "work"; 
fieldnames[2] = "mode"; 
fieldnames[3] = "loc1"; 
fieldnames[4] = "loc2"; 

people = mxCreateStructMatrix(1000, 1, numFields, fieldnames); 
for (i = 0; i < numFields; i++) 
{ 
    mxSetField(people,i,fieldnames[i],mxDuplicateArray(prhs[2])); 
} 

makePeople(inA, inB, people); 

}

मेरे makePeople समारोह नीचे परिभाषित किया गया है फ़ाइल:

#ifndef PERSON_INCLUDED 
#define PERSON_INCLUDED 

typedef struct Person_str *Person; 

Person Person_new(int home, int work, int mode, double* loc1, double* loc2); 

#endif 

किसी भी मदद की सराहना की जाएगी!

उत्तर

6

मेक्स में, MATLAB संरचनाएं mxArray प्रकार हैं, जो आपकी कस्टम सी संरचना Person जैसी कुछ नहीं है। इसलिए तुम सिर्फ आवंटित नहीं कर सकते:

people[count] = oPerson; 

// people is defined as: mxArray* 
// oPerson is defined as: Person 

आप MATLAB struct क्षेत्र द्वारा क्षेत्र, उसी तरह आप अपने कोड की शुरुआत में किया था, भरना होगा mxSetField

के माध्यम से