最近开始用C++和Matlab混合编程,采用的策略是在VS中配置Matlab的extern库。 然后把VS中的变量输出到matlab中去
Engine *ep;
mxArray *T = NULL, *result = NULL, *a = NULL;
char buffer[BUFSIZE+1];
double time[10] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 };
double *aa;
ep = engOpen("");
T = mxCreateDoubleMatrix(1, 10, mxREAL);
memcpy((void *)mxGetPr(T), (void *)time, sizeof(time));
//result = mxCreate(img.cols, img.rows,mxREAL);
a = mxCreateDoubleMatrix(1, 1, mxREAL);
aa = mxGetPr(a);
aa[0] = img.cols;
engPutVariable(ep, "T", T);
engPutVariable(ep, "a", a);
engEvalString(ep, "cc = a");
engEvalString(ep, "D = .5.*(-9.8).*T.^2;");
engEvalString(ep, "plot(T,D);");
engEvalString(ep, "title('Position vs. Time for a falling object');");
engEvalString(ep, "xlabel('Time (seconds)');");
engEvalString(ep, "ylabel('Position (meters)');");
这一点很普通,但是我发现输出到matlab后每次都是打开一个新的command window,而且变量也不会在workspace停留,这样十分不便于观察变量和后续操作,后来我找到了解决办法,就是在matlab里运行 state = enableservice('AutomationServer', true); 这样以后就会自动在一个workspace里工作了!