• matlab C程序


    通过把耗时长的函数用c语言实现,并编译成mex函数可以加快执行速度
    Matlab本身是不带c语言的编译器的,所以要求你的机器上已经安装有VC,BC或Watcom C中的一种
    注:在Matlab里,矩阵第一行是从1开始的

    1. 主接口

    #include "mex.h" 
    void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 
    {
        mexPrintf("hello,world!\n"); 
    }
    //编译
    >> mex hello.c
    //运行
    >> hello

    整个程序由一个接口子过程 mexFunction构成
    nlhs:输出参数数目
    plhs:指向输出参数的指针
    nrhs:输入参数数目
    prhs:输入参数

    2. mxGetScalar

    i = mxGetScalar(prhs[0]);
    “Scalar”就是标量的意思。在Matlab里数据都是以数组的形式存在的,mxGetScalar的作用就是把通过prhs[0]传递进来的mxArray类型的指针指向的数据(标量)赋给C程序里的变量。这个变量本来应该是double类型的,通过强制类型转换赋给了整形变量i

    3. mxGetPr

    从指向mxArray类型数据的prhs[0]获得了指向double类型的指针
    mxGetPr只能得到指向这个矩阵的指针,如果我们不知道这个矩阵的确切大小,就没法对它进行计算

    4. mxGetM和mxGetN

    获得传进来参数的行数和列数

    5. mxCreateDoubleMatrix

    mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag)
    内存申请
    m:待申请矩阵的行数
    n:待申请矩阵的列数

    6. mexErrMsgTxt

    MexErrMsgTxt在给出出错提示的同时退出当前程序的运行

    7. MxIsDouble

    MxIsDouble则用于判断mxArray中的数据是否double类型

    参考文档:http://www.cnblogs.com/tjulxh/archive/2012/04/23/2467087.html

  • 相关阅读:
    OC之class与metaclass
    call vs apply
    ABI
    WEB服务器的四种类型
    情绪控制
    位置无关代码
    Finding Leaks Using Instruments
    Mac之TwoLevel Namespace
    Apache的几个特性
    Mac之debuging symbol
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709983.html
Copyright © 2020-2023  润新知