收藏 分销(赏)

matlab7.0与c++2005混合编程.doc

上传人:xrp****65 文档编号:7667978 上传时间:2025-01-11 格式:DOC 页数:4 大小:35KB 下载积分:10 金币
下载 相关 举报
matlab7.0与c++2005混合编程.doc_第1页
第1页 / 共4页
matlab7.0与c++2005混合编程.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
VS2005如何调用Matlab7定义的.m文件中的函数 以一个简单的例子来说明一下如果在VC中调用matlab中定义的.m文件. 与Matlab6.5稍有不同。 (一) 先建立matlab的m文件 这里为了简单起见,我在matlab中定义了一个求和函数, 其m文件如下: function y = add_zh(a,b)                   y=a+b 保存为myadd.m (二) 对matlab编译环境进行设置 为操作系统添加环境变量:在环境变量(我的电脑->右键->高级)path中加入<MATLAB7_root>\bin\win32 打开matlab,在命令行状态下键入:mex -setup   然后出现如下提示: -------------------------------------------------------------------------------------- Select a compiler:  [1] Intel C++ 9.1 (with Microsoft Visual C++ 2005 SP1 linker)  [2] Intel Visual Fortran 10.1 (with Microsoft Visual C++ 2005 SP1 linker)  [3] Intel Visual Fortran 9.1 (with Microsoft Visual C++ 2005 SP1 linker)  [4] Lcc-win32 C 2.4.1  [5] Microsoft Visual C++ 6.0  [6] Microsoft Visual C++ .NET 2003  [7] Microsoft Visual C++ 2005 SP1  [8] Microsoft Visual C++ 2008 Express  [9] Microsoft Visual C++ 2008 SP1  [10] Open WATCOM C++  [0] None Compiler: -------------------------------------------------------------------------------------- 这里我们选择 '7’。(如果使用其他的编译器,可以相应的选择) 然后,继续在命令行状态下输入: mbuild –setup -------------------------------------------------------------------------------------- Please choose your compiler for building standalone MATLAB applications: Would you like mbuild to locate installed compilers [y]/n? n Select a compiler:  [1] Lcc-win32 C 2.4.1  [2] Microsoft Visual C++ 6.0  [3] Microsoft Visual C++ .NET 2003  [4] Microsoft Visual C++ 2005 SP1  [5] Microsoft Visual C++ 2008 Express  [6] Microsoft Visual C++ 2008 SP1  [0] None -------------------------------------------------------------------------------------- 这里需要几步确认。大家按情况操作即可。 (三) 对VC的编译器环境进行设置 在"工具->选项->项目和解决方案->VC++目录"里面设置include和lib的路径,分别添加一项,指向matlab安装目录中的 \extern\include 和\extern\lib\win32\microsoft (四) 这一步比较关键。在这一步中,将matlab中的.m文件转换为dll 在matlab命令行中输入: mcc -W lib:addtest -T link:lib myadd.m -W lib:addtest   表示生成DLL所需的addtest.h   addtest.lib   addtest.dll -T link:lib          表示编译生成的目标(Target)文件类型为DLL 至此,可以发现在myadd.m所在的目录中产生了一大堆文件。我们只用其中3个:           addtest.h    addtest.lib     addtest.dll (五) 新建一个VC工程 为了简单,我们在这里建立一个空的Win32控制台应用程序来进行演示。 然后,将上面这3个文件拷贝到VC工程所在的目录中,以便VC调用之,并将 addtest.h 加入到当前工程中。 (六) 进行VC编程 首先,在cpp文件中加入: #include “addtest.h” #include “mclmcrrt.h”   #include “mclmcr.h” 然后,设置VC的链接库。在"项目->属性->属性配置->链接器->输入->附加依赖项"中添加 addtest.lib mclmcr.lib mclmcrrt.lib libmx.lib libmat.lib libeng.lib 至此,VC的编译环境设置完毕。下面就是编程部分了。 (七) 编程部分的关键:接口和数据类型的转换 先给出VC实现的源代码: ------------------------------------------------------------------------ int main(void) {       addtestInitialize(); //addtestInitialize是addtes.h中定义的函数的初始化函数       //为了调用matlab中的函数,必须使用数组数据类型,并其后调用matlab函数将其转化为矩阵格式(matlab的基本数据类型是矩阵)       static double x1[4]={1.0,2.0,100.5,200.1};       static double x2[4]={2.5,13.2,200.5,10.5};       double result[4];       //调用matlab创建3个矩阵,经过matlab编译完的dll 中的函数只能识别mxArray 类型的参数,所以我们在vc中定义的数值都需要转换成该种格式        mxArray *A=mxCreateDoubleMatrix(1,4,mxREAL);   //创建一个1x4的矩阵A       memcpy(mxGetPr(A),&x1,4*sizeof(double));     //给矩阵赋值       mxArray *B=mxCreateDoubleMatrix(1,4,mxREAL);       memcpy(mxGetPr(B),&x2,4*sizeof(double));       mxArray *C=mxCreateDoubleMatrix(1,4,mxREAL);       mlfMyadd(1,&C,A,B);   //调用m文件函数(注意:函数名myadd首字母必须大写)       memcpy(&result,mxGetPr(C),4*sizeof(double));       cout<<result[0]<<" "<<result[1]<<" "<<result[2]<<" "<<result[3]<<endl;       //释放矩阵        mxDestroyArray(A);        mxDestroyArray(B);        mxDestroyArray(C);       addtestTerminate();//中止调用       return 0; } ------------------------------------------------------------------------ 相信看到里面的注释,我们就明白的差不多了。 VC编程以实现对matlab函数的调用,例如VC中我们实现两个double型的相加,则需要做上述的编程:首先定义两个数组并存入我们要进行函数操作的数据(也就是所谓的实参);然后将这两个数组转换为matlab可以识别的矩阵;然后调用m文件中自定义的函数,对矩阵进行操作;最后将结果再转回VC支持的数据格式: 至此,经matlab函数处理过的数据已经存入了VC中的result变量。         大家可以看出来,在进行调用的时候,我们使用的是m文件的文件名myadd,而不是m文件中定义的函数名add_zh(a,b)。 * mex -setup中间有个空格。 ++++++++++++++++++++++++++++++++++++++++++++++++++
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服