MATLAB外部接口编程(张威) 第6章

上传人:E**** 文档编号:89348184 上传时间:2019-05-23 格式:PPT 页数:90 大小:913.50KB
返回 下载 相关 举报
MATLAB外部接口编程(张威) 第6章_第1页
第1页 / 共90页
MATLAB外部接口编程(张威) 第6章_第2页
第2页 / 共90页
MATLAB外部接口编程(张威) 第6章_第3页
第3页 / 共90页
MATLAB外部接口编程(张威) 第6章_第4页
第4页 / 共90页
MATLAB外部接口编程(张威) 第6章_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《MATLAB外部接口编程(张威) 第6章》由会员分享,可在线阅读,更多相关《MATLAB外部接口编程(张威) 第6章(90页珍藏版)》请在金锄头文库上搜索。

1、第6章 MATLAB计算引擎应用,6.1 概述 6.2 计算引擎应用 6.3 编译应用程序 6.4 计算引擎应用示例 练习,6.1 概 述,MATLAB的计算引擎应用实际上就是利用MATLAB提供的一组接口函数(API),在用户开发的C语言或者Fortran语言应用程序中,通过某种通信机制后台调用MATLAB应用程序以完成复杂的系统任务。计算引擎应用程序是在MATLAB环境之外的可执行应用程序,在它们运行的过程中需要利用某种通信机制和另外一个MATLAB进程(会话)交互数据。在不同系统平台上,应用程序使用的通信机制是不一样的,例如在UNIX系统中使用管道(pipes)完成,而在Windows平

2、台中,这种通信机制是利用COM应用接口IEngine来完成的, 图6-1表示了计算引擎应用在Windows系统中的情况。,图6-1 Windows平台上的计算引擎应用程序,在Windows平台上,用户开发的C语言或者Fortran语言应用程序作为COM应用的客户端,是整个应用程序的前端,而MATLAB作为COM应用的服务器运行在后台。两者利用MATLAB提供的计算引擎接口函数进行交互,例如在客户端从MATLAB进程中获取数据,或者在客户端调用MATLAB的指令等。 在C语言或者Fortan语言中使用MATLAB计算引擎应用集成MATLAB的算法与其它的集成方法比较,计算引擎应用程序具有如下几点

3、优势:, 调用MATLAB数学函数完成繁重的数学计算,充分发挥MATLAB在数值计算上的强大优势,通过C语言或者Fortran语言编写的GUI来调用后台的MATLAB数学计算功能,完成特殊的需要,节约开发时间。 在UNIX平台上,计算引擎的MATLAB进程不仅可以运行在本地计算机上,也可以运行在网络中的任何一台计算机上,这样可以将本地计算机作为前端的用户接口界面来直接调用后台复杂的算法。, 避免将庞大的MATLAB函数库链接到客户应用程序中。利用MATLAB Compiler打包的函数库时,需要将MATLAB的数学库或者图形库都链接到客户应用程序中,这样的操作会使客户应用程序变得庞大,而MAT

4、LAB计算引擎函数库仅仅采用十几个函数就可以完成这些复杂的操作了。 不是所有的MATLAB函数都可以使用MATLAB Complier或者COM Builder打包成为函数库或者COM组件,而使用MATLAB计算引擎则没有此类限制。,6.2 计算引擎应用,6.2.1 简单计算引擎应用示例 下面看一个简单的MATLAB计算引擎应用的例子,这个例子使用C语言开发。通过本例子来了解一下MATLAB计算引擎应用程序的基本结构和编译方法。 例6-1 简单的C语言计算引擎应用示例simpleengdemo.c。,001 /* 包含必要的头文件 */ 002 #include “engine.h“ 003

5、#include “stdio.h“ 004 #include “conio.h“ 005 #define BUFFERLEN 256 006 /* 主函数 */ 007 void main() 008 009 Engine *ep; 010 char cmdBUFFERLEN; 011 int i = 0; 012 int status = 0;,013 /* 打开计算引擎 */ 014 ep = engOpen(NULL); 015 if( ep = (Engine *)NULL ) 016 printf(“错误:无法打开MATLAB计算引擎n“ ); 017 exit(-1); 018

6、019 /* 执行MATLAB指令 */ 020 engEvalString(ep,“A = zeros(1,10);“); 021 /* 稍等片刻 */ 022 printf(“n请在MATLAB会话中查看计算的结果!n“); 023 printf(“n按任意键继续n“); 024 getch();,025 /* 执行其它的MATLAB指令 */ 026 for(i = 10; i 20; i+) 027 /* 准备在MATLAB中执行的指令 */ 028 sprintf(cmd,“A(%d) = fibonacci(%d);“,i-9,i); 029 /* 运行该指令 */ 030 eng

7、EvalString(ep,cmd); 031 032 /* 稍等片刻 */ 033 printf(“n请在MATLAB会话中查看计算的结果!n“); 034 printf(“n按任意键继续n“); 035 getch();,036 /* 关闭MATLAB计算引擎 */ 037 status = engClose(ep); 038 /* 好习惯! */ 039 if(status != 0) 040 printf(“无法正常关闭MATLAB计算引擎n“); 041 exit(-1); 042 043 printf(“nMATLAB 计算引擎应用完毕!n“) 044 ,例6-1的代码演示了MAT

