C语言实现MATLAB6.5中M文件的方法.doc

C语言实现MATLAB6.5中M文件的方法.doc

ID:51687364

大小:43.45 KB

页数:4页

时间:2020-03-15

C语言实现MATLAB6.5中M文件的方法.doc_第1页
C语言实现MATLAB6.5中M文件的方法.doc_第2页
C语言实现MATLAB6.5中M文件的方法.doc_第3页
C语言实现MATLAB6.5中M文件的方法.doc_第4页
资源描述:

《C语言实现MATLAB6.5中M文件的方法.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C语言实现MATLAB6.5中M文件的方法摘要:本文着重描述了运用MATLAB命令将M文件翻译为C语言程序,并修改为可直接调用的C语言函数的方法,使用该方法所需要注意的方法局限性和MATLAB版本差异的影响。运用该方法将能够使C语言能直接使用MATLAB当中已经完成的数学计算功能,大大扩充了C语言的数学计算功能和开发效率。关键词:MATLAB;M文件;C语言接口众所周知,MATLAB是一个功能强大的数学软件,擅长于用矩阵运算完成各种数学功能。但是其程序需要在MATLAB环境下解释执行,效率不高。如果能将它强大的函数库用于C语言,利用C来编译执行,MATLAB将能发挥更大的作用。所以,

2、MATLAB从5.0开始已经提供了与外部C/C++程序的应用程序接口,为利用C语言调用MATLAB的函数提供了可能。但是MATLAB的接口发展很快,到MATLAB6.5已经提供了对VC7.0的支持,同时对C的接口相对于5.X版本有了一定的改变。在MATLAB当中,我们利用M文件来实现函数,每一个M文件实现一个单独的功能,这一点和C语言当中的函数是相互对应的。所以,如果我们能将MATLAB中的M文件转化为C语言下的一个单个函数,就能实现MATLAB中相应的功能。实现方法整个过程可分为三个主要部分,用MATLAB将M文件翻译为C语言文件,从生成的C语言文件提取出有用语句,编写数据转换程序

3、实现参数格式转换。整个过程最终将把M文件翻译成C语言当中的一个具有相同功能的函数,供其它的程序调用。本文用一个最简单的M文件来示例:文件名:messay.mfunctionc=messay()a=3.4;b=5.6;c=sqrt(a)+sqrt(b);该m文件实现了计算1、将M文件编译为C语言文件为了将M文件翻译为C语言文件,需要进行一定的设置,这里假设编写C语言的环境为VC6.0,在MATLAB命令提示符下输入mex-setup和mbuild-setup命令,在相应选项中选择MicrosoftVisualC/C++即可。在MATLAB命令行中使用mcc命令将messay.m翻译为C

4、代码。mcc-mmessay.m其中的参数-m代表mcc命令将把m文件翻译成C语言的代码。翻译命令将在messay.m所在的文件夹下生成三个C语言文件:messay.h,messay.c和messay_main.c。其中messay_main.c提供了main()函数;messay.h提供了整个程序的函数声明;messay.c包含了MATLAB生成的功能函数。这三个文件当中,messay.c中包含了我们所需要的数学函数。2、提取有用语句通过分析,发现由mcc生成的代码内部参数传送方式由MATLAB链接库规定,难以改动,因此需要提取有用的代码,并更改生成代码的参数传递方式。同时从生成代

5、码的注释中可以看出,真正蕴含M文件功能实现的代码段都在Mmessay()函数当中(该函数名的默认构造方式为前缀M加上M文件的文件名),而其它的生成函数仅实现参数传递和标准化接口服务的功能。所以提取代码的具体方法是利用messay.c当中生成的staticmxArray*Mmessay(intnargout_)函数,对该函数进行修改,而其他的生成函数都可以忽略不用。原生成的Mmessay()代码如下:staticmxArray*Mmessay(intnargout_){mexLocalFunctionTablesave_local_function_table=mclSetCurren

6、tLocalFunctionTable(&_local_function_table_messay); mxArray*c=NULL; mxArray*b=NULL; mxArray*a=NULL; mlfAssign(&a,_mxarray0_); mlfAssign(&b,_mxarray1_); mlfAssign(&c,mclPlus(mlfSqrt(mclVv(a,"a")),mlfSqrt(mclVv(b,"b")))); mclValidateOutput(c,1,nargout_,"c","messay"); mxDestroyArray(a); mxDestroyA

7、rray(b); mclSetCurrentLocalFunctionTable(save_local_function_table_); returnc;}在生成代码当中,mclSetCurrentLocalFunctionTable和mclSetCurrentLocalFunctionTable函数为两个外部函数,将参数传给外部,与其相关的部分都对C程序使用数学函数没有影响。最终实际有用并执行运算的只有一句:mlfAssign(&c,mclPlus(m

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。