matlab10001000矩阵,第章___MATLAB与C语言接口(改)

《第章___MATLAB与C语言接口(改)》由会员分享,可在线阅读,更多相关《第章___MATLAB与C语言接口(改)(26页珍藏版)》请在人人文库网上搜索。

1、第7章 MATLAB与语言接口,MATLAB是矩阵语言,是为向量和矩阵操作设计的,一般来说,如果运算可以用向量或矩阵实现,其运算速度是非常快的。但若运算中涉及到大量的循环处理,MATLAB的速度的令人难以忍受的。解决方法之一为,当必须使用for循环时,把它写为MEX文件,这样不必在每次运行循环中的语句时MATLAB都对它们进行解释。,MATLAB作为世界顶尖的数学应用软件,以其强大的工程计算、算法研究、工程绘图、应用程序开发、数据分析和动态仿真等功能,在航空航天、机械制造和工程建筑等领域发挥着越来越重要的作用。而C语言功能丰富,使用灵活方便,目标程序效率高。既有高级语言的优点,又有低级语言的特。

2、点。因此,C语言是目前应用最广的编程语言。虽然MATLAB是一个完整的、功能齐全的编程环境,但在某些情况下,与外部环境的数据和程序的交互是非常必须而且有益的。 众所周知,MATLAB是用M语言编程,不能在M文件中直接调用C语言程序。可以通过MATLAB提供的应用编程接口(API)来实现与外部的接口,在MATLAB环境中实现调用C语言或Fortran程序、输入或输出数据以及和其他软件程序间建立客户/服务器关系等功能。 MATLAB中调用C语言程序,必须通过MEX文件来实现。,一、 C语言的MEX文件的结构 C语言的MEX文件是一种动态连接子程序,可以象调用M文件一样调用它。MEX文件主要有以下几。

3、方面的应用: (1)在MATLAB中,M文件的计算速度特别是循环迭代的速度远比C语言慢,因此可以把要求大量循环迭代的部分用C语言编写为MEX文件,提高计算速度。 (2)已经开发的C语言程序,则不必将其转化为M文件而重复劳动,通过添加入口程序mexFunction,可以由MATLAB调用。 (3)直接控制硬件,如A/D采集卡,D/A输出卡等,以用于数据采集或控制应用。,C语言的MEX文件的源程序由两个非常明显部分组成: (1)计算程序,即在MEX文件中完成计算功能的程序代码,计算程序可以是普通的C语言程序,按照C语言规则编写即可 (2)入口程序,将计算程序与MATLAB连接的入口函数mexFun。

4、ction。入口程序mexFunction相对要复杂一些,函数中有四个参数nlhs、plhs、nrhs和prhs。这里nlhs是输出数据的个数,plhs是指向mxArray(MATLAB中所有数据都由mxArray定义)的输出数据的指针,nrhs是输入数据的个数,prhs是指向mxArray的输入数据的指针。,二、 使用MEX文件 上面所述的MEX文件的两个主要部分在使用中可以是独立的,也可以是组合在一起的。不管是哪一种情况,MEX文件都必须包含头文件mex.h,以便正常申明入口程序。入口程序的名字必须是mexFunction而且必须包含这些参数: void mexFunction(int n。

5、lhs,mxArray *plhs,int nrhs,const mxArray *prhs) 在C语言的MEX文件中,参数nlhs和nrhs包含输出和输入变量的数目,借助于这两个参数,MEX文件被调用。参数plhs和prhs是包含指向MEX文件输出和输入变量的指针的向量,prhs是长度为nrhs的输入变量的指针数组,plhs是长度为nlhs的输出变量的指针数组。比如从MATLAB命令窗口来调用一个MEX文件,MEX文件的计算过程和入口过程也可以合并在一起。但不管那种情况,都要包含#include mex.h,以保证入口点和接口过程的正确声明。注意,入口过程的名称必须是mexFunction,。

