MATALAB 生成和调用 c /c++ 文件

来源:互联网 发布:寒武纪年手机版软件 编辑:程序博客网 时间:2024/05/20 16:41

说明:本文为博主在学习过程中的学习笔记,和大家分享,未经博主允许不得转载


MATLAB 有强大的计算,但是计算速度显然跟不上。因此,有时候在代码中插入c /c++代码必不可少。本文为大家介绍如何插入c /c++代码。

 详细的代码下载地址:http://download.csdn.net/detail/xiaoyanghijk/9618136

初步的生成mexw64的步骤可以参考上一个博客的例子: http://blog.csdn.net/xiaoyanghijk/article/details/52370459 

这里给个更为详细的例子,输入两个数组(比如图像),中间处理,输出一个数组(比如图像):

1) 在当前路径下写一个 Array_add.cpp 文件 

   #include "mex.h" 
//目的,输入两个维数一样的二维数组,经过处理,输出一个维数一样的数组
//输入 arr1 arr2 arr3 
//输出 out_arr= arr1 +arr2
//MATLAB调用形式: [resizedArr, resizedDims] = ResizeArray(arr, selRows, sekCols)
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 

    if (nrhs != 3)
    {
        mexErrMsgTxt("参数个数不正确!");
    }
    
    int rowNum1 = mxGetM(prhs[0]);//prhs[0] 第一个输入参数的指针
    int colNum1 = mxGetN(prhs[0]);
   
     mexPrintf("第一个输入参数的行 rowNum %d  ",rowNum1); 
      mexPrintf("第一个输入参数的列colNum %d  ",colNum1); 
      mexPrintf("\n");
      
    int rowNum2 = mxGetM(prhs[1]); //prhs[1] 第二个输入参数的指针
    int colNum2 = mxGetN(prhs[1]);
     mexPrintf("第二 个输入参数的行 rowNum %d  ",rowNum2); 
      mexPrintf("第二个输入参数的列colNum %d  ",colNum2); 
      mexPrintf("\n");
      
    int rowNum3 = mxGetM(prhs[2]); //prhs[2] 第三个输入参数的指针
    int colNum3 = mxGetN(prhs[2]);
    mexPrintf("第三 个输入参数的行 rowNum %d  ",rowNum3); 
    mexPrintf("第三个输入参数的列colNum %d  ",colNum3); 
     mexPrintf("\n");
......... 代码太长了,下载地址:http://download.csdn.net/detail/xiaoyanghijk/9618136
      
      mexPrintf("\n")  ;
   }
   
    mexPrintf("OK!\n"); 
}


第二步:在命令窗口中输入:mex Array_add.cpp 生成Array_add.mexw64 文件。

第三步:测试:

输入:

arr1=[1 2 3 ;4 5 6 ;7 8 9 ]
arr2=[ 8 4 5 ;7 8 2 ;6 9 8 ]
arr3=3

[out_arr]=Array_add(arr1,arr2,arr3)

输出:

第一个输入参数的行 rowNum 3  第一个输入参数的列colNum 3  
第二 个输入参数的行 rowNum 3  第二个输入参数的列colNum 3  
第三 个输入参数的行 rowNum 1  第三个输入参数的列colNum 1  


打印第一个输入数组数据:
 1.000000   2.000000   3.000000  
 4.000000   5.000000   6.000000  
 7.000000   8.000000   9.000000  


打印第二个输入数组数据:
  8.000000    4.000000    5.000000  
  7.000000    8.000000    2.000000  
  6.000000    9.000000    8.000000  


打印第三个输入数组数据:
3.000000  


打印输出数据:
 9.000000   6.000000   8.000000  
 11.000000   13.000000   8.000000  
 13.000000   17.000000   17.000000  
OK!


out_arr =


     9     6     8
    11    13     8
    13    17    17



0 0
原创粉丝点击