MEX文 件

 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命 令 获 得 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值