6、并且包含四个参数,即: void mexFunction(int nlhs,mxArray *plhs,int nrhs,const mxArray *prhs) 其中,参数nlhs和nrhs表示MATLAB在调用该MEX文件时等式左端和右端变量的个数,例如在MATLAB命令窗口中输入以下命令: a,b,c=Matlab_1(d,e,f,g) 则nlhs为3,nrhs为4。,MATLAB在调用MEX文件时,输入和输出参数保存在两个mxArray*类型的指针数组中,分别为prhs和plhs。prhs0表示第一个输入参数,prhs1表示第二个输入参数,以此类推。如上例中,dprhs0,eprhs1。

7、,fprhs2,fprhs3。同时注意,这些参数的类型都是mxArray *。 接口过程要把参数传递给计算过程,还需要从prhs中读出矩阵的信息,这就要用到下面的mx-函数和mex-函数。,三、常用的mex-函数 在MATLAB6.5版本中,mex-函数有38个,下面我们仅介绍常用的函数。 1入口函数mexFunction 该函数是C MEX文件的入口函数,它的格式是固定的: void mexFunction(int nlhs,mxArray *plhs,int nrhs,const mxArray *prhs),说明: MATLAB函数的调用方式一般为:a,b,c,=被调用函数名称(d,e,。

8、f,),nlhs保存了等号左端输出参数的个数,指针数组plhs具体保存了等号左端各参数的地址,注意在plhs各元素针向的mxArray内存未分配,需在接口过程中分配内存;nrhs保存了等号右端输入参数的个数,指针数组prhs具体保存了等号右端各参数的地址,注意MATLAB在调用该MEX文件时,各输入参数已存在,所以在接口过程中不需要再为这些参数分配内存。,四、编译器的安装与配置 要使用MATLAB编译器,用户计算机上应用事先安装与MATLAB适配的以下任何一种ANSI C/C+编译器: 5.0、6.0版的MicroSoft Visual C+(MSVC) 5.0、5.2、5.3、5.4、5.5。

9、版的Borland C+ LCC(由MATLAB自带,只能用来产生MEX文件),五、安装与配置MATLAB编译器应用程序MEX的设置的步骤: (1)在MATLAB命令窗口中运行mex setup,出现下列提示: Please choose your compiler for building external interface (MEX) files: Would you like mex to locate installed compilers y/n? (2)选择y,MATLAB将自动搜索计算机上已安装的外部编译器的类型、版本及所在路径,并列出来让用户选择: Please choose。

10、 your compiler for building external interface (MEX) files: Would you like mex to locate installed compilers y/n? y Select a compiler: 1 Digital Visual Fortran version 6.0 in C:Program FilesMicrosoft Visual Studio 2 Lcc C version 2.4 in E:MATLAB1022syslcc 3 Microsoft Visual C/C+ version 6.0 in C:Pro。

11、gram FilesMicrosoft Visual Studio 0 None,(3)选择其中一种(在这里选择了3),MATLAB让用户进行确认: Compiler: Microsoft Visual C/C+ 6.0 Location: C:Program FilesMicrosoft Visual Studio Are these correct?(y/n): (4)选择y,结束MATLAB编译器的配置。 Try to update options file: C:Documents and SettingswymApplication DataMathWorksMATLABR14mex。

12、opts.bat From template: E:MATLAB1022BINWIN32mexoptsmsvc60opts.bat Done . . .,例1 一个简单的MEX文件例子 【例1】用m文件建立一个10001000的Hilbert矩阵。 tic m=1000; n=1000; a=zeros(m,n); for i=1:1000 for j=1:1000 a(i,j)=1/(i+j); end end toc elapsed_time = 0.06200,在记事本中输入以下程序: Matlab_1.cpp #include mex.h /计算过程 void hilb(double 。

