⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timestwo.c

📁 MATLAB中MEX命令的两个程序例子, 有详细解释, 如何在MATLAB里面调用C/C++函数
💻 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 + -