《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > 基于MATCOM的MATLAB與VC混合編程技術研究
基于MATCOM的MATLAB與VC混合編程技術研究
吳高峰1,李熙瑩2
摘要: 研究了基于MATCOM的MATLAB與VC混合編程技術,提出了一種簡便的設置MATCOM環境的方法,介紹了MATCOM提供的一個方便調試工具——矩陣查看器及其具體使用方法。結合實例,詳細介紹了基于MATCOM的混合編程的實現途徑,對擴展MATCOM的功能提出了一種獨到的解決辦法。
Abstract:
Key words :

  摘 要: 研究了基于MATCOM的MATLAB與VC混合編程技術,提出了一種簡便的設置MATCOM環境的方法,介紹了MATCOM提供的一個方便調試工具——矩陣查看器及其具體使用方法。結合實例,詳細介紹了基于MATCOM的混合編程的實現途徑,對擴展MATCOM的功能提出了一種獨到的解決辦法。
  關鍵詞: MATCOM;MATLAB;VC;混合編程

   MATLAB是MathWorks公司推出的數學軟件,它將數值分析、矩陣計算、信號處理、數據采集和圖形顯示結合在一起,包含大量高度集成的函數可供調用。現在,MATLAB幾乎在各個領域都得到了廣泛的應用,也取得了巨大的成功,被稱為第四代編程語言。
  但是MATLAB使用的是解釋性語言,這大大限制了它的執行速度,而且用MATLAB開發的程序只局限于MATLAB運行環境而不能作為商業軟件。
  VC作為Windows平臺下主要的應用程序開發環境之一,能方便實現軟件開發,但在工程計算及可視化方面,與MATLAB相比編程顯得復雜很多,因此,將VC與MATLAB混合編程,必將為軟件開發帶來便利。
  本文介紹基于MATCOM的混合編程方法。示例中用到的軟件為MATLAB R2009A和VC 6.0。為了便于敘述,用VC6.0新建一個基于對話框的程序TestMatcom。
1 MATCOM簡介
    MathTools公司有一系列的產品,包括MIDEVA、MATCOM、Visual MATCOM、Matrix 。其中Matrix 是所有產品的核心,它是一個C++數學圖形圖像庫,里面包含了約600個經過嚴格測試的函數,是實現將M文件轉化為C++文件的基礎。MATCOM是基于Matrix 的一個編譯器,Visual MATCOM可以看成是一個集成到VC環境中的MATCOM。而MIDEVA是M文件的解釋器和集成開發環境,它通過一個完整而強大的開發和運行M文件的環境包含并拓展了MATCOM的功能,可以和MATLAB相媲美。為了方便,通常將MathTools公司的這些產品統稱為MATCOM。本文在不引起混淆的情況下不作區分。
2 MATCOM的安裝與配置
  MATCOM的安裝與普通Windows程序的安裝過程類似,可參考文獻[1]、[2]所述。成功安裝后,在目錄C:\matcom45\lib下可找到matlib.h及v4501v.lib這2個文件,在Windows操作系統的system32目錄下可找到v4501v.dll和ago4501.dll這2個文件。將這4個文件拷貝到TestMatcom工程中再做如下配置即可:
  (1)在VC的FileView標簽中的Resource Files目錄上點擊右鍵->Add Files to Folder->文件類型選擇“Library Files(.lib)”->選中v4501v.lib ->點擊“OK”即添加成功。
    (2)在需要使用MATCOM函數的文件中添加#include "matlib.h"。本文示例在TestMatcomDlg.cpp中添加。
    (3)在使用MATCOM的函數之前,添加初始化語句:initM(MATCOM_VERSION)。本文示例在void CTestMatcomDlg::OnPaint()函數中添加。
    (4)在使用MATCOM的函數之后,添加釋放資源語句:exitM()。本文示例也在void CTestMatcomDlg::OnPaint()函數中添加。
    為了使Visual MATCOM可用,也需做相應的配置,參考文獻[1]、[3]介紹了配置的過程,本文從略。
3 巧用矩陣查看器
  安裝完Visual MATCOM之后可以看到Visual MATCOM工具欄中有個眼鏡按鈕,這個就是矩陣查看器。在調試模式下可以通過它查看MATCOM矩陣的值,這對VC程序調試是非常方便的。在VC中,指針變量和數組尤其是二維及以上的指針變量和數組的元素值是不方便查看的。有了這個工具,就可以將需要查看的指針變量或數組的值傳遞給MATCOM矩陣,然后在矩陣查看器中查看[3]。具體的查看方法是:在相應位置設置斷點,當VC程序運行到斷點停下后,點擊矩陣查看器按鈕,然后在矩陣名對話框里輸入矩陣名,并點擊Reload按鈕,矩陣的內容即可顯示出來。另外,為了使得矩陣查看器能在程序中起作用,需要在VC程序中添加:unsigned int mlibpr=mt_set_MT(0)。
  示例:
  /*定義1個二維數組*/
    double a[2][3]={1,2,3,4,5,6}; 
    /*定義1個Mm 矩陣,
    并初始化為2行3列,元素都為0*/
    Mm ma=zeros(2,3); 
    /*將數組元素復制到ma中*/ 
    memcpy((char*)ma.addr( ),(char*)a,6*sizeof(double));
4 混合編程的實現
  混合編程有不同的實現途徑,本文將其分為二大類。
4.1 將M文件轉化為C++代碼
  M文件可分為腳本文件和函數文件兩大類。這兩者的混合編程實現步驟略有不同?,F以2個示例說明。
    例1:
      %wires.m
      n=1000;
      t=inspace(0,2*pi,n);
      x=sin(t).*sin(2*t).*sin(3*t);
      y=cos(5*t).*cos(7*t).*cos(11*t);
      plot(x, y);
  雙擊桌面上的MIDEVA圖標打開MIDEVA,然后在MIDEVA菜單欄中選File->Compile to exe,在彈出的Go command對話框中通過瀏覽選擇wires.m這個文件,然后點擊OK.轉化成功后可以在C:\matcom45\Debug下找到wires.cpp這個文件。打開這個文件,可以看到內容為(刪去不需要的代碼,注釋為筆者添加,欲全面了解M文件與其對應的CPP文件的關系,可以參考文獻[2]):
  //Mm為處理矩陣的類
   Mm n; Mm t; Mm x; Mm y;
   n=1000.0; 
  t=linspace(0.0,2.0*pi,n);  
   x=times(times(sin(t),sin(2.0*t)),sin(3.0*t)); 
    /*MATLAB的點乘操作在VC里面通過times函數實現。*/
  y=times(times(cos(5.0*t),cos(7.0*t)),cos(11.0*t));
  plot((CL(x),y));/*輸入參數個數不定時,需用CL函數。注意y不用加CL()*/
   可以看出,經MATCOM轉化后的C++代碼和M代碼幾乎句句對應,可讀性強。將以上內容拷貝到void CTestMatcomDlg::OnPaint()函數中,編譯運行即可得到所需的結果。
    例2:
      %CreateMagic.m
    function result=CreateMagic(n)
      result=magic(n);
  用MATCOM成功轉化后可以在Debug目錄下找到CreateMagic.cpp和CreateMagic.h這2個文件。將其添加進TestMatcom工程中并在TestMatcomDlg.cpp中添加1句:#include“CreateMagic.h”同時在消息響應函數中添加代碼:“Mm a=5; Mm b=CreateMagic(a);”可驗證b為5×5的魔方陣。若編譯不通過 ,可嘗試在CreateMagic.cpp文件中添加#include "stdafx.h"。