13、*y, int n) int i,j; for(i=0;in;i+) for(j=0;jn;j+) *(y+j+i*n)=1/(double)i+(double)j+1); ,/接口过程 void mexFunction(int nlhs,mxArray *plhs,int nrhs,const mxArray *prhs) double x,*y; int n; if (nrhs!=1) mexErrMsgTxt(One inputs required.); if (nlhs != 1) mexErrMsgTxt(One output required.); if (!mxIsDouble(。

14、prhs0)|mxGetN(prhs0)*mxGetM(prhs0)!=1) mexErrMsgTxt(Input must be scalars.); x=mxGetScalar(prhs0); plhs0=mxCreateDoubleMatrix(x,x,mxREAL); n=mxGetM(plhs0); y=mxGetPr(plhs0); hilb(y,n); ,该程序是一个C语言程序,它也实现了建立Hilbert矩阵的功能。在MATLAB命令窗口输入以下命令:mex Matlab_1.cpp,即可编译成功。进入该文件夹,会发现多了两个文件:Matlab_1.asv和Matlab_1.d。

15、ll,其中Matlab_1.dll即是MEX文件。运行下面程序: tic a=Matlab_1(1000); toc elapsed_time = 0.0320 由上面看出,同样功能的MEX文件比m文件快得多。,7.2 MATLAB计算引擎,MATLAB的计算引擎应用就是利用MATLAB提供的一组接口函数,在用户开发的C/C+语言应用程序中,通过某种通信机制后台调用MATLAB应用程序以完成复杂的系统任务。,例7-3,设计一程序,在C/C+语言中调用mesh函数来绘制高斯矩阵的曲面。 解题步骤:,7.3基于COM组件的接口编程,该方法的主要特点有: (1)应用程序完全脱离MATLAB工作环境;。

16、 (2)MATLAB数学库和工具箱中包括的各种各样的函数,所以降低了编写算法难度; (3)由于将算法程序做成了COM组件的形式,所以实现了算法的保密。,7.4在C/C+语言中读写MAT数据文件,支持C/C+语言读写MAT文件的函数库有下面几个: 1打开数据文件matOpen MATFile * matOpen(const char *filename,const char *mode) 2关闭数据文件matClose int matClose(MATFile *mfp) 3获取变量matGetVariable mxArray *matGetVariable(MATFile *mfp,const。

17、 char *name) 4写入数据matPutVariable int matPutVariable(MATFile *mfp, const char *name,const mxArray *mp),应用举例,例7-5 在C/C+语言中调用MATLAB计算魔方阵,并将结果显示到屏幕。,例7-4,实验七 MATLAB与C语言接口编程 (2学时) 1、目的要求 掌握MATLAB与C语言接口编程方法与应用。 2、主要实验仪器及材料 微型计算机、Matlab7.0教学版、TC编程环境。 3、掌握要点 掌握用MATLAB与C接口编程方法,重点是C语言调用MATLAB。 4、实验内容 (1)、完成ma。

18、tlab对C函数的调用; (2)、完成C语言对matlab函数的调用; (3)、对方法进行总结完成实验报告;,补充(数据分析),1、将10个学生的5门功课的成绩存入矩阵中,进行如下处理 (1)分别求每门课的最高分、最低分及相应学生序号; (2)分别求每门课的平均分和标准方差; (3)5门课总分的最高分、最低分及相应学生学号; (4)将5门课总分按从大到小顺序存入zcj中,相应学生序号存入xsxh。 2、 已知h(t)=exp(-t).取N=64,试对t从05秒采样,用fft作快速傅立叶变换,绘制相应的振幅-频率图。,学好计算机的唯一途径是 你的编程能力与你在计算机上投入的时间成,结束语,上机练习,正比,实验七 MATLAB与C语言接口编程 (2学时) 1、目的要求 掌握MATLAB与C语言接口编程方法与应用。 2、主要实验仪器及材料 微型计算机、Matlab7.0教学版、TC编程环境。 3、掌握要点 掌握用MATLAB与C接口编程方法,重点是C语言调用MATLAB。 4、实验内容 (1)、完成matlab对C函数的调用; (2)、完成C语言对matlab函数的调用; (3)、对方法进行总结; 5、完成实验报告。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值