MATLAB C-MEX混合编程

MATLAB C-MEX混合编程

ID:38140059

大小:283.46 KB

页数:4页

时间:2019-06-01

MATLAB C-MEX混合编程_第1页
MATLAB C-MEX混合编程_第2页
MATLAB C-MEX混合编程_第3页
MATLAB C-MEX混合编程_第4页
资源描述:

《MATLAB C-MEX混合编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、MATLABC-MEX混合编程首先,C-MEX混合编程可以不用再VC,或VS环境中编写,调试,编译(但是要安装)。可以全部在Matlab软件中完成。MEX文件主要有以下用途:1.对于大量现有的C或者Fortran程序可以无须改写(相对而言,修改的很少,只需完成接口函数即可)成MATLAB专用的M文件格式而在MATLAB中执行。2.对于那些MATLAB运算速度过慢的算法,可以用C或者Frotran语言编写以提高效率。例子在matlab中的EDIT编辑如下文件,然后saveastimestwo.c。可以在“

2、Broot>externexamplemex”目录下找到其他的一些例子。#include"mex.h"/*timestwo.c本MEX文件的目的是实现timestwo的功能*/voidtimestwo(doubley[],doublex[]){y[0]=2.0*x[0];}/*下面这个mexFunction的目的是使MATLAB知道如何调用这个timestwo函数*/voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[])/*nlh

3、s是MATLAB命令行方式下输出参数的个数;*plhs[]是MATLAB命令行方式下的输出参数;nrhs是MATLAB命令行方式下输入参数的个数;*prhs[]是MATLAB命令行方式下的输入参数;*/{double*x,*y;//double指针类型不能改变!!intmrows,ncols;/*Checkforpropernumberofarguments.*/if(nrhs!=1)mexErrMsgTxt("Oneinputrequired.");elseif(nlhs>1)mexErrMsgTxt("Toom

4、anyoutputarguments");/*在MATLAB命令行方式下,本MEX文件的调用格式是y=timestwo(x)输入参数(x)个数=1,输出参数(y)个数=1,所以在程序一开始就检查nrhs是否=1以及nlhs是否>1(因为MATLAB有一个缺省输出参数ans,所以nlhs可以=0*/mrows=mxGetM(prhs[0]);/*获得输入矩阵的行数*/ncols=mxGetN(prhs[0]);/*获得输入矩阵的列数*/if(!mxIsDouble(prhs[0])

5、

6、mxIsComplex(prhs

7、[0])

8、

9、!(mrows==1&&ncols==1))mexErrMsgTxt("Inputmustbeanoncomplexscalardouble.");/*判断输入矩阵是否是double类,以及它是否只包括单个元素*//*为输出创建一个矩阵,显然这个矩阵也应该是1x1的*/plhs[0]=mxCreateDoubleMatrix(mrows,ncols,mxREAL);x=mxGetPr(prhs[0]);/*获得指向输入/输出矩阵数据的指针*/y=mxGetPr(plhs[0]);timestwo(y,x

10、);/*调用C函数timestwo(y,x)*/}把上面这个文件timestwo.c编辑完成后,在matlab命令行里输入:mextimestwo.cmatlab会提示你选择一个编译器进行编译,如果安装了VC,则选择VC++即可。编译完成后会在同一目录下生成同名的动态链接库文件timestwo.mexw32。此后再输入“mex***.c”编译mex文件时将不再提示用户选择编译器,而自动选择默认的编译器编译。若想改变编译器进行编译,可输入“mextimestwo.c–setup”。编译完成后即可使用此动态链接库了。在

11、MATLAB命令行下输入:x=2;y=timestwo(x)将会显示:y=4C语言MEX文件的构成两部分:(1)计算子程序。在例子中是:voidtimestwo(doubley[],doublex[]){y[0]=2.0*x[0];}(2)入口子程序。在例子中是:voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[])、{。。。。。。}/*nlhs是MATLAB命令行方式下输出参数的个数;*plhs[]是MATLAB命令行方式下的输出参数

12、;nrhs是MATLAB命令行方式下输入参数的个数;*prhs[]是MATLAB命令行方式下的输入参数;*/计算子程序是完全的c语言编写的,而入口子程序只需完成MATLAB系统与计算子程序的接口,相对简单。MEX函数的执行流程

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

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

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