ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:25.29KB ,
资源ID:2178658      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2178658.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(使用MATLAB Engine与C混合编程.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

使用MATLAB Engine与C混合编程.docx

1、使用MATLAB Engine与C混合编程使用MATLAB Engine实现与C混合编程(五)引擎应用程序 1、简介 引擎应用程序的实质是把MATLAB做为一个引擎,它允许从你自己的C+程序调用这个引擎。在运行时,引擎作为一个进程单独运行,你的C+程序也作为一个进程单独运行,二者可以通过进程间的通信机制进行交互。 2、引擎库 MATLAB引擎库包含了若干个控制MATLAB引擎的函数,如下所示: engOpen 启动MATLAB引擎 engClose 关闭MATLAB引擎 engGetArray 从MATLAB引擎中获取一个MATLAB矩阵 engPutArray 向MATLAB引擎发送一个MA

2、TLAB矩阵 engEvalString 执行于一个MATLAB命令 engOutputBuffer 创建一个存储MATLAB文本输出的缓冲区 同时,引擎应用程序还可以使用前面提到的API函数。 3、一个例子 从这个示例中,我们看出引擎应用程序是如何编制的: /* * engdemo.c * This is a simple program that illustrates how to call the * MATLAB engine functions from a C program. */ #include #include #include #include engine.h #de

3、fine BUFSIZE 256 int main() Engine *ep; mxArray *T = NULL, *result = NULL; char bufferBUFSIZE; double time10 = 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 ; 8.0, 9.0 ; 6-6 /* * Start the MATLAB engine locally by executing the string * matlab. * To start the session on a remote host, use the nam

4、e of * the host as the string rather than 0 * For more complicated cases, use any string with whitespace, * and that string will be executed literally to start MATLAB. */ if (!(ep = engOpen(0) fprintf(stderr, nCant start MATLAB enginen); return EXIT_FAILURE; /*启动MATLAB引擎*/ /* * PART I * For the firs

5、t half of this demonstration, we will send data * to MATLAB, analyze the data, and plot the result. * Create a variable for our data. */ T = mxCreateDoubleMatrix(1, 10, mxREAL); /*创建一个矩阵*/ mxSetName(T, T); /*设置矩阵的名字为“T”*/ memcpy(void *)mxGetPr(T), (void *)time, sizeof(time); /*向矩阵“T”赋值*/ /* * 把矩阵“T”

6、置入MATLAB引擎 */ engPutArray(ep, T) /* * Evaluate a function of time, distance = (1/2)g.*t.2 * (g is the acceleration due to gravity). */ engEvalString(ep, D = .5.*(9.8).*T.2;); /*执行MATLAB 命令:D = .5.*(9.8).*T.2;*/ /* * 绘制图象. */ engEvalString(ep, plot(T,D);); /*执行MATLAB命令:绘图*/ engEvalString(ep, title(Po

7、sition vs. Time for a falling object);); /*执行MATLAB命令:给图象加标题*/ engEvalString(ep, xlabel(Time (seconds);); /*执行MATLAB命令:设置X轴坐标*/ engEvalString(ep, xlabel(Time (seconds);); /*执行MATLAB命令:设置X轴坐标*/ engEvalString(ep, ylabel(Position (meters);); /*执行MATLAB命令:设置Y轴 坐标*/ /* * Use fgetc() to make sure that we

8、pause long enough to be * able to see the plot. */ printf(Hit return to continuenn); fgetc(stdin); /* * Were done for Part I! Free memory, close MATLAB engine. */ printf(Done for Part I.n); mxDestroyArray(T); /*从内存中撤销矩阵“T”*/ engEvalString(ep, close;); /*关闭刚才显示图象的窗口*/ /* * PART II * For the second ha

9、lf of this demonstration, we will request * a MATLAB string, which should define a variable X. MATLAB * will evaluate the string and create the variable. We * will then recover the variable, and determine its type. */ /* * Use engOutputBuffer to capture MATLAB output, so we can * echo it back. */ en

10、gOutputBuffer(ep, buffer, BUFSIZE); /*构建MATLAB文本输入缓冲区*/ while (result = NULL) char strBUFSIZE; /* * Get a string input from the user. */ printf(Enter a MATLAB command to evaluate. This command shouldn); printf(create a variable X. This program will then determinen); printf(what kind of variable you

11、created.n); printf(For example: X = 1:5n); printf( ); /*要求用户输入一个MATLAB命令*/ fgets(str, BUFSIZE1, stdin); /*获得用户输入*/ /* * Evaluate input with engEvalString. */ engEvalString(ep, str); /*执行用户输入的MATLAB命令*/ engEvalString(ep, str); /*执行用户输入的MATLAB命令*/ /* * Echo the output from the command. First two chara

12、cters * are always the double prompt (). */ printf(%s, buffer+2); /*显示该MATLAB命令的执行情况*/ /* * Get result of computation. */ printf(nRetrieving X.n); if (result = engGetArray(ep,X) = NULL) /*判断是否可以从MATLAB 引擎中获得矩阵“X”*/ printf(Oops! You didnt create a variable X.nn); else printf(X is class %stn, mxGetCla

13、ssName(result); /*显示矩阵“X”的类型*/ /* while(result=NULL)*/ /* * Were done! Free memory, close MATLAB engine and exit. */ printf(Done!n); mxDestroyArray(result); /*从内存中撤销矩阵“T”*/ engClose(ep); /*关闭MATLAB引擎*/ return EXIT_SUCCESS; /*返回*/ 4、引擎应用程序的编译 对于象上例中的控制台程序,可以在MATLAB命令行中直接使用带-f参数的mex命令编译。 如果在普通win32 ap

14、plication中使用MATLAB引擎,情况则比较复杂。在Windows中,MATLAB引擎是通过ActiveX被调用的。因此你需要先Create一个OLE Automation Sever和一个OLE Client,然后通过OLE方式调用这个MATLAB引擎。具体做法可参阅相关MATLAB随机文档。 5、总结 MATLAB引擎的调用与其它引擎(例如数据库引擎)的调用很类似,其步骤是联接启动引擎,然后向引擎发送命令,获得引擎处理结果。 结束语 上面简要介绍了MATLAB与C+的几种接口方式,我们可以根据要求的不同采用相应的方式。 此外,MATLAB还提供了一个数学库,由此数学库,我们可以获得对MATLAB内部命令更多的访问权和更灵活的访问方式。具体内容可参考MATLAB的相关随机文档。 参考文献 1、MATLAB随机文档:apiguide.pdf 2、MATLAB随机文档:apiref.pdf 3、MATLAB随机文档:c_math_ref1.pdf VC程序员最好用visual matcom。VB用matrixVB mathtool在主页上提供免费试用,快去下吧。matlab的功能可在你的VC,VB中实现,而且只需两

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1