4.2 將M文件轉化為DLL
  出于代碼保密等原因,有時需要將M文件轉化為DLL以供其他程序調用,這時可以利用MATCOM的Compile to dll功能來實現。
    示例:
       %Exchange2.m
       function[c,d]=Exchange2(a,b)
       c=b;
       d=a;
    通過File->Compile to dll將該M文件轉化為dll,在Debug目錄下可找到Exchange2.lib和Exchange2.dll這2個文件,將其放入TestMatcom工程目錄下并在TestMatcomDlg.cpp中添加以下代碼:
    #pragma comment(lib, "Exchange2.lib")
    extern "C" int DLLX_stdcall Exchange2_v(char* emsg, int nlhs, Mm* plhs[ ], int nrhs, Mm* prhs[ ]); 
  MATCOM將M文件里面的函數Exchange2轉化成了Exchange2_v函數,該函數的第1個參數emsg用于傳遞1個消息字符串,可賦值為NULL;第2個參數nlhs是Exchange2函數定義的輸出參數的個數;第3個參數plhs[]是指向輸出參數的指針數組;第4個參數nrhs是Exchange2函數中定義的輸入參數的個數;第5個參數prhs[ ]是指向輸入參數的指針數組。
    在消息響應函數中添加如下代碼:
  Mm a, b, c, d;
  a=zeros(1,3);
  b=ones(1,3);
  b.r(1,2)=100;    /*將矩陣b的第1行第2列元素賦值為100  */ 
  Mm* Input[2]={&a,&b};
  Mm* Output[2];          //不用為其分配空間
  //調用dll函數
  Exchange2_v(NULL, 2, Output, 2,Input);
    //查看第1個輸出參數的結果
  Mm lookOutput1=*Output[0];
  //查看第2個輸出參數的結果
  Mm lookOutput2=*Output[1];
  即實現了調用dll里的Exchange2_v函數。
    MATLAB與C++混合編程的方法有8種之多。但是基于MATCOM的混合編程方法簡便易行,生成的代碼可讀性很好,筆者認為是實現MATLAB與VC混合編程的最優途徑。在實際工程應用當中,經常會調用到很多的MATLAB工具箱函數,而對于MATLAB 5.3版本以后新增的函數或者MATLAB工具箱函數,MATCOM并沒有提供相對應的函數。這時可以采用的解決辦法是:將用到的函數對應的M文件(可從MATLAB安裝目錄中獲得)拷貝到與待轉化的M文件同一個目錄下,MATCOM會自動進行關聯分析并轉化。轉化完成后只需將生成的頭文件和源文件一起放到VC工程中就可以了。筆者在車牌識別系統中采用這種方法有效縮短了系統開發的周期和效率。
