青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-48  評論-259  文章-1  trackbacks-0
 

引言

    目前,Matlab廣泛的應用于自動控制、數學運算、信號分析、圖像處理、財務分析等各行各業。MATLAB也存在著某些缺點:Matlab是一種解釋性語言,其特點是以矩陣為基本數據結構,導致其執行效率相對CC+ +語言要低很多;因為Matlab程序不能脫離其環境運行,故不能直接用于商用軟件的開發。與此相反,VC++由于其豐富得人機界面,高效的執行效率已經成為基于Windows平臺下開發商業軟件的必備工具。然而,VC++對于復雜的數值運算就有點“力不從心”了。所以將VC++Matlab完美的結合,發揮各自的優勢具有現實意義。自Matlab6.5版本開始,新推出來的Combuilder支持把用Matlab編寫的程序做成com組件,供其他語言調用。該方法實現簡單,通用性強,成為VCMatlab混合編程最有效的方法。

1  VCMatlab混合編程的方法

1.1 通過Matlab Engine方式

    Matlab Engine是指一組Matlab提供的接口函數,支持C語言, Matlab Engine采用C/S(客戶機/服務器)模式,Matlab作為后臺服務器,而C程序作為前臺客戶機,通過Windows的動態控件與服務器通信,向Matlab Engine傳遞命令和數據信息,從Matlab Engine接受數據信息。用戶可以在前臺應用程序中調用這些接口函數,實現對Matlab Engine的控制。采用這種方法幾乎能利用Matlab全部功能,但是需要在機器上安裝Matlab軟件,而且執行效率低,因此在實際應用中不采用這種方法,在軟件開發中也不可行,這種模式只適合個人使用或做演示。

1.2 直接調用MatlabC/C++數學函數庫

    Matlab中提供了可以供C/C++語言調用的C/C++數學函數庫,其中包含了大量用C/C++語言重新編寫的Matlab數學函數,這些函數涉及到線形代數、數值分析、傅立葉變換、多項式計算、解微分方程等,并且函數庫中提供了大量各種矩陣操作函數,在VC中可以直接使用這些函數,通過這些函數可以在VC中方便的實現在Matlab中矩陣運算功能。用這種方法可以很靈活的調用Matlab來編寫應用程序,但要求讀者對C/C++語言非常熟悉,并且這種模式不能包括所有的Matlab函數,尤其是無法充分使用Matlab提供的詳盡的繪圖函數。

1.3 Matlab自帶的Matlab Compiler

    Matlab Compiler的作用是將m文件轉化成C/C++代碼(也就是通常所用的mcc命令),這種源代碼需要用C/C++編譯器編譯連接成獨立應用程序,在將m文件轉成獨立應用程序的過程中生成的C/C++文件,原則上是可以被其它的C/C++代碼調用的,編譯器可以通過設置mcc命令的選項,將m文件編譯成動態鏈接庫文件、C/C++文件、可執行文件等一系列文件。到matlab R21.1為止,Matlab Compilerm程序轉換成C/C++代碼功能有很多限制:

    ⑴不能轉換腳本m文件,只能轉換m函數;

    ⑵不能使用matlab對象;

    ⑶不能用input或者eval操作matlab空間變量;

    ⑷不能動態地命名變量,然后用load或者save命令來操作;

    ⑸不能處理具有嵌套調用其他m文件的m文件;

    ⑹不能使用MATLAB內聯函數;

1.4 使用matcom工具

    這是第三方控件,很小(8M),原本屬于mathtool公司,后來被Mathworks公司合并了,使用該工具可以將m腳本文件和m函數轉化成相同功能的C/C++文件,相比其它方法使用matcom具有如下優點:

    ⑴轉換過程簡單(matcom工具自動實現),容易實現;

    ⑵可以方便的生成動態鏈接庫文件(dll)和可執行文件(exe)

    ⑶不僅可以轉換獨立的腳本文件,也可以轉換嵌套腳本文件;

    ⑷設置環境后,可以使用Matlab的工具箱函數;

matcom也有以下不足:

    ⑴對struct等類的支持有缺陷,對class數據類型;

    ⑵部分繪圖語句無法實現或得不到準確圖象,尤其是三維圖象;

    ⑶當涉及到的復雜函數調用時嵌套的文件數量很多。

    因此在不涉及到三維做圖以及m文件不大的情況下推薦使用。

