我试图通过使用mex函数将我的C代码链接到MATLAB,我担心我很困惑.具体来说,我想知道我是否可以使用自己的用户定义数据类型(例如下面示例中的Person结构).我没有在文档中看到任何建议我可以,但如果不允许这样做会很不幸!这就是我对网关功能的看法:
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);
Run Code Online (Sandbox Code Playgroud)
}
我的makePeople函数定义如下:
void makePeople(int* A, int* …Run Code Online (Sandbox Code Playgroud) 我希望实施一个简单的分子动力学计划.我的第一步是将系统定义为一系列原子,每个原子都有一个类型,一个id号,一个三维位置矢量和一个3D速度矢量.以下是我写的程序:
FILE *init;
static int randomVelocity(void)
{
return rand()/RAND_MAX - 0.5;
}
int main(int argc, char *argv[])
{
int iType;
int iID;
int i;
double* pdPosition;
double* pdVelocity;
char* line;
Atom* poAtoms;
int count = 0;
init = fopen("newdat.txt", "r+");
srand((unsigned)time(NULL));
line = malloc(81*sizeof(char));
while (fgets(line, 80, init) != NULL)
{
char* tok1;
char* tok2;
char* tok3;
char* tok4;
tok1 = strtok(line, " \t");
if ((tok1 == NULL) || (tok1[0] == '*'))
{
break;
}
tok2 = strtok(NULL, " \t"); …Run Code Online (Sandbox Code Playgroud)