參考文獻
[1] MathTools Ltd. MIDEVA, MATCOM & visual MATCOM installation guide (V4.5 release).1999.
[2] 劉維.精通Matlab與C++混合程序設計[M].(第2版). 北京:北京航空航天大學出版社,2008:257-315.
[3] 羅蛟龍,張鵬,張維競.Visual C++下強大的科學運算函數庫—MATCOM之Matrix [J].計算機工程,2000,
26(12):152-154.
[4] MathTools Ltd. Matrix user’s guide(V4.5 release). 1999.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美成年人视频网站欧美| 一本一本a久久| 亚洲国语精品自产拍在线观看| 欧美日韩国产bt| 在线日本高清免费不卡| 国产精品理论片| 亚洲福利精品| 亚洲精品国产精品国自产观看浪潮| 国产精品伊人日日| 91久久国产精品91久久性色| 亚洲婷婷综合久久一本伊一区| 激情六月综合| 久久久久久久精| 国产精品日韩欧美一区二区三区| 亚洲一区二区在线看| 亚洲视频播放| 91久久中文| 欧美精品麻豆| 国产精品福利网站| 在线视频一区观看| 午夜在线成人av| 欧美日韩福利| 黄色日韩精品| 亚洲欧美综合另类中字| 亚洲欧洲日本国产| 国产亚洲精品久久久| 午夜久久电影网| 一区二区三区在线观看国产| 欧美激情精品久久久久久久变态| 在线观看亚洲精品视频| 亚洲美洲欧洲综合国产一区| 久久综合九色| 欧美一区二区私人影院日本| 国产亚洲成精品久久| 亚洲午夜性刺激影院| 亚洲一区二区高清视频| 欧美在线国产| 欧美jizzhd精品欧美巨大免费| 欧美精品系列| 欧美区一区二区三区| 9久re热视频在线精品| 国产精品裸体一区二区三区| 欧美日韩dvd在线观看| 久久久精品午夜少妇| 亚洲成人资源网| 亚洲一区二区三区高清| 亚洲人www| 99一区二区| 亚洲精品婷婷| 亚洲在线观看免费视频| 久久天堂成人| 欧美专区在线| 亚洲国产精品va在线观看黑人| 亚洲国产二区| 欧美日韩三级| 午夜日韩在线| 一区二区久久久久久| 欧美特黄a级高清免费大片a级| 亚洲国产精彩中文乱码av在线播放| 亚洲欧洲综合另类在线| 欧美一区二区三区在线免费观看| 欧美激情视频免费观看| 欧美午夜精品久久久久久孕妇| 欧美亚洲视频在线观看| 一区二区三区四区蜜桃| 亚洲国产精品免费| 欧美激情中文字幕在线| 欧美一区二区三区在线视频| 国产亚洲欧美一区| 国产精品久久看| 一区二区三区免费看| 中文国产一区| 一区二区不卡在线视频 午夜欧美不卡'| 韩国免费一区| 国产嫩草一区二区三区在线观看| 免费中文字幕日韩欧美| 亚洲专区一区| 亚洲激情网站免费观看| 国内精品久久久久久| 一本色道久久综合狠狠躁篇怎么玩| 蜜臀av在线播放一区二区三区| 一区二区精品国产| 亚洲无亚洲人成网站77777| 久久精品盗摄| 免费国产自线拍一欧美视频| 欧美精品少妇一区二区三区| 亚洲免费观看高清在线观看| 欧美视频在线观看| 美女精品网站| 亚洲五月婷婷| 国产精一区二区三区| 国产一区二区视频在线观看| 亚洲日韩欧美视频一区| 久久一区免费| 在线成人h网| 久久精品国产第一区二区三区| 国产亚洲一区二区三区在线播放| 国产欧美精品日韩区二区麻豆天美| 欧美国产日韩视频| 国产精品久久久久三级| 在线综合+亚洲+欧美中文字幕| 亚洲日本成人女熟在线观看| 欧美日韩国产色综合一二三四| 免费一区视频| 在线亚洲伦理| 久久亚洲综合网| 在线观看日韩av| 欧美精品一区二区三区蜜臀| 欧美精品日韩精品| 亚洲日本免费电影| 99精品黄色片免费大全| 国产在线精品二区| 亚洲一区999| 亚洲精品麻豆| 亚洲人成网站精品片在线观看| 国产精品欧美在线| 欧美在线短视频| 国产日韩免费| 久久亚洲欧美| 亚洲人成网站影音先锋播放| 亚洲影院色无极综合| 欧美成人免费va影院高清| 国产精品羞羞答答| 国产日韩精品久久| 国内成+人亚洲| 妖精成人www高清在线观看| 亚洲精品中文字幕在线| 欧美一区二区三区电影在线观看| 99成人免费视频| 国产亚洲成年网址在线观看| 久久大香伊蕉在人线观看热2| 欧美色另类天堂2015| 欧美天堂亚洲电影院在线观看| 国产精品r级在线| 一本色道久久综合狠狠躁篇怎么玩| 国产亚洲欧美一区二区三区| 午夜精品区一区二区三| 欧美另类99xxxxx| 久久精品欧美日韩| 韩国av一区| 亚洲欧美精品中文字幕在线| 国产美女扒开尿口久久久| 欧美精品v国产精品v日韩精品| 国产亚洲欧美aaaa| 久久午夜精品| 亚洲免费综合| 欧美国产精品人人做人人爱| 国产精品福利网站| 国产精品久久久久久久久| 欧美日韩第一页| 国产精品美女久久久久久免费| 国产日韩精品视频一区| 免费观看成人网| 国产精品美女视频网站| 日韩亚洲精品电影| 国产精品国产亚洲精品看不卡15| 亚洲高清在线观看| 美玉足脚交一区二区三区图片| 国产日韩一区二区三区在线| 欧美日韩国产在线看| 久久av资源网站| 国产精品乱码久久久久久| 亚洲高清一二三区| 久久综合网hezyo| 久久精品国产欧美亚洲人人爽| 国内精品美女在线观看| 欧美区日韩区| 欧美女主播在线| 久久精品欧洲| 亚洲女人小视频在线观看| 欧美香蕉视频| 9i看片成人免费高清| 国产性色一区二区| 亚洲男人影院| 亚洲第一黄色网| 亚洲在线观看免费视频| 噜噜噜噜噜久久久久久91| 亚洲国产欧美日韩精品| 一区二区欧美在线观看| 国产精品一区免费观看| 亚洲老司机av| 欧美特黄视频| 日韩视频一区二区三区在线播放免费观看| 91久久精品视频| 一区二区三区国产精品| 亚洲一区二区视频在线| 麻豆精品一区二区综合av| 国产亚洲电影| 欧美日韩一区在线播放| 一区二区三区产品免费精品久久75| 久久香蕉国产线看观看av| 欧美jjzz| 国产一区二区三区免费观看| 国产精品免费看久久久香蕉| 日韩亚洲精品视频| 伊人成综合网伊人222| 欧美午夜片在线免费观看| 免费国产自线拍一欧美视频| 好男人免费精品视频| 亚洲精品日韩综合观看成人91| 亚洲欧洲日韩女同| 亚洲欧美激情视频在线观看一区二区三区| 亚洲欧美激情四射在线日| 另类图片综合电影| 久久成人免费日本黄色| 中日韩美女免费视频网站在线观看| 欧美gay视频激情| 欧美香蕉视频| 欧美日韩一区在线| 国产精品老女人精品视频| 久久国产一二区| 欧美特黄一区| 你懂的一区二区| 久久亚洲影音av资源网| 亚洲日韩欧美一区二区在线| 亚洲精品自在久久| 美乳少妇欧美精品| 亚洲第一福利视频| 欧美午夜激情在线| 欧美在线观看一二区| 久久躁狠狠躁夜夜爽| 国产精品啊啊啊| 亚洲精品久久久久中文字幕欢迎你| 国产亚洲成精品久久| 国产精品入口夜色视频大尺度| 国产精品欧美精品| 亚洲乱码国产乱码精品精| 亚洲精品自在在线观看| 欧美国内亚洲| 狠狠入ady亚洲精品| 欧美日韩国产综合视频在线观看| 国产精品毛片在线看| 国语自产在线不卡| 欧美一区二区三区日韩视频| 亚洲一区综合| 久久这里有精品15一区二区三区| 99热精品在线观看| 国产婷婷色一区二区三区四区| 亚洲精品字幕| 欧美大尺度在线观看| 午夜国产精品视频| 久久国产毛片| 国产综合久久久久久鬼色| 欧美日一区二区三区在线观看国产免| 久久精品国语| 午夜欧美不卡精品aaaaa| 久久不见久久见免费视频1| 国内欧美视频一区二区| 国产一区二区三区久久久久久久久| 裸体丰满少妇做受久久99精品| 亚洲午夜女主播在线直播| 欧美国产成人精品| 亚洲手机成人高清视频| 亚洲精品国产精品乱码不99按摩| 欧美三日本三级三级在线播放| 韩日在线一区| 日韩视频永久免费| 欧美一二三区在线观看| 欧美怡红院视频| 韩国精品一区二区三区| 久久久国产精品亚洲一区| 亚洲一区三区视频在线观看| 国产精品爽爽爽| 欧美日韩国产页| 欧美午夜大胆人体| 久久亚洲精品中文字幕冲田杏梨| 狠狠久久五月精品中文字幕| **性色生活片久久毛片| 国产精品激情| 久久先锋资源| 亚洲国产精品女人久久久| 99在线精品视频| 欧美午夜精彩| 亚洲欧美日韩高清| 欧美成人免费在线观看| 老司机午夜精品视频在线观看| 老牛嫩草一区二区三区日本| 久久亚洲欧美国产精品乐播| 极品日韩久久| 国产精品久久777777毛茸茸| 久久综合久久久久88| 欧美国产丝袜视频| 国产精品99久久久久久有的能看| 欧美精品色一区二区三区| 一区二区三区日韩| 亚洲精品字幕| 欧美日韩一区国产| 在线免费观看视频一区| 亚洲影视中文字幕| 久久蜜臀精品av| 欧美老女人xx| 一区二区三区在线观看国产| 暖暖成人免费视频| 精品白丝av| 亚洲已满18点击进入久久| 久久久久久91香蕉国产| 韩日在线一区| 一本一本大道香蕉久在线精品| 国产精品99久久久久久久vr| 最新成人av网站| 国产精品一区视频| 久久精品国产一区二区三| 欧美本精品男人aⅴ天堂| 欧美在线亚洲一区| 亚洲国产日韩一区| 国产精品国产三级国产aⅴ无密码| 亚洲一区二区三区精品视频| 欧美一级黄色网| 亚洲免费在线观看| 亚洲小说欧美另类社区| 亚洲理伦在线| 精品电影一区| 亚洲人成网站999久久久综合| 最新国产の精品合集bt伙计| 欧美高清自拍一区| 国产欧美日韩视频在线观看| 久久国产精品72免费观看| 国产精品看片你懂得| 欧美激情第一页xxx| 亚洲一区二区动漫| 欧美日韩国产三级| 韩国av一区二区| 一本色道**综合亚洲精品蜜桃冫| 亚洲国产成人午夜在线一区| 国产精品国产三级国产aⅴ无密码| 亚洲开发第一视频在线播放| 久久在线观看视频| 午夜在线电影亚洲一区|