📄 timestwo.c
字号:
#include "mex.h"
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;
/*检查正确的参数数目*/
if(nrhs!=1){
mexErrMsgTxt("需要一个输入参数.");
}
else if(nlhs>1){
mexErrMsgTxt("输出参数太多.");
}
/* 在 MATLAB命 令 行 方 式 下 , 本 MEX文 件 的 调 用 格 式 是 y=timestwo(x)
输 入 参 数 ( x) 个 数 = 1, 输 出 参 数 ( y) 个 数 = 1, 所 以 在 程 序 一
开 始 就 检 查 nrhs是 否 = 1以 及 nlhs是 否 >1( 因 为 MATLAB有 一 个 缺 省
输 出 参 数 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("输入变量必须是非复数类型的标量.");
}
/* 判 断 输 入 矩 阵 是 否 是 double类 , 以 及 它 是 否 只 包 括 单 个 元 素 */
/*为返回参数创建矩阵,显 然 这 个 矩 阵 也 应 该 是 1x1的 */
plhs[0]=mxCreateDoubleMatrix(mrows, ncols, mxREAL);
/*分配输入输出参数的指针*/
x=mxGetPr(prhs[0]);
y=mxGetPr(plhs[0]);
/*调用timestwo子函数*/
timestwo(y, x);
}
/*MEX文 件 的 编 程 规 则
( 1) 编 制 自 己 的 C++算 法 程 序
( 2) 紧 跟 着 定 义 mexFunction函 数 , mexFunction的 定 义 法 唯 一 :
它 只 能 是 如 下 形 式 :
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[] )
其 名 称 和 参 数 类 型 不 许 有 任 何 改 变 , 在 mexFunciton函 数 中 可 以 调 用 你 刚 定 义 好 的 C++程 序 。 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -