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

  • 相关阅读:
    CUBRID学习笔记 44 UPDATE 触发器 更新多表 教程
    解决Tomcat出现内存溢出的问题
    用视图+存储过程解决复杂查询的排序分页问题
    IIS的安装与配置
    UI设计
    2 睡觉
    HTML5的新结构标签
    聚合函数
    Sql Group by 语句
    口语第一课
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709983.html
Copyright © 2011-2022 走看看