通过MEX文件可以在MATLAB中像调用内嵌函数一样调用现有的使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能解决MATLAB循环效率低的缺点,提高MATLAB环境中数据处理的效率。MEX文件的后缀名为mexw32MEX文件的编写和编译需要两个基本条件:一是必须按照MATLAB应用程序接口组件和相关工具,二是要有C语言或Fortran语言的编译器。需要对MATLAB系统进行设置,使MATLAB系统知道使用系统的哪一个C语言编译器,以及其参数和路径。MEX文件系统设置:>>mex–setup按照提示进行,最后出现Done…系统配置完毕。C语言MEX文件的建立C语言MEX文件的建立1MEX文件的结构a)计算子程序b)入口子程序,voidmexFunction(intnlhs,mxArrayplhs[],intnrhs,constmxArrayprhs[]){/用户特定的代码…/}2创建timestwoaltc#include"mexh"voidtimestwo_alt(doubley,doublex){y=20x;}voidmexFunction(intnlhs,mxArrayplhs[],intnrhs,constmxArrayprhs[]){doubley;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的控制窗口中输入:mextimestwoaltc生成一个名为timestwoaltmexw32的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类型的数据!所以,可用性不大。
方法1
使用addpath函数将指定目录的路径加入到matlab的搜索路径.完成后可在任何路径下调用该目录的函数.
addpath('foldername1','foldername1','foldername1',);
方法2
临时调用
①cd 'foldername'; %该命令可以将maltab的当前路径临时改到指定目录,但是在下次运行matlab时候该路径会回复到maltab的默认路径.
②path('foldername'); %该命令可以将指定目录的路径临时添加到matlab的搜索路径(不改变maltab的当前路径),但是在下次运行maltab时候该路径将被移除出maltab的搜索路径.
以上几种方法都可以让调用指定目录下的函数,可以根据个人实际需要选择不同的方案.
您好,这样的:
闲着没事的做法是,使用save mat的命令,想查看的时候,load mat就可以了。
再就是设置全局变量,子程序中想要用的变量弄成全局变量。
这段代码不要再命令窗口中写,而是在M文件的Editor建立一个文件,只写前三行,比如保存为testadd把,而把function及其下一行放在令一个文件中,直接保存,文件名千万别改,执行testadd应该就没问题了。
你只是一个变量的话,在子程序中用global X,在主程序中同样也要加上global X,这样用Ode45就这接可以调用这个变量求解,还不懂就补充明白,把你想要完成的功能说的清楚些。
以上就是关于matlab怎么调用mex文件全部的内容,包括:matlab怎么调用mex文件、matlab 如何调用指定目录下的函数、matlab子程序应用主程序变量的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)