高秋燕
(中北大學 信息與通信工程學院, 山西太原 030051)
MATLAB是一個高效、完整的數學平臺,它是一個高度集成的語言環(huán)境,在它的界面下可以獨立編程、運行和調試,同時MATLAB本身對程序編寫也存在一些局限,使得它在很多情況下不夠靈活,運行速度不夠快。而且,用戶必需在安裝有MATLAB系統(tǒng)的機器上使用.m文件,這樣就給工程計算帶來了很大不便,在處理一些實際應用問題時顯得靈活性不足[1-2]。再就是MATLAB程序可被直接看到源代碼,因而算法和數據的保密性不好。
微軟公司開發(fā)的Visual C++具有強大的可視化集成編程環(huán)境,用它開發(fā)的系統(tǒng)具有界面友好、代碼效率高和執(zhí)行速度快等優(yōu)點,集成了功能強大的編輯器、編譯器、連接器和調試器等多種多樣的可視化編程工具,而且可以利用MFC編程漂亮的界面進行控制。是目前綜合性最高、最強大、也是最復雜的軟件開發(fā)工具之一,應用極為廣泛。因此利用MATCOM將兩者結合起來效果會很好,MATCOM與VC++具有良好的接口,只要包含必要的庫文件和頭文件即可實現(xiàn)對MATLAB的.m文件轉化,使之轉化成C++代碼,而無需運行MATLAB,來進行混合編程研究,運行速度非常快[3]。
美國Mathworks公司開發(fā)的MATLAB已成為一個國際公認的優(yōu)秀的科技應用軟件,使用廣泛,可以實現(xiàn)數值分析、優(yōu)化、統(tǒng)計、偏微分方程數值解、自動控制、計算機仿真、數字信號處理、圖像處理等若干領域的計算和圖形顯示功能[4]。命令語句功能非常強大,包含了大量高度集成的函數可供直接調用,用戶無需具有高深的數學知識和程序設計能力,也不必深入了解算法及編程技巧,但又允許用戶自行建立指定功能的m文件,極易擴展。隨著MATLAB的廣泛使用,還出現(xiàn)了為各個領域專門使用的工具箱函數,這些工具箱的出現(xiàn)使MATLAB的功能更強大。然而,MATLAB所固有的某些缺陷,諸如解釋性語言的低執(zhí)行效率,局限于MATLAB運行環(huán)境而不利于商業(yè)開發(fā),以及源代碼的公開而不利于算法與數據的保密性等等,都限制了MATLAB的推廣應用[5]。
Visual C++自從誕生以來,一直是Window環(huán)境下最主要的應用開發(fā)系統(tǒng),它是與Win32緊密相連的C++語言的集成開發(fā)環(huán)境[6]。從底層軟件直到上層直接面向用戶的軟件都可以用VC++來完成開發(fā),而且VC++強大的調試功能也為大型復雜軟件的開發(fā)提供了有效的排錯手段,可以利用MFC設計漂亮的界面,與用戶直接接觸,這種VC++開發(fā)的系統(tǒng)具有容易維護和升級、界面友好、代碼效率高、執(zhí)行速度快等一系列優(yōu)點[7]。
MATCOM是Mathworks公司推出的由MATLAB 到C++編譯開發(fā)軟件平臺,MATCOM的集成調試編譯環(huán)境是MIDEVA,是可視化的界面。使用MATCOM編譯器可以將MATLAB源代碼譯成同等功能的C++代碼,它既保持了MATLAB的優(yōu)良算法,又提高了執(zhí)行速度[8]。而且它還支持一定的圖形顯示,生成代碼的可讀性好,其具有簡單便捷、功能強大、靈活應用的特點。在安裝MATCOM之前,必須先安裝好MATLAB和Visual C++,如果安裝成功,在VC++的開發(fā)環(huán)境的工具欄上會出現(xiàn)圖1所示的工具條。
圖1 Visual Matcom工具條
以一個卡爾曼濾波器為例,通過MATCOM45實現(xiàn).m文件到C++代碼的轉換。
啟動MIDEVA,然后打開File再打開New,新建kalman.m文件,是一個卡爾曼濾波器的程序,如圖2所示。此時將.m文件保存到matcom45Debug目錄下即可。
圖2 kalman.m文件
(1)在VC中用MFC AppWizard(exe)創(chuàng)建一個基于對話框工程,工程名字為: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文件轉換后生成的工程文件
(1)在TestDlg.cpp中加入如下代碼:#include"matlib.h" 和#include "kalman.h"
(2) 在 void CTestDlg::OnDraw()中 分 別 添加一個初始化類庫調用函數”initM(MATCOM_VERSION)”和一個結束類庫調用函數”exitM()”如圖5所示。
圖5 給按鈕添加的代碼
(3)點擊圖3中的繪圖按鈕,得到濾波曲線如圖6所示:一個濾波前的圖形,一個濾波后的圖形。
圖6 運行結果
MATCOM提供了MATLAB中.m文件與其他高級語言的接口,使復雜的接口變得非常簡單,并且使.m文件可以編譯為脫離MATLAB環(huán)境獨立執(zhí)行的可執(zhí)行性程序,這樣提高了代碼的復用率,提高了代碼的執(zhí)行速度,使純文本的.m文件變?yōu)槎M制的可執(zhí)行程序,增加了知識保護的安全性。本文通過對實例的分析研究,從中感受到兩者結合進行混合編程d的靈活和很好的可操作性,使用這種方法來提高了程序編寫的效率,取得了非常好的效果。
[1]譚志芳,劉一峰,賈小鐵.MATLAB 與C/C+ +語言混合編程的幾種方法[J].微型機與應用,2001(2):8-10.
[2]李文煜.VC與Matlab混合編程實現(xiàn)圖像處理[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].電腦開發(fā)與應用,2008,21(10):38-41.
[7]王周益,劉繼興,柳長安.VC++與MATLAB 混合編程研究及開發(fā)實例[J].計算機應用研究,2006,(5):154-156.
[8]李云龍,唐六丁,鄧四二,等.基于 VC + +與MATLAB 混合程序設計與應用[J].河南科技大學學報:自然科學版,2008,9(4):50-51.