1.5  使用MatlabCombuilde工具

    COMcomponent object module的簡稱,它是一種通用的對象接口,任何語言只要按照這種接口標準,就可以實現調用它。Matlab6.5新推出來的Combuilder就是把用Matlab編寫的程序做成com組件,供其他語言調用。該方法實現簡單,通用性強,而且幾乎可以使用Matlab的任何函數(注意:不支持腳本文件,腳本文件使用時要改為函數文件),因此在程序較大、調用工具箱函數或調用函數較多時推薦使用,這也是Matlab公司推薦的使用方法。

基于COM接口的MatlabVC混合編程實現FFT轉換

2.1 創建Matlab源文件

    Matlab中實現FFT轉換只需要一個函數即可。

    (1) 新建M文件,在M文件中輸入以下兩條語句:

    Function FFT(X,Y) %實現FFT轉換。函數名為FFTx為輸入參數,y為輸出參數

    Y=fft(X);          %fft轉換實現函數

    (2)保存為FFT.m M文件。

2.2  Matlab下創建COM組建

    (1)在matlab command window輸入如下命令:

    >>comtool



 

    (2)出現com編輯界面后,選擇File->New Project建立新工程testfft,并將FFT.m加入到新建工程中。

    (3)點擊Build->COM Object…生成COM組件。

    至此com組件已經由matlab做好,默認的保存位置為:matlab安裝位置\work\component

2.3  VC下調用COM組件

    (1)將testfft_idl.h testfft_idl_i.c文件拷貝到VC建立的工程目錄下。兩文件默認目錄為\work\component\src

    (2)將目錄/extern/include/下的mwcomtypes.h文件拷貝的VC建立的目錄下。

    (3)將上面三個文件加入VC工程:工程->添加工程->Files,選擇剛剛拷到目錄下的testfft_idl.h testfft_idl_i.c文件。

    (4) 為程序添加頭文件testfft_idl.h testfft_idl_i.cmwcomtypes.h

    (5)填寫調用COM組件代碼:

    if(FAILED(CoInitialize(NULL)))    //初始化調用com

    {

          AfxMessageBox("unable to initialize COM");

    }

    Itestfft *st=NULL;

    HRESULT hr=CoCreateInstance(CLSID_testfft,NULL,CLSCTX_ALL,IID_Itestfft,(void **)&st);

    if(SUCCEEDED(hr))

     {

         VARIANT x,y;

         VariantInit(&x);

         VariantInit(&y);

         x.vt=VT_I4;

         x.lVal=4;

    st->fte(x,y);       //x為輸入參數,y為輸出參數

    st->Release();

 }

     else

 {

    AfxMessageBox("unsucceed");

 }   

    至此實現VC下調用COM組件實現FFT轉換。

結論

    實踐表明用COM方法實現VCMatlab混合編程具有實現簡單、執行效率高、幾乎支持所有的matlab函數、易移植等優點。

posted on 2007-06-11 12:59 星夢情緣 閱讀(4264) 評論(8)  編輯 收藏 引用 所屬分類: 關于編程

評論:
# re: 基于COM接口的VC++與MATLAB混合編程 2007-06-11 13:25 | 星夢情緣
有用就頂,嘿嘿,
希望有更好的東西可以互相交流  回復  更多評論
  
# re: 基于COM接口的VC++與MATLAB混合編程 2007-06-11 13:36 | 小艾
好有用的文章哦,看來以后可以關注下MATLAB了,嘎嘎  回復  更多評論
  
# re: 基于COM接口的VC++與MATLAB混合編程 2007-06-12 09:02 | DxZ
貌似現在matlab compiler已經強多了。。還是脫離matlab環境來的爽啊。
R21.1是什么版本。。  回復  更多評論
  
# re: 基于COM接口的VC++與MATLAB混合編程 2007-06-30 17:59 | 雅典娜
請問你做過用matlab調用神經網絡工具箱打包成com在vc中調用的程序嗎?我現在正在作,有些問題無法解決,我將編寫好,能夠運行的m文件(調用神經網絡工具箱的m文件)編譯成com組件之后在vc里面調用總是提示組件中函數調用不成功,不知道是什么原因,如果可能,請給我回復一下,我的郵箱:mahuiyuok@163.com 謝謝。  回復  更多評論
  
