望麓自卑—湖南大学最具潜力的校园传媒

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2268|回复: 7

[电气与信息工程学院] Matlab与C语言程序的应用编程接口

[复制链接]
发表于 2007-1-19 18:17:03 | 显示全部楼层 |阅读模式
Matlab与C语言程序的应用编程接口  

作者:罗月星 时间:2006-10-04 12:37 出处:ccidnet.com 责编:月夜寒箫  

MATLAB作为世界顶尖的数学应用软件,以其强大的工程计算、算法研究、工程绘图、应用程序开发、数据分析和动态仿真等功能,在航空航天、机械制造和工程建筑等领域发挥着越来越重要的作用。而C语言功能丰富,使用灵活方便,目标程序效率高。既有高级语言的优点,又有低级语言的特点。因此,C语言是目前应用最广的编程语言。虽然MATLAB是一个完整的、功能齐全的编程环境,但在某些情况下,与外部环境的数据和程序的交互是非常必须而且有益的。

众所周知,MATLAB是用M语言编程,不能在M文件中直接调用C语言程序。可以通过MATLAB提供的应用编程接口(API)来实现与外部的接口,在MATLAB环境中实现调用C语言或Fortran程序、输入或输出数据以及和其他软件程序间建立客户/服务器关系等功能。

MATLAB中调用C语言程序,必须通过MEX文件来实现。

一、 C语言的MEX文件的结构

C语言的MEX文件是一种动态连接子程序,可以象调用M文件一样调用它。MEX文件主要有以下几方面的应用:

(1)在MATLAB中,M文件的计算速度特别是循环迭代的速度远比C语言慢,因此可以把要求大量循环迭代的部分用C语言编写为MEX文件,提高计算速度。
(2)已经开发的C语言程序,则不必将其转化为M文件而重复劳动,通过添加入口程序mexFunction,可以由MATLAB调用。
(3)直接控制硬件,如A/D采集卡,D/A输出卡等,以用于数据采集或控制应用。

C语言的MEX文件的源程序由两个非常明显部分组成:
(1)计算程序,即在MEX文件中完成计算功能的程序代码,计算程序可以是普通的C语言程序,按照C语言规则编写即可
(2)入口程序,将计算程序与MATLAB连接的入口函数mexFunction。入口程序mexFunction相对要复杂一些,函数中有四个参数nlhs、plhs、nrhs和prhs。这里nlhs是输出数据的个数,plhs是指向mxArray(MATLAB中所有数据都由mxArray定义)的输出数据的指针,nrhs是输入数据的个数,prhs是指向mxArray的输入数据的指针。


二、 使用MEX文件

上面所述的MEX文件的两个主要部分在使用中可以是独立的,也可以是组合在一起的。不管是哪一种情况,MEX文件都必须包含头文件\"mex.h\",以便正常申明入口程序。入口程序的名字必须是mexFunction而且必须包含这些参数:

void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])

在C语言的MEX文件中,参数nlhs和nrhs包含输出和输入变量的数目,借助于这两个参数,MEX文件被调用。参数plhs和prhs是包含指向MEX文件输出和输入变量的指针的向量,prhs是长度为nrhs的输入变量的指针数组,plhs是长度为nlhs的输出变量的指针数组。比如从MATLAB命令窗口来调用一个MEX文件:
x=fun(y,z);

则MATLAB编译器使用下面的变量来调用mexFunction:

nlhs=1
nrhs=2
plhs=(pointer)->/*unassigned*/
prhs=(pointer)->y
(pointer)->z


plhs指向只有一个元素的C语言数组,并且这个元素为空指针。prhs指向含有两个元素的C语言数组,其中第一个元素指向mxArray型变量Y,第二个元素指向mxArray型变量Z。

这里,plhs指向空的数组是由于输出x在子程序执行前尚未产生,入口程序的作用就是创建输出数组并分配指针plhs[0]指向该数组。如果plhs[0]没有赋值,MATLAB将给出输出变量没有赋值的警告信息。

三、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中和其他程序建立客户/服务器关系等功能。
发表于 2007-1-20 13:44:45 | 显示全部楼层
看不懂,顶一下
发表于 2007-1-20 15:27:10 | 显示全部楼层
友情顶一下,没有用过matlab和c语言的接口。
发表于 2007-1-20 18:33:23 | 显示全部楼层
没有用过上述两个软件的接口.

偶以后用delphi比较多.
发表于 2007-1-31 17:07:11 | 显示全部楼层
作者是谁, 能否留个联系方式, 谢谢!
 楼主| 发表于 2007-2-1 09:49:28 | 显示全部楼层
我也只是在学习,相关资料到网上找吧,会很多.

谢谢!
发表于 2007-2-1 16:56:06 | 显示全部楼层
偶以前调过
但是一直调不通
后来放弃了
发表于 2009-7-22 09:56:13 | 显示全部楼层
中机系(北京)信息技术研究院(China Machinery Marketing Academy),简称CMMA或中机院。专注于全球工业市场情报监测、数据库服务、产业研究、城市(区域)发展规划、投融资等决策咨询。

目前在北京、武汉、长沙、澳大利亚悉尼等地均设有办公室。承担过多次国家课题、全球市场大型调研、区域产业规划、城镇(乡)及园区规划设计、农业及旅游策划、大型投融资、项目可行性研究及评估等,是华北地区最早从事咨询服务的集体所有制企业之一。

核心业务分为三大块:

1、产业研究及市场调查

我们关注行业发展、新兴市场和投资,拥有11大类官方统计渠道,每年为政府和企业提供各类市场应对预案、决策内参、产业预警和专题调研报告约500份。同时为30余家跨国公司指定信息供应商,常年提供数据库查询、市场专项调查、《工业企业竞争情报监测与决策支持系统》会员服务。

2、城市(区域)发展规划咨询

我们关注政策、产业和产业集群、城市(区域)和城市群发展,主要为政府提供城市(区域)运营战略一体化解决方案(战略咨询——产业咨询——空间规划——投资咨询——项目管理)。

我们精通:区域产业规划、城市总体概念性规划、产业园区规划、农业与新农村规划、小城镇规划、旅游策划与风景区规划、文化创意产业园规划设计、建筑设计与景观等。

3、投融资服务

投资方面:协助投资者项目决策(决断投资项目是否必要、可行及实施方案设计)是中机院的长项。我们拥有174位专家,通过近5年320多个项目的成功操作,对各类项目的投资规模、投资方向、投资结构、投资分配以及投资项目的选择和布局等方面拥有充分的技术经济分析经验。

可根据不同客户需求个性化定制——目标企业尽职调查、投资机会研究、项目投资价值分析、项目数据分析报告、编制项目建议书或初步可行性研究报告、项目可行性研究、资金申请报告、项目评估等服务。

融资方面:拥有拥有数家国内外大型投资机构、基金会、上市公司的中国区授权,可为不同类型客户提供资金。在融资过程中,我们可提供——融资文件撰写服务(商业计划书、CPDA报告、PDD材料等)、融资(财务)顾问服务、资金引荐等全程解决方案。
了解更多,请点击:中国机电网
调查 调研报告金融危机 融资投资
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

每日推荐上一条 /1 下一条

小黑屋|手机版|湖南大学望麓自卑校园传媒 ( 湘ICP备14014987号 )

GMT+8, 2024-11-23 22:00 , Processed in 0.295964 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表