999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于ActiveX引擎的VC++與Matlab混合編程及其應用

2010-01-29 07:19:08王若亮李晶娣
電子設計工程 2010年9期
關鍵詞:引擎設置利用

慕 巍,王若亮,李晶娣,邱 亞

(1.西安應用光學研究所 陜西 西安 710065;2.西安飛行自動控制研究所 陜西 西安 710065)

VC++是微軟公司推出的一套面向對象的可視化集成編程系統[1],是Windows平臺下構建32位應用程序的強大而又復雜的開發工具[2],但其在科學計算方面函數庫不夠豐富,讀取、顯示數據圖形不方便。Matlab是Matrix Laboratory(矩陣實驗室)的縮寫,是由美國MathWorks公司開發的集數值分析、符號計算和圖形可視化三大基本功能于一體,功能強大、操作簡單的語言[3]。它包含大量高度集成的函數可供調用,是適合科學研究、工程設計等眾多學科領域使用的簡潔、高效的編程工具[4]。

為充分發揮這二者優勢,利用Matlab提供的ActiveX引擎,實現在VC++開發的應用程序中完全控制Matlab,使用戶輕松開發出高效、功能強大的應用程序,為工程實踐和科研工作提供強大的技術支持。

1 Matlab ActiveX引擎

Matlab ActiveX引擎(engine),是指一組Matlab提供的接口函數[5],支持C/C++、Fortran等語言,通過這些接口函數,用戶可以在VB、Delphi、VC++等編程環境中實現對Matlab的控制,將Matlab作為一個操作引擎使用,使其在后臺運行。操作Matlab引擎常用的函數及其功能如表1所示。

表1 Matlab引擎常用的函數及其功能表Tab.1 Functions of Matlab engine

通過引擎方式,應用程序會打開一個新的Matlab進程,將Matlab作為一個功能強大的和可編程的數學函數庫,調用Matlab中大量的數學計算和圖形處理函數,通過控制它完成任何計算和繪圖操作。同時,引擎方式打開的Matlab進程會在任務欄顯示自己的圖標,打開該窗口,可以觀察主程序通過引擎方式控制Matlab運行的流程,并可在其中輸入任何Matlab命令。

2 ActiveX引擎實現VC和Matlab混合編程

在VC++編程環境下利用Matlab ActiveX引擎實現VC++和Matlab的混合編程,需要對VC++編譯環境和應用程序進行設置,具體步驟如下:

1)通過菜單 Tools/Options,打開Visual C++6.0設置屬性頁,進入Directories選項卡,在Show Directories for下拉列表中選擇 Include Files,添加路徑:E:MATLAB7externinclude(假定Matlab的安裝目錄為E:MATLAB7),如圖1所示。

圖1 VC++編譯環境設置步驟1Fig.1 Step 1 of setting VC++compiling environment

2)再通過Show Directories for下拉列表中選擇 Library Files,添加路徑:E:MATLAB7externlibwin32Microsoftmsvc70,如圖2所示。

圖2 VC++編譯環境設置步驟2Fig.2 Step 2 of setting VC++compiling environment

3)通過菜單 Projects/Settings,進入 Link頁面,在 Object/Library Modules框中,添加庫文件名:libmx.lib,libmat.lib,libeng.lib,如圖3所示。

4)在使用Matlab引擎函數的程序頭文件中添加如下代碼:

圖3 VC++編譯環境設置步驟3Fig.3 Step 3 of setting VC++compiling environment

5)在應用程序中添加調用Matlab引擎的程序代碼:

if(!(ep=engOpen(NULL))) //測試是否啟動 Matlab 引擎成功

以上步驟是對VC與Matlab混合編程的編譯環境和應用程序進行設置,在完成了以上基本步驟后就可以利用Matlab引擎庫函數engEvalString來調用Matlab的內建函數了。以上步驟 1)、2)只需設置一次,而步驟 3)、4)、5)對每個工程都要單獨設定。

