【vc++精品源码栏目提醒】:网学会员为需要vc++精品源码的朋友们搜集整理了【精品】第6章++MATLABC语言混编 - 大学课件相关资料,希望对各位网友有所帮助!
第6章 应用程序接口 6.1 matlab编译器 6.2 C-MEX语言编写 6.3 matlab计算引擎技术编译器的功能1.产生C源码,并进而生成MEX文件(DLL 文件)从而提高程序运行速度。
2.产生C或C源码,便于与C/C模块结合 形成独立的外部应用程序。
3.创建独立的应用程序,脱离Matlab软件环 境独立运行。
一个简单的例子作圆,脚本文件(Matlab主程序)如下: clf r2 t0:pi/100:2pi xrexpit plotxr axissquare改为函数文件 function circle_fr clf t0:pi/100:2pi xrexpit plotxr axissquare 编译之后产生一个circle_f.dll的文件, matlab直接调用dll文件。
编译器的安装和配置matlab自带LCC编译器。
或者,事先安装与matlab适配的ANSI C/C编译器:5.0,6.0版的Microsoft VC/CMSVC5.0-5.5版的borland C;安装matlab时,必须选中一下三个选项:配置: 1.在matlab窗口中运行mex –setup2.Matlab自动搜索本机安装的编译器,罗列出来, 然后用户输入相应罗列编号选择满意的编译器。
3.对配置数据的确认:输入y即可。
备注:如需修改编译器种类,可重复如上过程,选择适当 的编译器。
编译入门:编写M文件,然后生成MEX文件,改文件用以判断 方阵是否奇异。
(由M文件创建C MEX文件) function yexm1a mnsizea if mn errora must be nn end rranka if rm dispa is nonsigular else dispa is sigular end由M文件创建外部应用程序: 建立一个脱离matlab环境,可独立运行的外部程 序。
该程序功能是:对于给定矩阵A,如果存在S 使得S-1AS∧,则求出一个S,否则给出信息说明 不能对角化。
文件exm2.m: function exm2 a400031013 sexm2_fa function sexm2_fa mnsizea if mn error请输入n阶方阵 end eeiga same0 for i1:m-1 for ji1:m if ejei same1 end end end if anyanya-asame1 error矩阵不能对角化 end vdeiga sv关于编译指令mcc1.mcc –x filename1由源码文件filename1生成MEX文件filename1.dll2.Mcc –s sfuncname由源码文件生成S函数文件。
3.Mcc –m filename1由(不曾调用绘图指令的)文件filename1.m生成c 的EXE可独立执行文件。
4.Mcc –p filename1由(不曾调用绘图指令的)文件filename1.m生成 c的EXE可独立执行文件。
5.Mcc –b sgl filename1由(包含绘图指令的)文件filename1.m生成c 的EXE可独立执行文件。
6. Mcc –b sglcpp filename1由(包含绘图指令的)文件filename1.m生成 c的EXE可独立执行文件。
7. Mcc –b pcode filename1创建文件filename1.m的p码文件。
6.2 C-MEX语言编写什么是mex?MEX文件是一种“可在matlab中调用的C (或fortran)语言衍生程序。
1.Mex文件源码由C或fortran语言编写;2.经matlab编译器处理而生成的二进制文件;3.可以被matlab(解释器)自动装载,并执 行的动态链接程序;4.在matlab命令提示符下键入mex文件名即可。
应用场合:混编 已经存在的大规模C和fortran程序,在 matlab中直接调用,而无需重编m文件。
在matlab中计算瓶颈,可以用C或fortran编 写,然后构成mex文件执行。
直接面向硬件编写的C或fortran程序可以通 过mex文件被matlab调用。
总而言之:根据需要进行混编。
C语言mex文件源程序的构成 include “mex.h” C语言函数 接口子例程:Void mexfunctionint nlhsmxarray plhsint nrhsconst mxarray prhs参数自检函数;值,指针(地址)传递函数;调用C语言函数;备注: C语言函数不一定是内部的,可以是独立的 .c的文件形式的;mex调用外部c函数,编 译时候需要将外部函数一起编译; 参数自检函数不是必须的,省略的情况下 在正确的参数输入情况下能给出正确的结 果,但是错误的参数输入时候,可能出现 “意料之外”的错误; Mex调用C函数时候,mex可以将函数的返 回值作为实参,传递给C函数形参。
当然也 可以让C函数返回函数值,mex主函数接收 返回值。
举例: include mex.h void myplusdouble ydouble xdouble z y0x0z0 void mexFunctionint nlhsmxArray plhsi