1) 给计算机添加系统变量Path: C:\ProgramFiles\MATLAB\R2014b\bin\win64,添加完成之后重新启动计算机。(一定要重新启动很重要)
2) 新建一个C++工程,添加X64属性(很重要,应为MATLAB是64位的)
3) 属性管理器 -> 右键 -> 属性 ->配置属性 ->VC++目录 ->包含目录
添加:C:\ProgramFiles\MATLAB\R2014b\extern\include
库目录添加:C:\Program Files\MATLAB\R2014b\extern\lib\win64
C:\ProgramFiles\MATLAB\R2014b\extern\lib\win64\microsoft
连接器->输入:添加:libmx.lib、libmex.lib、libeng.lib
4) 特别注意:在MATLAB中调用出来的命令窗口中不知显示任何信息,例如:engEvalString(ep,"randn;"),只会在后台运行,不会将结果在命令窗口中显示。
MATLAB语法一定要符合规范,特别注意C语言中语句出现空格可以不影响语句的执行,MATLAB语句中不能够出现空格,必须要规范。
另外注意MATLAB中运行的所有数据全部都是矩阵。
5) 测试程序如下:
例0:小试牛刀,在C++中调用MATLAB绘图
例1:使用engPutVariable函数向MATLAB引擎发送数据
例2:使用engGetVariable函数从MATLAB引擎中获取数据:
特别注意:获取数据的指针按照每一列读取(不是按照行进行读取的)
例3:向MATLAB引擎传入数据,然后从MATLAB引擎中获取3数据的计算结果:
特别注意:传入的数据在MATLAB数据矩阵中都是按照列的方式排列的(读取数据也是按照列的方式,而不是按照行)
重点:下列代码:
double t[]={1,2,3,4,5,6,7,8,9,10}; //定义一个一维数组
mxArray *T=mxCreateDoubleMatrix ( 2, 5,mxREAL); //创建一个2行5列的矩阵
memcpy ( (void*) mxGetPr ( T ) ,( void *)t ,sizeof( t )); //给矩阵赋值
然而,在矩阵中,结果是这样的:T矩阵
1 | 3 | 5 | 7 | 9 |
2 | 4 | 6 | 8 | 10 |
按照列进行赋值。
同样,下面的代码:
engEvalString (ep ,”D=T.*^2;”); //执行MATLAB指令
MxArray *Result =engGetVariable( ep ,”D”); //从引擎获取矩阵
double *p =mxGetPr ( Result); //P指针指向矩阵的第一个元素
P指针的指向顺序为:
1 p | 9 p+2 | 25 p+4 | 49 p+6 | 81 p+8 |
4 p+1 | 16 p+3 | 36 p+5 | 64 p+7 | 100 p+9 |
若想输出t[5]的计算结果,则为以下代码:
cout << *(p+5)<<endl;