C++与MATLAB混合编程:MEX编程
2014-10-13 17:16
330 查看
在MATLAB中可调用的C或Fortran语言程序称为MEX文件。MATLAB可以直接把MEX文件视为它的内建函数进行调用。MEX文件是动态链接的子例程,MATLAB解释器可以自动载入并执行它。MEX文件主要有以下用途:
对于大量现有的C或者Fortran程序可以无须改写成MATLAB专用的M文件格式而在MATLAB中执行。
对于那些MATLAB运算速度过慢的算法,可以用C或者Frotran语言编写以提高效率。
具体操作过程:
在MATLAB中用命令mex -setup配置环境,找到对应的VS2010编译器
编写CPP源程序,源程序必须包括头文件#include "mex.h"(其中包括mex编程所需要的如矩阵等的定义)
通过MATLAB输入语句mex mexPlus.cpp。
调用时候以cpp文件名作为MATLAB函数调用,如下,调用方法为z = mexPlus(x, y); z = myplus(x, y)是错误的。
源程序如下
程序解析:
入口函数为如下,不得更改,nlhs为输出参数个数,plhs为输出参数矩阵,nrhs为输入参数个数,prhs为输入参数矩阵
对于大量现有的C或者Fortran程序可以无须改写成MATLAB专用的M文件格式而在MATLAB中执行。
对于那些MATLAB运算速度过慢的算法,可以用C或者Frotran语言编写以提高效率。
具体操作过程:
在MATLAB中用命令mex -setup配置环境,找到对应的VS2010编译器
编写CPP源程序,源程序必须包括头文件#include "mex.h"(其中包括mex编程所需要的如矩阵等的定义)
通过MATLAB输入语句mex mexPlus.cpp。
调用时候以cpp文件名作为MATLAB函数调用,如下,调用方法为z = mexPlus(x, y); z = myplus(x, y)是错误的。
源程序如下
#include "mex.h" void myplus(double x[], double y[], double z[]) { z[0] = x[0] + y[0]; } void mexFunction(int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[]) { double *x, *y, *z; int mrows0, ncols0; int mrows1, ncols1; // 检查输入输出变量的个数 if (nrhs != 2) mexErrMsgTxt("Tow input required."); else if (nlhs > 1) { mexErrMsgTxt("Too many output arguments."); } // 检查输入合法性 mrows0 = mxGetM(prhs[0]); ncols0 = mxGetN(prhs[0]); if ( !mxIsDouble(prhs[0]) //|| !mxIsComplex(prhs[0]) || !(mrows0 == 1 && ncols0 == 1)) mexErrMsgTxt("Input must be all noncomplex scalar double----------"); mrows1 = mxGetM(prhs[1]); ncols1 = mxGetN(prhs[1]); if ( !mxIsDouble(prhs[1]) //|| !mxIsComplex(prhs[1]) || !(mrows0 == 1 && ncols0 == 1)) mexErrMsgTxt("Input must be all noncomplex scalar double++++++++"); // 由于调用格式为z = mexPlus(x, y);此时z为一个空白值,应为输出新建空间 plhs[0] = mxCreateDoubleMatrix(mrows0, ncols0, mxREAL); //由此决定哪个是输入,哪个是输出 x = mxGetPr(prhs[0]); y = mxGetPr(prhs[1]); z = mxGetPr(plhs[0]); myplus(x, y, z); }
程序解析:
入口函数为如下,不得更改,nlhs为输出参数个数,plhs为输出参数矩阵,nrhs为输入参数个数,prhs为输入参数矩阵
void mexFunction(int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[])
相关文章推荐
- matlab与c++混合编程
- matcom进行matlab与c++混合编程
- Compiler_C++(Matlab_C++混合编程)
- Matlab与C++混合编程(依赖OpenCV)
- matlab和C++混合编程
- C++与matlab混合编程基于主成份分析算法的数值分析(一)
- Matlab与C++混合MEX编程
- C/C++与Matlab engine 混合编程
- <zz>matlab程序与C/C++代码混合编程
- Matlab与C++混合编程
- Matlab与c++混合编程[三.生成可以独立运行的Matlab程序]
- Matlab和C++混合编程
- C/C++与Matlab engine 混合编程
- C++和MATLAB混合编程-DLL篇[转]
- 【Matlab】C++和MATLAB混合编程-前篇
- 谈谈Matlab与C/C++或C#的互调用(混合编程)
- Matlab与c++混合编程[一.几篇文章]
- linux系统中的C++/MATLAB混合编程
- Matlab与C++混合编程初探
- c++与matlab混合编程,vs2010中调用.mat文件