当前位置: 首页 > 工具软件 > Mex > 使用案例 >

MEX文 件

景鹏飞
2023-12-01

 MEX文 件
1、 一 个 MEX的 例 子
#include "mex.h"
/*
* timestwo.c - example found in API guide
*
* Computational function that takes a scalar and doubles it.
*
* This is a MEX-file for MATLAB.
* Copyright (c) 1984-1998 The MathWorks, Inc.
*/
/* $Revision: 1.5 $ */
/* 本 MEX文 件 的 目 的 是 实 现 timestwo的 功 能
void timestwo(double y[], double x[])是 你 的 C++函 数 */
void timestwo(double y[], double x[])
{
y[0] = 2.0*x[0];
}

/*下 面 这 个 mexFunction的 目 的 是 使 MATLAB知 道 如 何 调 用 这 个 timestwo函 数 */
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[] )

/* nlhs是 MATLAB命 令 行 方 式 下 输 出 参 数 的 个 数 ;
*plhs[]是 MATLAB命 令 行 方 式 下 的 输 出 参 数 ;
nrhs是 MATLAB命 令 行 方 式 下 输 入 参 数 的 个 数 ;
*prhs[]是 MATLAB命 令 行 方 式 下 的 输 入 参 数 ; */

{
double *x,*y;
int mrows,ncols;
/* Check for proper number of arguments. */
if(nrhs!=1) {
mexErrMsgTxt("One input required.");
} else if(nlhs>1) {
mexErrMsgTxt("Too many output arguments");
}

/* 在 MATLAB命 令 行 方 式 下 , 本 MEX文 件 的 调 用 格 式 是 y=timestwo(x)
输 入 参 数 ( x) 个 数 = 1, 输 出 参 数 ( y) 个 数 = 1, 所 以 在 程 序 一
开 始 就 检 查 nrhs是 否 = 1以 及 nlhs是 否 >1( 因 为 MATLAB有 一 个 缺 省
输 出 参 数 ans, 所 以 nlhs可 以 =0 */
输 出 参 数 ans, 所 以 nlhs可 以 =0 */
/* The input must be a noncomplex scalar double.*/

mrows = mxGetM(prhs[0]); /* 获 得 输 入 矩 阵 的 行 数 */
ncols = mxGetN(prhs[0]); /* 获 得 输 入 矩 阵 的 列 数 */
if( !mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]) ||
!(mrows==1 && ncols==1) ) {
mexErrMsgTxt("Input must be a noncomplex scalar double.");
} /* 判 断 输 入 矩 阵 是 否 是 double类 , 以 及 它 是 否 只 包 括 单 个 元 素 */

/* 为 输 出 创 佳 一 个 矩 阵 , 显 然 这 个 矩 阵 也 应 该 是 1x1的 */
plhs[0] = mxCreateDoubleMatrix(mrows,ncols, mxREAL);
/* 获 得 指 向 输 入 /输 出 矩 阵 数 据 的 指 针 */
x = mxGetPr(prhs[0]);
y = mxGetPr(plhs[0]);
/* 调 用 C++函 数 timestwo(y,x) */
timestwo(y,x);
}

把 上 面 这 个 文 件 用 MEX编 译 后 , MATLAB命 令 行 下 调 用 的 实 例
x = 2;
y = timestwo(x)
y =
y =
4

2、 MEX文 件 的 编 程 规 则
( 1) 编 制 自 己 的 C++算 法 程 序
( 2) 紧 跟 着 定 义 mexFunction函 数 , mexFunction的 定 义 法 唯 一 :
它 只 能 是 如 下 形 式 :
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[] )
其 名 称 和 参 数 类 型 不 许 有 任 何 改 变 , 在 mexFunciton函 数 中 可 以 调 用 你 刚 定 义 好 的 C++程 序 。
3、 MEX文 件 的 编 译
MATLAB提 供 了 专 门 编 译 MEX文 件 的 工 具 : mex, 它 可 以 把 你 做 好 的 C++源 程 序 编 译 成 .mex文 件 供 MATLAB在 命 令 行 方 式 下 调 用 。 调 用 时 输 入 你 的 C++函 数 名 ( 上 例 中 为 timestwo) 。 具 体 mex的 设 置 和 使 用 方 法 可 以 在
MATLAB命 令 行 方 式 下 用 help mex命 令 获 得 。

 类似资料: