用MEX文件实现Matlab中调用C函数 matlab如何调用函数

最近要把以前写的C代码移植到Matlab下,但是C代码中到处是链表、栈什么的Matlab表示无能为力了。所以我花了些时间研究MEX。百度百科说MEX文件是一种“可在Matlab环境中调用的C(或fortran)语言衍生程序”。用途当然是利用C的优点,解决Matlab中的低效率的问题(比如链表)。
用MEX文件实现Matlab中调用C函数 matlab如何调用函数
我在这里提供了一个模板,以后写MEX可以参考这个用。这个程序的功能是输入两个数,输出一个2x2的矩阵,里面是这两个数的和差积商。
#include "mex.h"
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, constmxArray *prhs[]){ double*matrix_ptr; double*a_ptr, *b_ptr; if(nlhs> 1) { mexErrMsgTxt("Too many outputarguments."); } if(nrhs!= 2) { mexErrMsgTxt("Must have twoinput arguments."); } plhs[0]= mxCreateDoubleMatrix(2, 2, mxREAL);matrix_ptr = mxGetPr(plhs[0]); a_ptr =mxGetPr(prhs[0]); b_ptr =mxGetPr(prhs[1]);this_is_a_function_of_which_i_dont_care_about_the_name(matrix_ptr,a_ptr, b_ptr);
}
voidthis_is_a_function_of_which_i_dont_care_about_the_name(doublematrix_ptr[], double a_ptr[], double b_ptr[]){ doublea = a_ptr[0]; doubleb = b_ptr[0]; matrix_ptr[0] = a + b;matrix_ptr[1] = a - b;matrix_ptr[2] = a * b;matrix_ptr[3] = a / b;return;}
拿到这段代码,把它们复制到一个xxxxxx.c的文本中,然后在Matlab中用mexxxxxxx.c的指令进行编译(第一次用时可能要先用mex-setup指令设置编译器),编译出的mex文件就可以当m文件使用,如,c=xxxxxx(3,4),则c =
7.0000 12.0000 -1.0000 0.7500
下面讲这个代码怎么改。首先,要包含mex.h,不然很多函数不能用。有两个函数,一个叫mexFunction,它的名字和参数是不能随便改的。这些参数是很重要的:nlhs是在Matlab中调用这个MEX时等号左边的参数个数,plhs是一个指针数组(即每一个元素都是一个指针),然后每一个指针指着一个在Matlab中调用时等号左边的参数。后面两个参数同理是等号右边的。两个if很明显是检测参数是否正确了,为安全起见。 plhs[0]= mxCreateDoubleMatrix(2, 2,mxREAL);是给等号左边的第一个参数分配一个2x2的double空间,我们最后的2x2矩阵结果就是要存在这里的。然后三个mxGetPr可以理解为把奇怪的mxArray*类型转成double*。最后一行,传入我们自定义的函数。自定义的函数的目的就是修改plhs,在这个例子中只有一个输出参数所以只修改plhs[0]。很简单吧。注意:1、数组的寻址是按列优先的。2、Matlab中默认都是double类型,整数也是,所以不要用int*接收。3、一定谨慎区别指针与指针数组。其他的资料就都是英文的了,问Google吧。

  

爱华网本文地址 » http://www.aihuau.com/a/25101017/355073.html

更多阅读

BT文件下载文件名中包含违规内容怎么办? 文件名包含违规

BT文件下载文件名中包含违规内容怎么办?——简介最近在网上找到一些种子想用同学给我的VIP迅雷号来下载,可是老是提示“文件名中包含违规内容...”,怎么办呢?我这就教你怎么解决。BT文件下载文件名中包含违规内容怎么办?——工具/原料

Windows 7中清理c盘方法 c盘windows文件夹清理

装完Win7 C盘本来还有50G的空余空间,可没过多久就只剩了1、2G了,这种情况经常出现。那么究竟我们电脑的C盘里有些什么东西在作怪,怎样才能简单方便的清除它们,下面就让我们来一起看一下C盘的奥秘吧。Windows 7中清理c盘方法——工具/原

如何在html中调用js代码 html5如何调用js文件

如何在html中调用js代码——简介js代码即为javascript代码,可直接在客户端解释执行,在html中调用js代码的方法主要有两种:一、将javascript直接写在html文件中,然后在html中调用js函数等;二、将js代码写一个文件中,然后在html中引用该文件

怎样在控制面板中创建关联 文件夹选项中创建关联

怎样在控制面板中创建关联——简介大家在平时使用电脑的过程中,可能会遇到一些文件关联的问题,比如说,Windows操作系统提醒“该文件没有程序与之关联来执行该操作,请在控制面板的文件夹选项中创建关联”,因此这里我将向大家介绍一下如何

声明:《用MEX文件实现Matlab中调用C函数 matlab如何调用函数》为网友爱滚分享!如侵犯到您的合法权益请联系我们删除