您好,欢迎访问三七文档
当前位置:首页 > 幼儿/小学教育 > 小学教育 > 如何将Matlab6.5函数转换成VC++6.0函数
1如何将Matlab6.5函数转换成VC++6.0函数%版权所有:陆振波,海军工程大学(转载请注明出处!)%电子邮件:luzhenbo@yahoo.com.cn%个人主页:、编写Matlab函数函数文件sum_prod.m,内容如下:function[sum,prod]=sum_prod(p1,p2)sum=p1+p2;%p1与p2的和prod=p1.*p2;%p1与p2的点乘该函数完成的是矩阵的求和与点乘的功能,下面将介绍把该代码转换成C++环境可用的代码的方法。2、Matlab6.5编译器设置(1)在同一台电脑上安装Matlab6.5和VisualC++6.0;(2)mex命令设置(a)运行Matlab,在Matlab的命令窗口(CommandWindow)键入“mex-setup”命令后,按回车键,安装Matlab编译器;(b)命令窗口出现如下提示:Pleasechooseyourcompilerforbuildingexternalinterface(MEX)files:Wouldyoulikemextolocateinstalledcompilers[y]/n?此时键入”y”,按回车;(c)命令窗口出现如下提示:Pleasechooseyourcompilerforbuildingexternalinterface(MEX)files:Wouldyoulikemextolocateinstalledcompilers[y]/n?ySelectacompiler:[1]DigitalVisualFortranversion6.0inC:\ProgramFiles\MicrosoftVisualStudio[2]LccCversion2.4inC:\MATLAB6P5\sys\lcc[3]MicrosoftVisualC/C++version6.0inC:\ProgramFiles\MicrosoftVisualStudio[0]None此时键入”3”,按回车;选择MicrosoftVisualC++6.0的编译器(d)命令窗口出现如下提示:Pleaseverifyyourchoices:Compiler:MicrosoftVisualC/C++6.0Location:C:\ProgramFiles\MicrosoftVisualStudioArethesecorrect?([y]/n):此时键入”y”,按回车;确认选择MicrosoftVisualC++6.0的编译器(3)mbuild命令设置(a)运行Matlab,在Matlab的命令窗口(CommandWindow)键入“mbuild-setup”命令后,按回车键,安装Matlab编译器;(b)命令窗口出现如下提示:2PleasechooseyourcompilerforbuildingstandaloneMATLABapplications:Wouldyoulikembuildtolocateinstalledcompilers[y]/n?此时键入”y”,按回车;(c)命令窗口出现如下提示:[1]LccCversion2.4inC:\MATLAB6P5\sys\lcc[2]MicrosoftVisualC/C++version6.0inC:\ProgramFiles\MicrosoftVisualStudio[0]None此时键入”2”,按回车;选择MicrosoftVisualC++6.0的编译器(d)命令窗口出现如下提示:Pleaseverifyyourchoices:Compiler:MicrosoftVisualC/C++6.0Location:C:\ProgramFiles\MicrosoftVisualStudioArethesecorrect?([y]/n):此时键入”y”,按回车;确认选择MicrosoftVisualC++6.0的编译器(4)在Matlab的命令窗口(CommandWindow)键入“cd(prefdir);mccsavepathprefdir;”启动MATLABadd-in工具条3、建立C++控制台工程(1)新建一个C++控制台工程Test其它都采用默认设置。然后在该工程中添加Test.cpp文件34、启用MatlabAdd-in工具条(1)在上面的VC工程中,在菜单栏的空白处右键单击鼠标,出现如下菜单点击Coustomize…菜单项,出现如下Coustomize对话框,4选择Add-inandMacroFiles标签,选中MATLABAdd-in选项,点Close按钮关闭对话框,这里会在菜单附近出现如下工具条,它就是MatlabAdd-in工具条。5、VC++6.0环境及工程设置在上面的VC工程中,进行以下设置(1)VC++6.0环境设置单击菜单Tools,出现如下菜单单击Options…菜单项,出现Options对话框,选择Directories标签,在includefiles里面加入:C:\MATLAB6P5\EXTERN\INCLUDEC:\MATLAB6P5\EXTERN\INCLUDE\CPP5如下图所示在Libraryfiles里面加入:C:\MATLAB6P5\EXTERN\LIBC:\MATLAB6P5\EXTERN\LIB\WIN32C:\MATLAB6P5\EXTERN\LIB\WIN32\MICROSOFT\MSVC60如下图所示6(2)VC++6.0工程设置单击菜单Project,出现如下菜单单击Setting…菜单项,出现ProjectSetting对话框,选择Link标签,在Object/librarymodules:下面的文本框内容的后面加入libmmfile.liblibmatlb.liblibmx.liblibmat.liblibmatpm.libsgl.liblibmwsglm.liblibmwservices.lib,如下图所示选择C/C++标签,在Prerocessordefinitions:下面的文本框内容的后面加入,MSVC,IBMPC,MSWIND,如下图所示7设置完成。6、Matlab到C++的代码转换在上面的VC工程中(1)将前面sum_prod.m文件复制到该Test工程所在的目录下(2)单击MatlabAdd-in工具条最左边第一个按钮,出现如下对话框选中WindowsConsoleEXE四个选择选中后二项,如上图所示,单击OK,出现如下对话框8选中Matlab函数文件sum_prod.m,单击“打开”按钮,这样在该工程所在的目录就生成了sum_prod.cpp和sum_prod.hpp文件。(3)打开sum_prod.cpp文件,注意到里面有这样一个函数mwArraysum_prod(mwArray*prod,mwArrayp1,mwArrayp2){…}可以看到在C++环境中,sum_prod也是一个函数,它的输入与输出数据类型是mwArray,它是VC6.0专门为Matlab中的矩阵对象定义的一个类。函数sum_prod有三个输入参数和一个输出参数。由于C++函数不能有一个以上的返回值,因此这里将Matlab函数sum_prod的第二个返回值,以地址型变量的形式作为C++函数sum_prod的第一个输入参数。7、C++函数的使用在上面VC工程Test.cpp文件中键入以下代码://********************************************************************#includematlab.hpp//包含类mwArray定义#includesum_prod.hpp//包含C++函数sum_prodvoidmain(){inti,j;//定义C++二维数组doublex[]={1,2,3,4,5,6};doubley[]={7,8,9,10,11,12};double*sum,*prod;//初始化与C++数组相对应的mwArray变量mwArrayX(2,3,x);mwArrayY(2,3,y);mwArraySUM,PROD;9//调用C++函数SUM=sum_prod(&PROD,X,Y);//给输出数据分配内存sum=(double*)calloc(6,sizeof(double));prod=(double*)calloc(6,sizeof(double));//取出输出数据sum=mxGetPr(SUM.GetData());prod=mxGetPr(PROD.GetData());//输出显示coutSUM=endl;for(i=0;i2;i++){for(j=0;j3;j++)coutsum[j*2+i]\t;coutendl;}coutPROD=endl;for(i=0;i2;i++){for(j=0;j3;j++)coutprod[j*2+i]\t;coutendl;}//释放内存free(sum);free(prod);}//********************************************************************编译链接程序,“忽略”编译过程中有关库文件msvcrt.lib的警告。该C++程序运算结果如下图所示10特别说明一:在C\C++环境中二维数组是“行向量”,如果将下面定义的变量x看成二维数组的话doublex[]={1,2,3,4,5,6};那么x应该是23的矩阵,即x=[1,2,3;4,5,6];但是,如果将数组首地址x初始化mwArray类时,数组x在mwArray中是按“列向量”的形式排列的,即X=[1,3,5;2,4,6];同理,这里Y=[7,9,11;8,10,12];因此才能得到上图的结果特别说明二:通过MatlabAdd-in实现Matlab与VC++的混合编程也有不足,并不是所有的Matlab的函数都能转成C++函数,这一点在使用过程中要特别注意!8、程序的发布(1)使用VC附带的Depends工具找到应用程序所需要的dll文件,手动复制这些文件添加到应用程序所在的目录即可。(2)编译好的程序只要附带mglarchive.exe(在C:\MATLAB6p5\extern\lib\win32目录)中的数学和图形库即可在没装matlab的机器上运行
本文标题:如何将Matlab6.5函数转换成VC++6.0函数
链接地址:https://www.777doc.com/doc-4375583 .html