• Matlab与C混编的介绍


    原本写给一个朋友的,帮助她入门matlab与C混编的

    >#####环境:
    * Matlab:MATLAB R2013a
    * C编译器VC++2012
    
    ===
    #####配置环境:
     在**Matlab**命令行下输入:
    
    **step.1**
    
     ```
    mex -setup
     
     ```
    
    ---
     **step.2**
    
    你也可以使用:
    
     ```
     help mex
    
     ```
    查看更多信息 
    
    ---
    
    **step.3**
    
    按提示安装C编译器
    
    ---
    **step.4**
    
    编写**c-mex**文件
    可使用
    
    ```
    edit
    
    ```
    命令在matlab中打开编辑器
    
    
    ===
    
    
    #####**C-MEX**文件的结构:
     * 引入头文件:
    
    ```
    #include "mex.h" 
    
    ```
    * 定义计算子函数
    
    ```
    double add(double x, double y)
    {
        return x + y;
    }
    
    ```
    *引入接口函数
    
    ```
    
    void mexFunction(
    int nlhs,
    mxArray *plhs[],
    int nrhs,
    const mxArray *prhs[])
    {
    /*your code*/
    }
    
    ```
    ====
    ####说明:
    
    > 核心是计算子函数,在C语言中函数要先声明才能使用,所以计算子函数的函数声明放在前面。
    
    > 接口函数是C语言和matlab的接口,或者理解成协议,桥梁也可以,它接受4个参数:nlhs是左手参数个数,plhs是左手参数数组其内容为指针,该指针指向数据类型为mxArray的变量。相对应的nrhs和prhs。
    
    > 编写的**C-Mex**文件应该保存为.c文件,文件类型是**all file**,尤其要强调的一点是,该文件的文件名要和函数的函数名一致,不然使用的时候会报**undefined function**的错误
    
    >当启用mex之后,你可以使用这段程序来检查环境是否正确:
    
    ```
    [print.c]
    # include "mex.h"
    
    void mexFunction(int nlhs,double *plhs[],int nrhs,double *prhs[]){
    
        mexPrintf("hello");
    
    }
    
    ```
    保存为print.c之后命令行运行
    
    ```
    >>mex print.c
    >>print
    
    ```
    如果编译没问题,打印出hello>>这种形式,那么说明环境ok
    
    > 下面是一个完整的例子及其过程 :
    
    ```
    
    [add.c]
    
    #include "mex.h"  
     
    double add(double x, double y)
    {
        return x + y;
    }
     
    void mexFunction(int nlhs,mxArray *plhs[], int nrhs,const mxArray *prhs[])
    {
        double *a;
        double b, c;
        plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
        a = mxGetPr(plhs[0]);
        b = *(mxGetPr(prhs[0]));
        c = *(mxGetPr(prhs[1]));
        *a = add(b, c);
    }
    
    ```
    
    在命令行中执行
    
    ```
    mex add.c
    
    ```
    
    来编译它
    
    若无报错,再执行
    
    ```
    c=add(1.1,2.2)
    
    ```
    则c的值即是3.3
    
    关于此段程序,可参考 [这篇文章](http://blog.sina.com.cn/s/blog_468651400100coas.html)
    

      

  • 相关阅读:
    SpringBoot整合jsp
    SpringBoot常用application.properties配置
    SpringBoot入门
    vue cli创建vue项目
    vue 指令
    vue hello
    pytest doc
    atom
    java csvutil
    Django uuidfield 实现自动生成唯一列,并设置为主键
  • 原文地址:https://www.cnblogs.com/admos/p/4735072.html
Copyright © 2020-2023  润新知