发布网友 发布时间:2022-04-30 00:03
共2个回答
热心网友 时间:2022-06-26 18:06
通过MEX文件可以在MATLAB中像调用内嵌函数一样调用现有的使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能解决MATLAB循环效率低的缺点,提高MATLAB环境中数据处理的效率。MEX文件的后缀名为.mexw32MEX文件的编写和编译需要两个基本条件:一是必须按照MATLAB应用程序接口组件和相关工具,二是要有C语言或Fortran语言的编译器。需要对MATLAB系统进行设置,使MATLAB系统知道使用系统的哪一个C语言编译器,以及其参数和路径。MEX文件系统设置:>>mex–setup按照提示进行,最后出现Done…系统配置完毕。C语言MEX文件的建立C语言MEX文件的建立1.MEX文件的结构a)计算子程序b)入口子程序,voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){/*用户特定的代码….*/}2.创建timestwoalt.c#include"mex.h"voidtimestwo_alt(double*y,doublex){*y=2.0*x;}voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*y;doublex;/*检查参数*/if(nrhs!=1){mexErrMsgTxt("Oneinputargumentrequired.");}elseif(nlhs>1){mexErrMsgTxt("Toomanyoutputarguments.");}elseif(!mxIsNumeric(prhs[0])){mexErrMsgTxt("Argumentmustbenumeric.");}elseif(mxGetNumberOfElements(prhs[0])!=1||mxIsComplex(prhs[0])){mexErrMsgTxt("Argumentmustbenon-complexscalar.");}/*为输出参数创建变量*/plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL);/*为参数x、y赋值,x为值,而y为指针(由于MATLAB没有值传递,所以用指针才能得到修改后的y值,不然修改的是y的一个副本,为临时变量,在函数返回时,y值没有变化,不能得到希望的结果)*/x=mxGetScalar(prhs[0]);y=mxGetPr(plhs[0]);/*调用timestwo_alt子函数*/timestwo_alt(y,x);}3.编译链接C语言的MEX文件源程序,在MATLAB的控制窗口中输入:mextimestwoalt.c生成一个名为timestwoalt.mexw32的MEX文件4.运行:在MATLAB的控制窗口中输入x=2;y=timestwoalt(x)输出:y=4MEX文件实现了一种C语言与MATLAB的接口,其实际的计算功能仍在C语言形式的计算子程序中完成,而入口子程序的功能是检查参数以匹配C语言的参数规范(howto?)。当有C语言编写的大型程序时,不必用MATLAB语言重新编写,只要将此C语言程序作为一个计算子程序,然后编写一个入口子程序,完成参数的匹配,然后编译成MEX文件即可。MEX文件的另外一个功能是可以将MATLAB编程中的瓶颈问题,如多重循环等,将此类费时的指令用C语言实现,然后作必要的入口子程序,编译成MEX文件,可以有效地提高MATLAB的效率。S-函数创建器*了C语言S-函数的功能:只能有一个输入信号和一个输出信号,而且只能处理double类型的数据!所以,可用性不大。热心网友 时间:2022-06-26 18:06
编译器必须安装在C盘嘛????