zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Ubuntu 12.04 gedit编辑器 中文乱码
    ubuntu设置vim语法高亮显示和自动缩进
    Linux学习小结(转)
    指向常量的指针和常量指针
    Android之EditText
    android之TextView
    Android存储机制之Preference
    android实现可拖动按钮
    用turtle画图
    torchvision里densenet代码分析
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709983.html
Copyright © 2011-2022 走看看