MATLAB应用程序接口API

上传人:博****1 文档编号:511937477 上传时间:2022-12-10 格式:DOC 页数:36 大小:2.21MB
返回 下载 相关 举报
MATLAB应用程序接口API_第1页
第1页 / 共36页
MATLAB应用程序接口API_第2页
第2页 / 共36页
MATLAB应用程序接口API_第3页
第3页 / 共36页
MATLAB应用程序接口API_第4页
第4页 / 共36页
MATLAB应用程序接口API_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《MATLAB应用程序接口API》由会员分享,可在线阅读,更多相关《MATLAB应用程序接口API(36页珍藏版)》请在金锄头文库上搜索。

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

2、;运用这种技术,读者可以把积累的优秀C程序改造成可在MATLAB中方便调用的指令。第12.2节用于演示:如何编写产生MAT数据文件的C源码程序。读者通过算例入门,就不难借助MAT文件实现MATLAB与外部应用程序的数据交换。第12.3节围绕MATLAB引擎技术展开。借助这种技术,前台可以是各种外部应用程序编写的界面,而后台计算则可完全交由MATLAB进行。第12.4节用三个算例来说明如何应用ActiveX实现MATLAB与外部应用程序的通信。在第一个算例中,MATLAB用作为客户,服务器是Excel。在后两个算例中,服务器是MATLAB,而客户是PowerPointo由此产生的PPT文件,可以

3、在放映过程中,实时地进行MATLAB调用。第12.5节的内容是:如何借助DDE技术在MATLAB与其他外部程序间进行通信。该节的一个算例演示:VB制作的界面如何借助DDE建立的对话通道调用服务器MATLAB进行计算和显示结果图形。而另一个算例则演示:MATLAB如何以客户身份与服务器Excel建立DDE“热连接”,使MATLAB图形实时地跟随电子表格数据的改变而变化。值得指出:MATLAB6.0,6.1版用于API的(MEX、MAT、及引擎)库函数许多已经被废止。本章内容是根据MATLAB6.5编写的。121C语言MEX文件的编写12.1.1关于MEX文件的一般性说明12.1.2MEX文件中的

4、MATLAB数据A=abcd1234ABCD12.1.3C语言MEX文件源程序的构成【例12.1.3-1】列出具有相同运算功能(实现两个双精度实数标量加法)的C+源码程序和C+MEX源码程序;对C+MEX源码程序进行编译链接;在MATLAB中调用生成的DLL文件。通过本例,从感性上认识:(A)般C源码文件如何改写成具有约定格式的CMEX源码文件;(B)CMEX源码文件的基本结构;(C)基本的编译链接方法;(D)DLL文件的调用方法。(1)#includevoidmyplus(doubley,doublex,doublez)y0=x0+z0;return;(2)exm12013_1.cpp#in

5、cludemex.h/voidmyplus(doubley,doublex,doublez)y0=x0+z0;/voidmexFunction(intnlhs,mxArray*plhs,intnrhs,constmxArray*prhs)/double*x,*y,*z;/intmrows0,ncols0;/intmrows1,ncols1;/if(nrhs!=2)/mexErrMsgTxt(Twoinputsrequired.);/elseif(nlhs1)/mexErrMsgTxt(Toomanyoutputarguments);/mrows0=mxGetM(prhs0);/ncols0=m

