APP下载

基于MATCOM的MATLAB与VC++之间的混合编程

2012-09-12高秋燕

电子测试 2012年11期
关键词:对话框代码按钮

高秋燕

(中北大学 信息与通信工程学院, 山西太原 030051)

0 引言

MATLAB是一个高效、完整的数学平台,它是一个高度集成的语言环境,在它的界面下可以独立编程、运行和调试,同时MATLAB本身对程序编写也存在一些局限,使得它在很多情况下不够灵活,运行速度不够快。而且,用户必需在安装有MATLAB系统的机器上使用.m文件,这样就给工程计算带来了很大不便,在处理一些实际应用问题时显得灵活性不足[1-2]。再就是MATLAB程序可被直接看到源代码,因而算法和数据的保密性不好。

微软公司开发的Visual C++具有强大的可视化集成编程环境,用它开发的系统具有界面友好、代码效率高和执行速度快等优点,集成了功能强大的编辑器、编译器、连接器和调试器等多种多样的可视化编程工具,而且可以利用MFC编程漂亮的界面进行控制。是目前综合性最高、最强大、也是最复杂的软件开发工具之一,应用极为广泛。因此利用MATCOM将两者结合起来效果会很好,MATCOM与VC++具有良好的接口,只要包含必要的库文件和头文件即可实现对MATLAB的.m文件转化,使之转化成C++代码,而无需运行MATLAB,来进行混合编程研究,运行速度非常快[3]。

1 MATLAB,MATCOM与VC++特点

1.1 MATLAB的特点

美国Mathworks公司开发的MATLAB已成为一个国际公认的优秀的科技应用软件,使用广泛,可以实现数值分析、优化、统计、偏微分方程数值解、自动控制、计算机仿真、数字信号处理、图像处理等若干领域的计算和图形显示功能[4]。命令语句功能非常强大,包含了大量高度集成的函数可供直接调用,用户无需具有高深的数学知识和程序设计能力,也不必深入了解算法及编程技巧,但又允许用户自行建立指定功能的m文件,极易扩展。随着MATLAB的广泛使用,还出现了为各个领域专门使用的工具箱函数,这些工具箱的出现使MATLAB的功能更强大。然而,MATLAB所固有的某些缺陷,诸如解释性语言的低执行效率,局限于MATLAB运行环境而不利于商业开发,以及源代码的公开而不利于算法与数据的保密性等等,都限制了MATLAB的推广应用[5]。

1.2 VC++的特性

Visual C++自从诞生以来,一直是Window环境下最主要的应用开发系统,它是与Win32紧密相连的C++语言的集成开发环境[6]。从底层软件直到上层直接面向用户的软件都可以用VC++来完成开发,而且VC++强大的调试功能也为大型复杂软件的开发提供了有效的排错手段,可以利用MFC设计漂亮的界面,与用户直接接触,这种VC++开发的系统具有容易维护和升级、界面友好、代码效率高、执行速度快等一系列优点[7]。

1.3 基于MATCOM的MATLAB和VC++的结合

MATCOM是Mathworks公司推出的由MATLAB 到C++编译开发软件平台,MATCOM的集成调试编译环境是MIDEVA,是可视化的界面。使用MATCOM编译器可以将MATLAB源代码译成同等功能的C++代码,它既保持了MATLAB的优良算法,又提高了执行速度[8]。而且它还支持一定的图形显示,生成代码的可读性好,其具有简单便捷、功能强大、灵活应用的特点。在安装MATCOM之前,必须先安装好MATLAB和Visual C++,如果安装成功,在VC++的开发环境的工具栏上会出现图1所示的工具条。

图1 Visual Matcom工具条

2 接口实现

以一个卡尔曼滤波器为例,通过MATCOM45实现.m文件到C++代码的转换。

2.1 建立.m文件

启动MIDEVA,然后打开File再打开New,新建kalman.m文件,是一个卡尔曼滤波器的程序,如图2所示。此时将.m文件保存到matcom45Debug目录下即可。

图2 kalman.m文件

2.2 将.m文件转换成C++代码

(1)在VC中用MFC AppWizard(exe)创建一个基于对话框工程,工程名字为:Test,然后在对话框上添加一个按钮,按钮的ID为IDC_DRAW,Caption为绘图,添加绘图后的对话框界面如图3所示。

图3 添加绘图按钮后的对话框界面

(2)此时,点击图1所示的第一个按钮,就可以对kalman.m进行m文件进行转换。然后把kalman.cpp的内容拷贝到void CTestDlg::OnDraw()中。

(3)将 C:matcom45lib下的matlib.h和v4501v.lib文件和C:matcom45debug下的kalman.h文件拷贝到工程Test目录下,然后在VC中将库文件和头文件加入到工程中:工程->添加工程->Files,选择刚刚拷贝到Test目录下的matlib.h、v4501v.lib和Test.h文件。转化后生成的工程文件如图4所示。

图4.m文件转换后生成的工程文件

2.3 界面如何显示

(1)在TestDlg.cpp中加入如下代码:#include"matlib.h" 和#include "kalman.h"

(2) 在 void CTestDlg::OnDraw()中 分 别 添加一个初始化类库调用函数”initM(MATCOM_VERSION)”和一个结束类库调用函数”exitM()”如图5所示。

图5 给按钮添加的代码

(3)点击图3中的绘图按钮,得到滤波曲线如图6所示:一个滤波前的图形,一个滤波后的图形。

图6 运行结果

3 结论

MATCOM提供了MATLAB中.m文件与其他高级语言的接口,使复杂的接口变得非常简单,并且使.m文件可以编译为脱离MATLAB环境独立执行的可执行性程序,这样提高了代码的复用率,提高了代码的执行速度,使纯文本的.m文件变为二进制的可执行程序,增加了知识保护的安全性。本文通过对实例的分析研究,从中感受到两者结合进行混合编程d的灵活和很好的可操作性,使用这种方法来提高了程序编写的效率,取得了非常好的效果。

[1]谭志芳,刘一峰,贾小铁.MATLAB 与C/C+ +语言混合编程的几种方法[J].微型机与应用,2001(2):8-10.

[2]李文煜.VC与Matlab混合编程实现图像处理[J].计算机仿真,2005,22(1):254-257.

[3]石波,陈淑珍,沈海鸥.VC与MATLAB接口方法的剖析[J].计算机工程,2000,26(3):98-100.

[4]郭虹,薄云飞,林冬.VC++与MATLAB 混合编程技术研究[J].计算机工程,2002,28(9):269-271.

[5]李天昀,葛临东.综述MA TLAB 与VC+ + 的交互编程[J].计算机仿真,2004,21(9):193-196.

[6]黄金明,武玉强,邢西深.VC++与MATLAB的混合编程研究[J].电脑开发与应用,2008,21(10):38-41.

[7]王周益,刘继兴,柳长安.VC++与MATLAB 混合编程研究及开发实例[J].计算机应用研究,2006,(5):154-156.

[8]李云龙,唐六丁,邓四二,等.基于 VC + +与MATLAB 混合程序设计与应用[J].河南科技大学学报:自然科学版,2008,9(4):50-51.

猜你喜欢

对话框代码按钮
当你面前有个按钮
正常恢复虚拟机
Bootlace Worms’Secret etc.
创世代码
创世代码
创世代码
创世代码
死循环
内心不能碰的按钮
快速抓取对话框中的完整信息