# re: 基于COM接口的VC++與MATLAB混合編程 2008-08-20 09:18 | cherry
vc中如何通過com組件調用哪個matlab神經網絡工具箱?對于簡單的畫圖還能實現,但用到神經網絡工具箱就出錯了,什么原因?我的郵箱:282049028@qq.com  回復  更多評論
  
# re: 基于COM接口的VC++與MATLAB混合編程 2008-09-18 11:25 | 蔣方
@雅典娜
我也遇到了同樣的問題,就是當一個函數的參數是一個.m文件名時,做成COM便不能執行這個函數,毛病出在哪里,望高手指教!!!我的QQ:727556719
e-mail:gxjxjtumu@163.com
  回復  更多評論
  
# re: 基于COM接口的VC++與MATLAB混合編程[未登錄] 2008-10-10 17:28 | 1
MatlabX庫為VB,VC,Delphi,c#提供程序包接口,支持數學運算、線性代數、圖形處理和部分神經網絡等功能,用于擴展 MATLAB 的功能和運行速度,可以作為獨立的工具使用,支持生成自己的獨立運行程序,不要求客戶電腦裝有matlab。 (可以另外加功能)

在VB,VC,Delphi,c#中使用該數學工具包可避免重復性勞動,從而減少開發人員實現算法和界面設計的困難,可大大提高開發效率,對于解決工程問題是十分有意義的。MatlabX就是一個小的matlab。

visual basic visual c++ delphi c# 調用 matlab 接口 神經網絡 獨立運行 sim
詳情
http://matlabvbvc.blog.163.com/blog/static/27873611200731943916305/  回復  更多評論
  
