• 即将更新图形学,编译原理,机器学习等文章,谢谢关注~
  • 由于算法限制,搜索时注意简化关键字,谢谢支持~
  • 网站不兼容IE5.0及以下,请使用主流浏览器访问.
  • MATLAB调用C/C++

    Matlab是矩阵语言,如果运算可以用矩阵实现,其运算速度非常快。但若运算中涉及到大量循环,Matlab的速度令人难以忍受的。当必须使用for循环且找不到对应的矩阵运算来等效时,可以将耗时长的函数用C语言实现,并编译成Mex文件,Matlab便可以像调用内建函数一样调用C编写的函数。Mex文件其实是一种动态链接库,旧版本Matlab可以直接调用.dll,新版本要调用.mexw32或.mexw64文件。

    编译过程需要C语言编译器,在Matlab中键入mex –setup进行安装与配置。

    MEX文件的源代码组成

    (1)功能子程序。该过程包含了Mex文件实现计算功能的代码,是标准的C语言子程序。

    (2)入口子程序。该过程提供功能子程序与Matlab之间的接口,以mexFunction函数实现。注意,入口过程的名称必须是mexFunction,并且包含四个参数,即

    void mexFunction(int nlhs,mxArray*plhs[],int nrhs,const mxArray *prhs[]);

    nrhs(left hand side): 输入参数的个数;

    prhs是一个输入数组,其内容为指针,指向mxArray类型的数据(MATLAB中所有数据都是以矩阵的形式mxArray保存的)。

    nlhs, plhs含义类似。

    具体地,若在Matlab中执行[a,b]=test(c,d,e) ,则nlhs=2, nrhs=3,prhs[0]指向c,prhs[1]指向d,prhs[2]指向e(可以理解为:prhs[0]=&c, prhs[1]=&d, prhs[2]=&e),注意prhs是const指针数组,故不能改变其指向内容;函数返回时将plhs[0],plhs[1]指向的内容赋给a,b(可以理解为a=*plhs[0], b=*plhs[1])。

    实例:

    C语言函数,按照上述方式建立。

    接着,在MATLAB控制台输入:

    格式:mex C文件.c

    这时,路径目录下出现:

    最后在MATLAB控制台调用add函数即可。

    add(2,3)

    当然这个简单的函数不能体现C语言的快。
    当有for循环或者大的计算函数时,调用C语言效率就会变得很高。

    参考资料:https://blog.csdn.net/u010839382/article/details/42463237

    读者评分
    [评分人数: 1 平均分: 5]

    评论

    OmegaXYZ