8、LAB计算引擎应用程序的基本结构和流程。在代码的第002行包含了头文件engine.h,在该头文件中声明了所有eng函数的原型,并且也包含了matrix.h头文件,这样在计算引擎应用程序的C语言源程序中就不用包含matrix.h头文件了。在所有的C语言计算引擎应用程序中,都必须包含engine.h头文件。,在源代码的009行声明了Engine类型的指针,该指针类似于打开文件时的文件指针,相当于计算引擎的接口句柄。在014行,使用engOpen函数打开计算引擎,这个函数返回的变量就是计算引擎的指针。有了计算引擎的指针,就可以在C语言程序中执行MATLAB的指令,就像例6-1的020行和030行一

9、样。执行MATLAB的指令通过engEvalString函数,该函数的输入参数是MATLAB的指令字符串。,运行例6-1,在MATLAB的命令行窗口中键入下面的指令: !simpleengdemo & 或者在Windows的命令行提示符下键入指令:simpleengdemo,这时操作系统将启动一个MATLAB进程,不过启动的MATLAB进程仅包含MATLAB的命令行窗口,如图6-2所示。,图6-2 计算引擎启动的MATLAB会话窗口,这时在Windows的命令行提示符中显示如下信息: 请在MATLAB会话中查看计算的结果! 按任意键继续 大家可以在启动的MATLAB命令行中键入下面的指令: ?

10、whos Name Size Bytes Class A 1x10 80 double array Grand total is 10 elements using 80 bytes ?A A = 0 0 0 0 0 0 0 0 0 0,在MATLAB会话的工作空间中有一个变量A,该变量就是通过例6-1的第020行代码执行之后得到的。在命令行提示符中按任意键继续例6-1的代码执行,当重复出现相应的提示信息后,回到新启动的MATLAB会话中,键入下面的指令:,?A A = Columns 1 through 6 34 55 89 144 233 377 Columns 7 through 10

11、610 987 1597 2584,可以看到,由于例6-1的代码执行,MATLAB工作空间中的变量A变成了Fibonacci 数列的部分元素。,在Windows的命令行提示符中按任意键继续例6-1的执行,这时由于例子中正确地关闭了MATLAB计算引擎,则新启动的MATLAB会话会自动地退出运行,例6-1的MATLAB计算引擎应用实例就完整地执行完毕了。 例6-1的代码说明了MATLAB计算引擎应用C语言程序的基本结构以及相应的工作流程,只要包含了必要的头文件engine.h,调用eng函数就可以完成计算引擎应用程序的工作。一般地,MATLAB计算引擎应用程序的基本工作流程如下:,打开计算引擎e

12、ngOpen。 向新启动的MATLAB会话中设置数据engPutVariable。 执行MATLAB指令engEvalString。 从MATLAB会话中获取计算结果engGetVariable。 关闭计算引擎engClose。,6.2.2 常用的eng函数,1. 打开计算引擎engOpen 打开MATLAB计算引擎的函数为engOpen,该函数在C语言中的定义如下: Engine *engOpen(const char *startcmd); 该函数在Fortran语言中的定义如下: integer*4 function engOpen(startcmd) integer*4 ep char

13、acter*(*) startcmd,该函数具有一个输入参数字符串,在UNIX平台上,如果输入参数是空字符串或者NULL,则计算引擎打开本地计算机的MATLAB作为计算引擎的后台服务;如果输入参数是远程的计算机名称(hostname),则将相应的计算机上的MATLAB启动作为计算引擎的后台服务。 在Windows平台上,该输入参数只能为NULL。如果engOpen函数成功运行,则一个MATLAB进程作为后台服务启动,并且返回计算引擎的指针。,2. 关闭计算引擎engClose 关闭计算引擎的函数为engClose,该函数在C语言中的定义如下: int engClose(Engine *ep);

14、 该函数在Fortran语言中的定义如下: integer*4 function engClose(ep) integer*4 ep 该函数只有一个输入参数MATLAB计算引擎指针,如果成功关闭了计算引擎,则作为计算引擎的MATLAB后台服务进程被关闭,然后返回整数0表示成功完成了操作。,3. 执行MATLAB指令engEvalString 在MATLAB计算引擎应用程序中运行MATLAB指令的函数是engEvalString,该函数在C语言中的定义如下: int engEvalString(Engine *ep, const char *string); 该函数在Fortran语言中的定义如

15、下: integer*4 function engEvalString(ep, command) integer*4 ep character*(*) command,该函数具有两个输入参数,分别为计算引擎的指针ep和需要执行的MATLAB指令command。如果该函数返回了数值0,则表明计算引擎已经成功处理了用户的指令。注意,在调用该函数时,请尽量保证参数command包含的MATLAB指令是合法的。,4. 获取数据engGetVariable 获取数据的函数是engGetVariable,它能够从当前作为计算引擎服务的MATLAB会话中获取指定的变量,它在C语言中的定义如下: mxArra

16、y *engGetVariable(Engine *ep, const char *name);,该函数在Fortran语言中的定义如下: integer*4 function engGetVariable(ep, name) integer*4 ep character*(*) name 该函数的输入参数分别为MATLAB计算引擎的指针ep和需要读取的变量名name,如果成功读取了数据,则函数返回mxArray数据类型对象指针。,5. 写入数据engPutVariable 从计算引擎应用程序向MATLAB会话写入数据的函数是engPutVariable,该函数在C语言中的定义如下: int engPutVariable(Engine *ep, const char *name, const mxArray *mp);,

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

当前位置:首页 > 高等教育 > 大学课件

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