# re: 基于COM接口的VC++與MATLAB混合編程 2009-03-30 08:29 | didi
我在vc中用一個對話框的兩個button分別調用兩個用combuild生成的com,總是報錯。我都是用
CoInitialize(NULL);
Idata *pImyclass;
HRESULT hr=CoCreateInstance(CLSID_data,NULL,CLSCTX_ALL,IID_Idata,(void **)&pImyclass);
hr=pImyclass->data();
這樣的代碼。
可是只用一個button調用一個用combuild生成的com就會成功。
我想請教為什么和怎么修改。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区久久| 国产视频久久久久久久| 亚洲一区在线直播| 亚洲一级黄色av| 国产精品99久久久久久久女警| 亚洲电影免费在线| 先锋影音一区二区三区| 亚洲综合99| 久久成人国产| 免费亚洲视频| 亚洲免费观看在线观看| 中日韩高清电影网| 欧美一级片一区| 久久一区亚洲| 欧美日韩国产成人在线观看| 欧美激情视频一区二区三区在线播放| 欧美日韩精品一区| 欧美日韩亚洲一区二区三区| 国产精品video| 在线看片欧美| 亚洲视频视频在线| 久久天天躁狠狠躁夜夜爽蜜月| 欧美精品一区二区三区很污很色的 | 欧美激情影院| 欧美视频一区在线观看| 国产一区二区毛片| 亚洲伦理一区| 欧美伊人久久久久久久久影院| 久久精品视频导航| 日韩午夜在线| 久久这里只有| 国产精品日韩一区二区三区| 国产综合第一页| 一区在线观看视频| 亚洲欧美国产精品桃花| 欧美国产91| 欧美一区二区三区久久精品| 欧美劲爆第一页| 合欧美一区二区三区| 一区二区高清在线| 欧美激情一区二区三区成人| 国产精品99久久不卡二区| 另类激情亚洲| 国产精品视频网| 亚洲国产精品一区二区第四页av| 亚洲图片欧洲图片av| 麻豆精品在线视频| 亚洲精品综合久久中文字幕| 久久夜色精品国产亚洲aⅴ | 欧美成人精品在线观看| 在线亚洲免费视频| 欧美日韩成人精品| 尤物网精品视频| 久久久久久久久蜜桃| 一本久久青青| 欧美日韩视频在线第一区| 在线观看91精品国产麻豆| 亚洲欧美激情视频| 亚洲人成7777| 欧美激情一区二区三区四区| 国产一区91| 久久久久久九九九九| 亚洲欧美视频在线观看视频| 欧美视频亚洲视频| 美女成人午夜| 影音先锋亚洲视频| 麻豆精品精华液| 久久久91精品国产一区二区精品| 国产日韩精品一区二区| 亚洲在线成人| 亚洲欧美综合一区| 国产自产精品| 欧美激情一区二区三级高清视频| 午夜欧美精品久久久久久久| 日韩亚洲欧美一区二区三区| 欧美日本在线一区| 久久蜜桃精品| 欧美中文字幕视频| 国内自拍视频一区二区三区| 久久精品久久99精品久久| 久久国产精品黑丝| 亚洲国产精品一区在线观看不卡| 另类成人小视频在线| 欧美jjzz| 亚洲综合视频在线| 亚洲男人天堂2024| 国产一区二区三区久久久久久久久| 亚洲在线国产日韩欧美| 香蕉精品999视频一区二区| 国产精品一区二区三区四区| 国产精品久久久久aaaa| 西西裸体人体做爰大胆久久久| 亚洲影视中文字幕| 欧美性一区二区| 欧美一区在线视频| 欧美成在线视频| 亚洲性人人天天夜夜摸| 欧美一区不卡| av成人免费观看| 久久国产免费看| 妖精视频成人观看www| 午夜综合激情| 一区二区三区日韩| 久久激情五月激情| 亚洲午夜免费视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美激情亚洲精品| 亚洲免费在线| 免费亚洲电影在线| 欧美一级专区| 欧美激情va永久在线播放| 久久精品视频免费播放| 欧美成人首页| 久久精品国产99精品国产亚洲性色| 老司机67194精品线观看| 日韩视频在线一区| 久久亚洲精品一区| 亚洲一区二区三区四区五区午夜| 午夜精品久久久久久99热软件| 永久久久久久| 亚洲综合第一| 欧美黄色免费| 在线观看91精品国产麻豆| 一卡二卡3卡四卡高清精品视频| 亚洲国产精品久久久久婷婷884| 亚洲深夜福利| 亚洲精品欧美精品| 久久综合国产精品台湾中文娱乐网| 亚洲午夜高清视频| 久久激情视频免费观看| 欧美影院在线| 欧美视频观看一区| 一本色道久久综合精品竹菊 | 在线午夜精品| 理论片一区二区在线| 亚洲成色777777在线观看影院| 91久久久在线| 亚洲黄一区二区三区| 久久久天天操| 蜜臀av国产精品久久久久| 一区二区在线免费观看| 久久精品国产久精国产爱| 久久综合电影| 在线观看视频一区| 免费精品视频| 亚洲激情在线观看| 一区二区三区日韩精品| 国产精品扒开腿爽爽爽视频| 中国成人黄色视屏| 欧美亚洲尤物久久| 国产一级一区二区| 久久免费99精品久久久久久| 欧美黄色大片网站| 99在线热播精品免费| 欧美午夜精品一区二区三区| 亚洲精品美女在线观看播放| 一区二区三区产品免费精品久久75| 欧美日韩精品综合| 亚洲一区在线观看视频| 欧美一级在线视频| 国产一区亚洲一区| 久久久亚洲人| 欧美激情久久久久| 亚洲久久视频| 国产精品久久久久久久久久尿| 亚洲午夜激情| 欧美一区二区黄| 一区精品在线| 欧美日韩日日夜夜| 羞羞色国产精品| 麻豆精品传媒视频| 宅男噜噜噜66一区二区66| 国产精品久久久久av免费| 久久aⅴ国产紧身牛仔裤| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲视频www| 国产女人水真多18毛片18精品视频| 久久成人亚洲| 日韩视频免费在线观看| 久久99在线观看| av成人免费观看| 国产一区欧美| 欧美日韩人人澡狠狠躁视频| 性色一区二区| 夜夜夜久久久| 欧美91视频| 亚洲欧美日韩国产一区二区| 揄拍成人国产精品视频| 欧美日韩高清在线| 久久麻豆一区二区| 亚洲专区欧美专区| 亚洲国产精品成人| 午夜精品久久久久久久99黑人| 在线精品视频免费观看| 欧美日韩综合精品| 欧美大片在线看| 久久午夜激情| 久久久一二三| 欧美在线视频一区二区| 亚洲一区二区三|