3 應用實例分析

對大部分軟件研發人員來說利用VC++編程方便、高效,但是要顯示數據圖形就不那么容易了,這時可利用Matlab ActiveX引擎輔助畫圖做數據分析。下面通過一個具體的應用實例來說明如何實現VC++與Matlab ActiveX引擎的混合編程。程序的主要功能是在VC++中對數組x計算函數值y=5sinx,然后調用Matlab繪制函數y對x的曲線。

首先,利用VC++6.0的MFC建立一個基于對話框的應用程序,如圖4,添加相應按扭,并為其添加相應的成員函數。

圖4 ActiveX引擎測試程序界面Fig.4 Interface of ActiveX engine of test program

其次,根據前面介紹的ActiveX引擎實現VC++和Matlab混合編程的實現步驟,為程序設置相應的編譯環境并添加連接庫函數。

然后,調用Matlab的內建函數和命令,主要編寫程序代碼如下:

1)在“啟動引擎”按扭的成員函數中,添加如下代碼:

if(!(ep=engOpen(NULL))) //測試是否啟動 Matlab 引擎成功

2)在“關閉引擎”按扭的成員函數中,添加代碼:

engClose(ep);//關閉 Matlab 引擎

3)在“測試”按扭的成員函數中,添加如下代碼:

//定義 mxArray數組 xx,yy,為 1行,100列的實數數組

mxArray*xx=mxCreateDoubleMatrix(1,100,mxREAL);

mxArray*yy=mxCreateDoubleMatrix(1,100,mxREAL);

memcpy(mxGetPr(xx),x,100*sizeof(double));//將 x 復制到mxarray數組xx中

memcpy(mxGetPr(yy),y,100*sizeof(double));//將 y 復制到mxarray數組yy中

engPutVariable(ep,“xx”,xx);//將 mxArray 數組 xx 寫入到Matlab,命名為xx

engPutVariable(ep,“yy”,yy);//將 mxArray 數組 yy 寫入到Matlab,命名為yy

engEvalString(ep,“plot(xx,yy);”);//向 Matlab 引 擎 發送畫圖命令

engEvalString(ep,“xlabel(‘x’);”);//向圖形窗口添加橫坐標標注

engEvalString(ep,“ylabel(‘y=5*sin(x)’);”);//向圖形窗口添加縱坐標標注

編譯運行,先點擊“啟動引擎”按鈕,Matlab引擎啟動后,再點擊“測試”按鈕,就可以得到如圖5所示的結果。

該實例是利用ActiveX引擎實現VC++與Matlab混合編程的一個簡單應用,在實際的數值計算、信號處理、控制系統開發等工程應用中,可以很好的利用基于ActiveX引擎的VC++和Matlab的混合編程技術,簡化應用程序的開發過程,縮短開發周期。

圖5 ActiveX引擎測試曲線Fig.5 Test curve of ActiveX engine

4 結束語

本文詳細介紹了在VC++編譯環境下利用Matlab提供的ActiveX引擎實現應用系統設計和分析的具體方法,并通過一個具體應用實例介紹了VC++如何利用Matlab ActiveX引擎進行輔助畫圖和數據分析。

Matlab不但具有強大的數值計算和符號計算能力,而且為不同領域提供了豐富的工具箱[5]。而VC++在面向對象的應用程序開發方面功能強大、靈活性好[6]。利用Matlab提供的ActiveX引擎,實現了VC++和Matlab的混合編程,能夠發揮各自優勢,為用戶提供了一個友好的編程接口,縮短了工程應用軟件的開發周期,同時也提高了程序的運行效率。

[1]姚領田.精通MFC程序設計[M].北京:人民郵電出版社,2006.

[2]謝佩軍,計時鳴,張利.VC++與MATLAB混合編程的探討[J].計算機應用與軟件,2006(2):128-130.XIE Pei-jun,JI Shi-ming,ZHANG Li.Research of combined programming of VC++and MATLAB[J].Computer Applications and Software,2006(2):128-130.

