C与matlab混合编程

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC++与Matlab混合编程之引擎操作详解1

Visual C++是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快。但在科学计算方面函数库显得不够丰富、读取、显示数据图形不方便。Matlab 是一款将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,适合科学研究、工程设计等众多学科领域使用的一种简洁、高效的编程工具。不过由于Matlab使用的是解释性语言,大大限制了它的执行速度和应用场合。基于VC和Matlab混合编程是很多熟悉VC++编程而又需要进行科学计算、数据仿真的科研人员常用的一种方式,其中最简单也最直接的方法就是调用Matlab引擎。本文以下部分将详细介绍通过VC++6.0调用Matlab6.5引擎来达到VC++与Matlab数据共享编程的方法。

1. 什么是Matlab引擎

所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持C/C++、Fortran 等语言,通过这些接口函数,用户可以在其它编程环境中实现对Matlab的控制。可以主要功能有:

★打开/关闭一个Matlab对话;

★向Matlab环境发送命令字符串;

★从Matlab环境中读取数据;

★向Matlab环境中写入数据。

与其它各种接口相比,引擎所提供的Matlab功能支持是最全面的。通过引擎方式,应用程序会打开一个新的Matlab进程,可以控制它完成任何计算和绘图操作。对所有的数据结构提供100%的支持。同时,引擎方式打开的Matlab进程会在任务栏显示自己的图标,打开该窗口,可以观察主程序通过engine方式控制Matlab运行的流程,并可在其中输入任何Matlab命令。

实际上,通过引擎方式建立的对话,是将Matlab以ActiveX控件方式启动的。在Matlab初次安装时,会自动执行一次:

matlab /regserver

将自己在系统的控件库中注册。如果因为特殊原因,无法打开Matlab引擎,可以在Dos命令提示符后执行上述命令,重新注册。

2. 配置编译器

要在VC中成功编译Matlab引擎程序,必须包含引擎头文件engine.h并引入Matlab 对应的库文件libmx.lib、libmat.lib、libeng.lib。具体的说,打开一个工程后,做如下设置(以VC6为例):

1) 通过菜单工程/选项,打开设置属性页,进入Directories页面,在目录下拉列表框中选择Include files,添加路径:"C:\matlab\extern\include"(假定matlab安装在

C:\matlab目录)。

2) 选择Library files,添加路径:C:\matlab\extern\lib\win32\microsoft\msvc60。(vs2005的话,不加msvc60)

3) 通过菜单工程/设置,打开工程设置属性页,进入Link页面,在Object/library modules编辑框中,添加文件名libmx.lib libmat.lib libeng.lib。

以上步骤1)、2)只需设置一次,而步骤3)对每个工程都要单独设定,对于其它C++编译器如Borland C++ builder,设置大体相同,不再赘述

VC++与Matlab混合编程2

在VC中调用MATLAB的,总结有以下几种方法:1、是调用Matlab引擎;2、是调用Matlab中M函数转化成的dll文件;3、调用Matlab中M函数转化成c语言的函数。

第一种方法

一、设置VC相关属性。

(1)Visual C++6.0 编译环境的设置:通过菜单Tools/ Options,打开Visual C++6.0设置属性页,进入Directorie页面,在Show Directories for下拉列表中选择Include Files,添加路径:\extern\include(在Matlab的安装路径下);再选择下拉列表中的Library Files,添加路径:\extern\ lib\win32\Microsoft(在Matlab的安装路径下,但是在我查看资料的时候看到很多是\extern\ lib\win32\Microsoft\msvc60这个路径,但是我用的是MatlabR2009a,或许这里设置有点区别)。看资料说编译环境或许只需设置一次,但是我在设置的时候每次都要设置。

(2)添加库文件: 通过菜单Projects|settings,进入Link 页面,在Object/Library Modules 框中,添加库文件名:libmx.lib 、libmat.lib 、libeng.lib。每个新的工程文件都要单独添加库文件。

二、在VC中通过MATLAB引擎调用Matlab函数命令:

现在以画一个正弦曲线的图为例。

1、新建一个MFC程序,命名Test,基于对话框。

2、在Testdlg.cpp中加入头文件:

#include "engine.h"

#include

3、添加botton Test,并添加点击命令,加入代码如下:void CTestDlg::OnTest()

{

// TODO: Add your control notification handler code here Engine *ep;

if (!(ep = engOpen(NULL))) //打开Matlab引擎

{

MessageBox ("Can't start MATLAB engine", MB_OK);

exit(-1);

}

engSetVisible(ep, 0);

engEvalString(ep,"x=0:0.001:2*pi;");

engEvalString(ep,"y=sin(x);");

engEvalString(ep,"plot(x,y)");//会显示出图

}

4、运行程序,单击Test按钮,运行结果如下图:

相关文档
最新文档