赛迪网 > IT技术 C/C++ > 文章
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

Matlab与C语言程序的应用编程接口 (2)

发布时间:2006.01.17 05:54     来源:赛迪论坛    作者:罗月星

三、C语言程序MEX文件实例

MATLAB 5 API提供了一系列程序来处理MATLAB所支持的各种数据类型,每一种数据类型都有对应函数共你使用来处理对应的数据。下面给出一个简单的C语言程序和与之对应的MEX文件代码,该程序的功能是将标量x加倍。

C语言程序如下:


#include "math.h"
void timestwo(double y[], double x[])
{
y[0]=2.0*x[0];
return;
}

下面是与C语言程序功能相同的MEX文件:
#include "mex.h"
void timestwo(double y[], double x[])
{
y[0]=2.0*x[0];
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
double *x, *y;
int mrows, ncols;
/*检查正确的参数数目*/
if(nrhs!=1){
mexErrMsgTxt("需要一个输入参数.");
}
else if(nlhs>1){
mexErrMsgTxt("输出参数太多.");
}
/*输入变量必须是非复数类型的标量*/
mrows=mxGetM(prhs[0]);
ncols=mxGetN(prhs[0]);
if(!mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]) || !(mrows==1 && ncols==1)){
mexErrMsgTxt("输入变量必须是非复数类型的标量.");
}
/*为返回参数创建矩阵*/
plhs[0]=mxCreateDoubleMatrix(mrows, ncols, mxREAL);
/*分配输入输出参数的指针*/
x=mxGetPr(prhs[0]);
y=mxGetPr(plhs[0]);
/*调用timestwo子函数*/
timestwo(y, x);
}

C语言是在编译的时候检查函数参数。MATLAB可以在M函数中传递任意数量和类型的参数,MEX文件也是如此,不过在程序中必须可靠地处理输入输出参数的数目。如果将上面的MEX文件命名为timestwo.c,就可以对它进行编译和链接,在MATLAB命令窗口下输入:
mex timestwo.c

这是产生MEX文件timestwo.***所必需的步骤,该文件的扩展名所运行的系统平台的类型。Windows系统下,扩展名为dll。此时,就可以象调用M函数一样调用timestwo了。
在MATLAB命令窗口中输入:
x=2;
y=timestwo(x);
就可以得到:
y=4;

四、小 结

MEX文件虽然具有较强大的功能,但并不是对所有的应用都恰当。MATLAB是一个高效率的编程系统,特别适合于工程计算、系统仿真等应用。它的最大优点就是将人们从繁杂的程序中解放出来。因此,能够用M文件完成的程序,应尽量使用MATLAB编写,除非遇到必须使用MEX文件的情况。

MATLAB的应用编程接口是一个功能强大的系统,除了调用C或Fortran程序,还可以实现从MATLAB环境中输入输出数据、在MATLAB中和其他程序建立客户/服务器关系等功能。
(e129)

<<上一页 1 2


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管