[3]張靜.MATLAB在控制系統中的應用[M].北京:電子工業出版社,2007.

[4]王沫然.MATLAB 6.0與科學計算[M].北京:電子工業出版社,2001.

[5]劉志儉.MATLAB應用程序接口用戶指南[M].北京:科學出版社,2000.

[6]彭猛.VC++與MATLAB混合編程的研究 [J].科技咨詢導報,2007(8):21-21.PENG Meng.Research on hybrid programming of VC++and Matlab[J].Science and Technology Consulting Herald,2007(8):21-21.

猜你喜歡
引擎設置利用
利用min{a,b}的積分表示解決一類絕對值不等式
中等數學(2022年2期)2022-06-05 07:10:50
中隊崗位該如何設置
少先隊活動(2021年4期)2021-07-23 01:46:22
利用一半進行移多補少
利用數的分解來思考
Roommate is necessary when far away from home
藍谷: “涉藍”新引擎
商周刊(2017年22期)2017-11-09 05:08:31
本刊欄目設置說明
中俄臨床醫學專業課程設置的比較與思考
無形的引擎
河南電力(2015年5期)2015-06-08 06:01:46
基于Cocos2d引擎的PuzzleGame開發
主站蜘蛛池模板: 国产中文一区二区苍井空| 国产白浆在线观看| 中文无码精品a∨在线观看| 色综合色国产热无码一| 国产一区亚洲一区| 亚洲黄色网站视频| AV片亚洲国产男人的天堂| 自拍偷拍欧美日韩| 高清免费毛片| 国产99视频免费精品是看6| 黄片在线永久| 91麻豆久久久| 日韩成人午夜| 黄色污网站在线观看| 亚洲第一视频网| av无码一区二区三区在线| 亚洲69视频| 久久亚洲国产视频| 国产欧美自拍视频| 久久综合九色综合97网| 69精品在线观看| 日韩无码视频专区| 成人国产免费| 久久人人妻人人爽人人卡片av| 97青草最新免费精品视频| 欧美国产日韩一区二区三区精品影视| 啦啦啦网站在线观看a毛片| 国产精品一区在线麻豆| 亚洲精品va| 国产乱人伦精品一区二区| 成人免费午间影院在线观看| 久久永久视频| 啪啪永久免费av| 亚洲毛片一级带毛片基地| a免费毛片在线播放| 国产成人高精品免费视频| 国产在线98福利播放视频免费| 亚洲成人免费看| 国产无码制服丝袜| 五月丁香伊人啪啪手机免费观看| 57pao国产成视频免费播放| 亚洲天堂免费在线视频| 99这里只有精品免费视频| 亚洲色无码专线精品观看| 日韩精品一区二区三区大桥未久| 亚洲小视频网站| 免费国产不卡午夜福在线观看| 亚洲欧美成人网| 91探花国产综合在线精品| 一区二区三区在线不卡免费| 国产原创演绎剧情有字幕的| 久久综合干| 日本不卡视频在线| 色婷婷电影网| 成人毛片在线播放| 欧美亚洲中文精品三区| 少妇精品久久久一区二区三区| 国产在线一区视频| 国产在线拍偷自揄拍精品| 国产成熟女人性满足视频| 日韩毛片在线播放| 国产自在线播放| 久久亚洲中文字幕精品一区| 亚洲最大福利网站| 国产黄网永久免费| 日韩在线成年视频人网站观看| 精品国产网站| 国产激情无码一区二区三区免费| 伊人久久大线影院首页| 一本色道久久88亚洲综合| 伊人久久综在合线亚洲2019| 97精品久久久大香线焦| 亚洲国产综合自在线另类| 国产va在线观看免费| 一级成人欧美一区在线观看| 国产区免费| 亚洲人成色77777在线观看| 国产精品中文免费福利| 国产屁屁影院| 欧美另类第一页| 91精品久久久无码中文字幕vr| 青青草91视频|