VS2013与matlab混编

时间:2024-10-28 02:25:02

1、菜单:工程→ 属性... 选择配置属性下的 VC++ 目录。在包含目录栏目中添加matlab相关的include文件。我的matlab装在F盘中,只要把F:\MatLab\extern\include\win64和F:\MatLab\extern\include两个目录配置上去就好,这里注意下要是win64的vs所建立的工程必须是x64的,否则会出错,比较低的版本则没有win64,只有win32 这样是建立一个x86或win32工程即可

VS2013与matlab混编

2、在 库目录栏目中添加matlab相关的lib文件。例如:F:\MatLab\extern\lib\win32\microsoft;F:\MatLab\extern\lib\win32;F:\MatLab\extern\lib\win64\microsoft;F:\MatLab\extern\lib\win64;注意这里是针对于不同的工程和机器位数,最好全部加上去,以免出错。

VS2013与matlab混编

3、菜单:工程 属性 选择配置属性下的 连接器→ 输入。在 附加依赖项 栏目中输入项目需要引用matlab的的lib文件库。libmat.lib libeng.lib libmx.lib

VS2013与matlab混编

4、菜单:工程 属性 选择配置属性下的 连接器→ 常规。在 附加库目录 栏目中,添加库所在的目录名称。如:F:\MatLab\bin\win64这一步相当的重要,不然的话,各种dll文件找不到,lib文件找不到之类的报错。

VS2013与matlab混编

5、测试:从网上随便找一个代码#include<iostream>#include<ioman足毂忍珩ip>usingnamespacestd;#include<engine.h>#include<string.h>voidmain(){//定义循环变量inti=0,j=0;//状态变量intnStatus=0;//定义MATLAB引擎指针Engine*ep;//定义mxArray变量指针mxArray*A,*B;//定义矩阵数组//注意:VC中矩阵的行列次序与MATLAB正好时相反,需要转置。doublearData[3][3]={{7.5,16.3,9.6},{13.2,8.9,12.3},{9.6,5.4,13.7}};doublearResData[3][3];//输出原矩阵cout<<"原矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++){cout<<setw(10)<<arData[i][j]<<"";}cout<<endl;}//打开MATLAB引擎ep=engOpen(NULL);if(ep==NULL){cout<<"无法打开MATLAB引擎。"<<endl;exit(EXIT_FAILURE);}//是否显示MATLAB窗口:true-显示;false-隐藏。nStatus=engSetVisible(ep,false);if(nStatus!=0){cout<<"设置MATLAB显示属性失败。"<<endl;exit(EXIT_FAILURE);}//为mxArray变量分配空间A=mxCreateDoubleMatrix(3,3,mxREAL);B=mxCreateDoubleMatrix(3,3,mxREAL);if(A==NULL||B==NULL){cout<<"为mxArray变量分配空间失败。"<<endl;exit(EXIT_FAILURE);}//将数组中的数据写入到mxArray空间中memcpy((void*)mxGetPr(A),(void*)arData,sizeof(arData));//将矩阵变量A写入到MATLAB引擎空间nStatus=engPutVariable(ep,"A",A);if(nStatus!=0){cout<<"矩阵变量写入MATLAB引擎空间失败。"<<endl;exit(EXIT_FAILURE);}//执行引擎命令求矩阵A的逆矩阵nStatus=engEvalString(ep,"B=inv(A)");if(nStatus!=0){cout<<"执行MATLAB引擎命令失败。"<<endl;exit(EXIT_FAILURE);}//从MATLAB引擎空间中读取执行结果B=engGetVariable(ep,"B");//将矩阵变量B复制到数组arResData中memcpy((void*)arResData,(void*)mxGetPr(B),sizeof(arResData));//释放矩阵变量空间mxDestroyArray(A);mxDestroyArray(B);//关闭MATLAB引擎engClose(ep);//输出计算结果cout<<"逆矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++){cout<<setw(10)<<arResData[i][j]<<"";}cout<<endl;}//暂停程序,查看结果system("pause");}测试成功!!!

© 手抄报圈