第一范文网 - 专业文章范例文档资料分享平台

MATLAB 应用程序接口API

来源:用户分享 时间:2025/6/12 18:01:45 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

MATLAB中的应用程序接口API

前面章节主要叙述MATLAB自身的各种功能和使用方法。作为优秀软件,MATLAB不仅自身功能强大、环境友善、能十分有效地处理各种科学和工程问题,而且具有极好的开放性。这开放性表现在两方面:一,MATLAB适应各科学、专业研究的需要,提供了各种专业性的工具包;二,MATLAB为实现与外部应用程序的“无缝”结合,提供了专门的应用程序接口API。遵循本书“淡化专业,面向通用”的宗旨,本章将集中阐述MATLAB的应用程序接口。本章分五节,各节内容简述如下。

第12.1节集中介绍:如何编写C MEX源码程序,也就是如何为现有的C程序编写接口程序,使之成为MATLAB函数文件;运用这种技术,读者可以把积累的优秀C程序改造成可在MATLAB中方便调用的指令。

第12.2节用于演示:如何编写产生MAT数据文件的C源码程序。读者通过算例入门,就不难借助MAT文件实现MATLAB与外部应用程序的数据交换。

第12.3节围绕MATLAB引擎技术展开。借助这种技术,前台可以是各种外部应用程序编写的界面,而后台计算则可完全交由MATLAB进行。

第12.4节用三个算例来说明如何应用ActiveX实现MATLAB与外部应用程序的通信。在第一个算例中,MATLAB用作为客户,服务器是Excel。在后两个算例中,服务器是MATLAB,而客户是PowerPoint。由此产生的PPT文件,可以在放映过程中,实时地进行MATLAB调用。

第12.5节的内容是:如何借助DDE技术在MATLAB与其他外部程序间进行通信。该节的一个算例演示:VB制作的界面如何借助DDE建立的对话通道调用服务器MATLAB进行计算和显示结果图形。而另一个算例则演示:MATLAB如何以客户身份与服务器Excel建立DDE“热连接”,使MATLAB图形实时地跟随电子表格数据的改变而变化。

值得指出:MATLAB6.0, 6.1版用于API的(MEX、MAT、及引擎)库函数许多已经被废止。本章内容是根据MATLAB6.5编写的。

12.1 C语言MEX文件的编写

12.1.1 关于MEX文件的一般性说明 12.1.2 MEX文件中的MATLAB数据

A=['abcd';'1234';'ABCD']

A = abcd 1234 ABCD

1

12.1.3 C语言MEX文件源程序的构成

【例12.1.3-1】列出具有相同运算功能(实现两个双精度实数标量加法)的C++源码程序和C++ MEX源码程序;对C++ MEX源码程序进行编译链接;在MATLAB中调用生成的DLL文件。通过本例,从感性上认识:(A)一般C源码文件如何改写成具有约定格式的C MEX源码文件;(B)C MEX 源码文件的基本结构;(C)基本的编译链接方法;(D)DLL文件的调用方法。 (1)

#include

void myplus(double y[],double x[],double z[]) {

y[0]=x[0]+z[0]; return; }

(2)

[exm12013_1.cpp]

#include \ // <1>

//------------------------------------------------- void myplus(double y[],double x[],double z[]) {

y[0]=x[0]+z[0]; }

//-------------------------------------------------

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) //<8> {

double *x,*y,*z; // int mrows0,ncols0; // int mrows1,ncols1; //

if (nrhs!=2) //<13>

mexErrMsgTxt(\ //<16>

else if (nlhs>1) //<15>

mexErrMsgTxt(\ //<16>

mrows0=mxGetM(prhs[0]); //<17>

ncols0=mxGetN(prhs[0]); mrows1=mxGetM(prhs[1]);

2

ncols1=mxGetN(prhs[1]); //<20> //

if (!mxIsDouble(prhs[0])||mxIsComplex(prhs[0])||!(mrows0==1 //<22>

mexErrMsgTxt(\ //

if (!mxIsDouble(prhs[1])||mxIsComplex(prhs[1])||!(mrows1==1 //<25>

mexErrMsgTxt(\ //

if (mrows0!=mrows1||ncols0!=ncols1) //<28>

mexErrMsgTxt(\ //<29> //

plhs[0]=mxCreateDoubleMatrix(mrows0,ncols0,mxREAL); //<31>

x=mxGetPr(prhs[0]); //<32>

z=mxGetPr(prhs[1]); //<33>

y=mxGetPr(plhs[0]); //<34>

myplus(y,x,z); }

(3)

cd D:\\mywork mex exm12013_1.cpp dir exm12013_1.*

exm1213_1.cpp exm1213_1.dll

(4)

a=0.111;b=0.222; c=exm12013_1(a,b)

c =

0.3330

&& ncols0==1))

&& ncols1==1))

3

12.1.4 C MEX文件的执行流程

12.1.5 编写C MEX文件的常用库函数和示例

12.1.5.1 常用的MEX库函数

(1)

#include \

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

/* 其他C源码……*/ }

(2)

#include \

void mexErrMsgTxt(const char *error_msg);

void mexWarnMsgTxt(const char *warning_msg);

(3)

#include \

int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs,

mxArray *prhs[], const char *command_name);

(4)

#include \

int mexEvalString(const char *command);

(5)

#include \

mxArray *mexGetVariable(const char *workspace, const char *var_name);

int mexPutVariable(const char *workspace, const char *var_name, mxArray *array_ptr);

12.1.5.2 常用的MX函数

(1)

#include \

mxArray *mxCreateNumericMatrix(int m, int n, mxClassID class, mxComplexity ComplexFlag);

4

搜索更多关于: MATLAB 应用程序接口API 的文档
MATLAB 应用程序接口API.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c80ocy86a5n3uh255bmom_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top