6、xGetN(prhs0);mrows1=mxGetM(prhs1);ncols1=mxGetN(prhs1);/ncols0=1)ncols1=1)/if(!mxIsDouble(prhs0)|mxIsComplex(prhs0)|!(mrows0=1&/mexErrMsgTxt(Inputsmustbeallnoncomplexscalardouble.);/if(!mxIsDouble(prhs1)|mxIsComplex(prhs1)|!(mrows1=1&/mexErrMsgTxt(Inputsmustbeallnoncomplexscalardouble.);/if(mrows0!=

7、mrows1|ncols0!=ncols1)/mexErrMsgTxt(Inputsmustbesamedimension.);/plhs0=mxCreateDoubleMatrix(mrows0,ncols0,mxREAL);/x=mxGetPr(prhs0);/z=mxGetPr(prhs1);/y=mxGetPr(plhs0);/myplus(y,x,z);(3)exm1213_1.cppexm1213_1.dll(4)c=0.333012.1.4CMEX文件的执行流程12.1.5编写CMEX文件的常用库函数和示例12.1.5.1常用的MEX库函数(1)#includemex.hvoid

8、mexFunction(intnlhs,mxArray*plhs,intnrhs,constmxArray*prhs)/*其他c源码*/(2)#includemex.hvoidmexErrMsgTxt(constchar*error_msg);voidmexWarnMsgTxt(constchar*warning_msg);(3)#includemex.hintmexCallMATLAB(intnlhs,mxArray*plhs,intnrhs,mxArray*prhs,constchar*command_name);(4)#includemex.hintmexEvalString(const

9、char*command);(5)#includemex.hmxArray*mexGetVariable(constchar*workspace,constchar*var_name);intmexPutVariable(constchar*workspace,constchar*var_name,mxArray*array_ptr);12.1.5.2常用的MX函数(1)#includematrix.hmxArray*mxCreateNumericMatrix(intm,intn,mxClassIDclass,mxComplexityComplexFlag);(2)#includematrix

10、.hintmxGetM(constmxArray*array_ptr);intmxGetN(constmxArray*array_ptr);voidmxSetM(mxArray*array_ptr,intm);voidmxSetN(mxArray*array_ptr,intm);(3)#includematrix.hdouble*mxGetPr(constmxArray*array_ptr);double*mxGetPi(constmxArray*array_ptr);voidmxSetPr(mxArray*array_ptr,double*pr);voidmxSetPi(mxArray*ar

11、ray_ptr,double*pr);(4)#includematrix.h#includevoid*mxCalloc(size_tn,size_tsize);12.1.5.3编程示例【例12.1.5.3-1】创建一个C语言MEX文件,实现对MATLAB两个“单行”字符串的合并。本例演示:(A)如何根据MATLAB约定的规则编写CMEX源码;(B)如何构成该文件的调用指令;(C)如何为MEX文件编写在线帮助文件。(1)#includemex.h/#includestring.h/voidstringplus(char*input_buf0,char*input_buf1,char*output

12、_buf)strcat(output_buf,input_buf0);strcat(output_buf,input_buf1);/voidmexFunction(intnlhs,mxArray*plhs,intnrhs,constmxArray*prhs)/char*input_buf0,*input_buf1,*output_buf;intbuflen,buflen0,buflen1,status;if(nrhs!=2)/mexErrMsgTxt(Twoinputsinquired.);/elseif(nlhs1)/mexErrMsgTxt(Toomanyoutputarguments.)

13、;/if(mxIsChar(prhs0)!=1|mxIsChar(prhs1)!=1)/mexErrMsgTxt(Inputsmustbeastring.);if(mxGetM(prhs0)!=1|mxGetM(prhs1)!=1)/mexErrMsgTxt(Inputsmustbearowvector.);buflen0=(mxGetM(prhs0)*mxGetN(prhs0)+1;/buflen1=(mxGetM(prhs1)*mxGetN(prhs1)+1;/buflen=buflen0+buflen1-1;input_buf0=(char*)mxCalloc(buflen0,sizeo

14、f(char);input_buf1=(char*)mxCalloc(buflen1,sizeof(char);output_buf=(char*)mxCalloc(buflen,sizeof(char);/status=mxGetString(prhs0,input_buf0,buflen0);/if(status!=0)mexWarnMsgTxt(Notenoughspace,Stringistruncated.);/status=mxGetString(prhs1,input_buf1,buflen1);/if(status!=0)mexWarnMsgTxt(Notenoughspace,Stringistruncated.);stringplus(input_buf0,input_buf1,output_buf);/plhs0=mxCreateString(output_buf);/return;(3)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号