MATLAB外部接口编程(张威) 第6章.ppt
《MATLAB外部接口编程(张威) 第6章.ppt》由会员分享,可在线阅读,更多相关《MATLAB外部接口编程(张威) 第6章.ppt(90页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第6章 MATLAB计算引擎应用 第6章 MATLAB计算引擎应用 6.1 概述概述6.2 计算引擎应用计算引擎应用6.3 编译应用程序编译应用程序6.4 计算引擎应用示例计算引擎应用示例练习练习 第6章 MATLAB计算引擎应用 6.1 概概 述述 MATLAB的计算引擎应用实际上就是利用MATLAB提供的一组接口函数(API),在用户开发的C语言或者Fortran语言应用程序中,通过某种通信机制后台调用MATLAB应用程序以完成复杂的系统任务。计算引擎应用程序是在MATLAB环境之外的可执行应用程序,在它们运行的过程中需要利用某种通信机制和另外一个MATLAB进程(会话)交互数据。在不同系
2、统平台上,应用程序使用的通信机制是不一样的,例如在UNIX系统中使用管道(pipes)完成,而在Windows平台中,这种通信机制是利用COM应用接口IEngine来完成的,图6-1表示了计算引擎应用在Windows系统中的情况。第6章 MATLAB计算引擎应用 图6-1 Windows平台上的计算引擎应用程序 第6章 MATLAB计算引擎应用 在Windows平台上,用户开发的C语言或者Fortran语言应用程序作为COM应用的客户端,是整个应用程序的前端,而MATLAB作为COM应用的服务器运行在后台。两者利用MATLAB提供的计算引擎接口函数进行交互,例如在客户端从MATLAB进程中获取
3、数据,或者在客户端调用MATLAB的指令等。在C语言或者Fortan语言中使用MATLAB计算引擎应用集成MATLAB的算法与其它的集成方法比较,计算引擎应用程序具有如下几点优势:第6章 MATLAB计算引擎应用 调用MATLAB数学函数完成繁重的数学计算,充分发挥MATLAB在数值计算上的强大优势,通过C语言或者Fortran语言编写的GUI来调用后台的MATLAB数学计算功能,完成特殊的需要,节约开发时间。在UNIX平台上,计算引擎的MATLAB进程不仅可以运行在本地计算机上,也可以运行在网络中的任何一台计算机上,这样可以将本地计算机作为前端的用户接口界面来直接调用后台复杂的算法。第6章
4、MATLAB计算引擎应用 避免将庞大的MATLAB函数库链接到客户应用程序中。利用MATLAB Compiler打包的函数库时,需要将MATLAB的数学库或者图形库都链接到客户应用程序中,这样的操作会使客户应用程序变得庞大,而MATLAB计算引擎函数库仅仅采用十几个函数就可以完成这些复杂的操作了。不是所有的MATLAB函数都可以使用MATLAB Complier或者COM Builder打包成为函数库或者COM组件,而使用MATLAB计算引擎则没有此类限制。第6章 MATLAB计算引擎应用 6.2 计算引擎应用计算引擎应用 6.2.1 6.2.1 简单计算引擎应用示例简单计算引擎应用示例下面看
5、一个简单的MATLAB计算引擎应用的例子,这个例子使用C语言开发。通过本例子来了解一下MATLAB计算引擎应用程序的基本结构和编译方法。例例6-1 简单的C语言计算引擎应用示例simpleengdemo.c。第6章 MATLAB计算引擎应用 001/*包含必要的头文件*/002#include engine.h003#include stdio.h004#include conio.h005#define BUFFERLEN 256006/*主函数*/007void main()008009Engine*ep;010char cmdBUFFERLEN;011int i=0;012int sta
6、tus=0;第6章 MATLAB计算引擎应用 013/*打开计算引擎*/014ep=engOpen(NULL);015if(ep=(Engine*)NULL)016printf(错误:无法打开MATLAB计算引擎n);017exit(-1);018019/*执行MATLAB指令*/020engEvalString(ep,A=zeros(1,10););021/*稍等片刻.*/022printf(n请在MATLAB会话中查看计算的结果!n);023printf(n按任意键继续.n);024getch();第6章 MATLAB计算引擎应用 025/*执行其它的MATLAB指令*/026for(i=
7、10;i !simpleengdemo&或者在Windows的命令行提示符下键入指令:simpleengdemo,这时操作系统将启动一个MATLAB进程,不过启动的MATLAB进程仅包含MATLAB的命令行窗口,如图6-2所示。第6章 MATLAB计算引擎应用 图6-2 计算引擎启动的MATLAB会话窗口 第6章 MATLAB计算引擎应用 这时在Windows的命令行提示符中显示如下信息:请在MATLAB会话中查看计算的结果!按任意键继续.大家可以在启动的MATLAB命令行中键入下面的指令:?whos Name Size Bytes Class A 1x10 80 double arrayGr
8、and total is 10 elements using 80 bytes?AA=0 0 0 0 0 0 0 0 0 0 第6章 MATLAB计算引擎应用 在MATLAB会话的工作空间中有一个变量A,该变量就是通过例6-1的第020行代码执行之后得到的。在命令行提示符中按任意键继续例6-1的代码执行,当重复出现相应的提示信息后,回到新启动的MATLAB会话中,键入下面的指令:?AA=Columns 1 through 6 34 55 89 144 233 377 Columns 7 through 10 610 987 1597 2584 可以看到,由于例6-1的代码执行,MATLAB工作
9、空间中的变量A变成了Fibonacci 数列的部分元素。第6章 MATLAB计算引擎应用 在Windows的命令行提示符中按任意键继续例6-1的执行,这时由于例子中正确地关闭了MATLAB计算引擎,则新启动的MATLAB会话会自动地退出运行,例6-1的MATLAB计算引擎应用实例就完整地执行完毕了。例6-1的代码说明了MATLAB计算引擎应用C语言程序的基本结构以及相应的工作流程,只要包含了必要的头文件engine.h,调用eng函数就可以完成计算引擎应用程序的工作。一般地,MATLAB计算引擎应用程序的基本工作流程如下:第6章 MATLAB计算引擎应用 打开计算引擎engOpen。向新启动的
10、MATLAB会话中设置数据engPutVariable。执行MATLAB指令engEvalString。从MATLAB会话中获取计算结果engGetVariable。关闭计算引擎engClose。第6章 MATLAB计算引擎应用 6.2.2 常用的常用的eng函数函数 1.1.打开计算引擎打开计算引擎engOpenengOpen打开MATLAB计算引擎的函数为engOpen,该函数在C语言中的定义如下:Engine*engOpen(const char*startcmd);该函数在Fortran语言中的定义如下:integer*4 function engOpen(startcmd)integ
11、er*4 epcharacter*(*)startcmd 第6章 MATLAB计算引擎应用 该函数具有一个输入参数字符串,在UNIX平台上,如果输入参数是空字符串或者NULL,则计算引擎打开本地计算机的MATLAB作为计算引擎的后台服务;如果输入参数是远程的计算机名称(hostname),则将相应的计算机上的MATLAB启动作为计算引擎的后台服务。在Windows平台上,该输入参数只能为NULL。如果engOpen函数成功运行,则一个MATLAB进程作为后台服务启动,并且返回计算引擎的指针。第6章 MATLAB计算引擎应用 2.2.关闭计算引擎关闭计算引擎engCloseengClose关闭计
12、算引擎的函数为engClose,该函数在C语言中的定义如下:int engClose(Engine*ep);该函数在Fortran语言中的定义如下:integer*4 function engClose(ep)integer*4 ep该函数只有一个输入参数MATLAB计算引擎指针,如果成功关闭了计算引擎,则作为计算引擎的MATLAB后台服务进程被关闭,然后返回整数0表示成功完成了操作。第6章 MATLAB计算引擎应用 3.3.执行执行MATLABMATLAB指令指令engEvalStringengEvalString在MATLAB计算引擎应用程序中运行MATLAB指令的函数是engEvalSt
13、ring,该函数在C语言中的定义如下:int engEvalString(Engine*ep,const char*string);该函数在Fortran语言中的定义如下:integer*4 function engEvalString(ep,command)integer*4 epcharacter*(*)command 第6章 MATLAB计算引擎应用 该函数具有两个输入参数,分别为计算引擎的指针ep和需要执行的MATLAB指令command。如果该函数返回了数值0,则表明计算引擎已经成功处理了用户的指令。注意,在调用该函数时,请尽量保证参数command包含的MATLAB指令是合法的。第
14、6章 MATLAB计算引擎应用 4.4.获取数据获取数据engGetVariableengGetVariable获取数据的函数是engGetVariable,它能够从当前作为计算引擎服务的MATLAB会话中获取指定的变量,它在C语言中的定义如下:mxArray*engGetVariable(Engine*ep,const char*name);第6章 MATLAB计算引擎应用 该函数在Fortran语言中的定义如下:integer*4 function engGetVariable(ep,name)integer*4 epcharacter*(*)name该函数的输入参数分别为MATLAB计算
15、引擎的指针ep和需要读取的变量名name,如果成功读取了数据,则函数返回mxArray数据类型对象指针。第6章 MATLAB计算引擎应用 5.5.写入数据写入数据engPutVariableengPutVariable从计算引擎应用程序向MATLAB会话写入数据的函数是engPutVariable,该函数在C语言中的定义如下:int engPutVariable(Engine*ep,const char*name,const mxArray*mp);第6章 MATLAB计算引擎应用 该函数在Fortran语言中的定义如下:integer*4 function engPutVariable(ep
16、,name,mp)integer*4 ep,mpcharacter*(*)name该函数具有三个输入参数,分别为计算引擎指针ep、变量的名称name和在C语言或者Fortran源中创建mxArray数据类型对象的指针mp。如果函数成功写入了数据,则返回整数数值0。第6章 MATLAB计算引擎应用 6.3 编译应用程序编译应用程序 6.3.1 6.3.1 命令行编译命令行编译在生成可执行应用程序时,可以通过命令行完成程序的编译,也就是说,可以在MATLAB的命令行窗口下或者操作系统的控制台方式下,通过MEX指令完成应用程序的编译。在前面的章节介绍了MEX指令,读者应该知道MEX指令是通过选项文件
17、完成程序的编译工作的,在编译MEX文件时,需要针对不同的编译器选择不同的选项文件,MAT数据文件应用程序是这样,MATLAB计算引擎应用程序也是如此。第6章 MATLAB计算引擎应用 和生成MEX文件不同,生成MEX文件时,只要在MATLAB中完成编译器的配置工作就可以直接使用MEX指令完成MEX文件的编译工作。因为配置编译器的时候,需要将编译器的选项文件改名为mexopts.bat选项文件,并且拷贝到了系统环境目录下。不过在系统路径下mexopts.bat文件不能完成MATLAB计算引擎应用程序的编译,必须通过MEX命令行,指定具体的选项文件才可以。为了便于说明编译过程,这里使用一个Fort
18、ran语言的计算引擎应用程序作为示例。第6章 MATLAB计算引擎应用 mex-f%MATLABROOT%binwin32mexoptsdf60engmatopts.bat fengdemo.f 第6章 MATLAB计算引擎应用 其中,%MATLABROOT%是程序员使用的MATLAB的安装路径。如果fengdemo.f程序中没有任何错误,则MEX指令将成功地将fengdemo.f源代码编译生成为可执行的应用程序。如果存在任何错误或者警告提示,请读者对照例子的源代码,仔细修改直到编译通过为止。接着,就可以运行得到的可执行应用程序。第6章 MATLAB计算引擎应用 在MATLAB命令行窗口中键入
19、如下命令:dir*.exefengdemo.exe !fengdemo&在Windows的命令行提示符中会显示以下信息:开始MATLAB计算引擎应用程序.当显示下面的信息时,例子将利用MATLAB进程绘制出计算的结果,如图6-3所示。第6章 MATLAB计算引擎应用 图6-3 MATLAB绘制出来的应用程序结果 第6章 MATLAB计算引擎应用 按回车键将继续.Fortran Pause-Enter command or to continue.在Windows的命令行提示符中按回车键继续程序的运行,则程序将通过073080行的代码将计算的结果D读回到Fortran的应用程序中,于是利用For
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB外部接口编程张威 第6章 MATLAB 外部 接口 编程
限制150内