vs和Matlab Rb 混合編程_第1頁
vs和Matlab Rb 混合編程_第2頁
vs和Matlab Rb 混合編程_第3頁
vs和Matlab Rb 混合編程_第4頁
vs和Matlab Rb 混合編程_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 vs2010和Matlab R2012b 混合編程2013-05-24 22:40 10114人閱讀 評論(4) 收藏 舉報(bào) 分類: C+(2) 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。思路:為了實(shí)現(xiàn)matlab與C+混合編程,采用由m文件構(gòu)造動(dòng)態(tài)鏈接庫然后在visual studio中調(diào)用的方法。本人系統(tǒng):Windows 7旗艦版(32位),VS2010旗艦版,Matlab R2012b    只有R2010b或以上版本才識別VS2010編輯器

2、60;1. matlab中dll創(chuàng)建         1.1    m文件編寫          function yt = myfitline( x,y,m,xrange,t )         %xy為坐標(biāo)向量,m為多項(xiàng)式階數(shù),xrange為顯示圖上面的坐標(biāo)范圍,t為要求的坐標(biāo)橫軸位置 

3、;        %   Detailed explanation goes here         p=polyfit(x,y,m);%計(jì)算各階系數(shù)p1xm+p2x(m-1)+.+ pmx+ p(m+1)         yy=polyval(p,xrange);%計(jì)算一個(gè)區(qū)域內(nèi)的函數(shù)值用于畫圖  

4、60;      yt=polyval(p,t);   %  計(jì)算指定x下的函數(shù)對應(yīng)的y值         plot(x,y,'r*',xrange,yy,'b')         end        1.2   設(shè)置編譯器&

5、#160;                    >> mex -setup   選擇VS2010                     >> mbuild -se

6、tup  選擇VS2010                     >> mcc -W cpplib:Myfitline -T link:lib myfitline     (這就創(chuàng)建好了)           

7、60;  其中,mcc是Matlab提供的編譯命令,對于這一點(diǎn),Matlab的幫助說明如下:               -W lib:string link:lib其中-W是控制編譯之后的封裝格式,cpplib,是指編譯成C+的lib,cpplib冒號后面是指編譯的庫的名字,-T表示目標(biāo),       link:lib表示要連接到一個(gè)庫文件的目標(biāo)

8、,目標(biāo)的名字是后面的myfitline,即你寫的m函數(shù)的名字。              運(yùn)行完之后,你的目錄下面,將會(huì)出現(xiàn)以下一些文件:              Myfitline.cpp            &#

9、160; Myfitline.exp              Myfitline.dll              Myfitline.exports              Myfitline.h

10、0;             Myfitline.lib              mccExcludedFiles.log              readme.txt   &

11、#160;          具體每一個(gè)文件的意思,請查幫助,這里只說其中很有用的幾個(gè):              Myfitline.dll是編譯好的動(dòng)態(tài)庫,myfitline這個(gè)函數(shù)封裝在里面,Myfitline.h是對應(yīng)的頭文件,在C里面調(diào)用這個(gè)函數(shù)的時(shí)候,需要include這個(gè)頭文件,      &#

12、160;在這個(gè)頭文件的最后,你可以看到下面的內(nèi)容:              extern LIB_Myfitline_CPP_API void MW_CALL_CONV myfitline(int nargout, mwArray& yt, const mwArray& x,              const mwA

13、rray& y, const mwArray& m, const mwArray& xrange, const mwArray& t);                           這就是myfitline的C函數(shù)的聲明。nargout表示輸出變量的個(gè)數(shù),其他就是對應(yīng)了m函數(shù)的幾個(gè)變量。 

14、             注意,變量的類型是mwArray,這是Matlab提供的一個(gè)特殊的變量類型(在7.0的版本,編譯之后,變量類型是mxArray)。mwArray是一個(gè)類,具體可以查幫助。 2.系統(tǒng)環(huán)境配置               Computer - > Properties&#

15、160;-> Advanced system settings -> Environment Variables -> User Variables -> path, 添加(MATLAB下為MATLAB 2012軟件安裝目錄)              .MATLABexternlibwin32microsoft; 

16、;             .MATLABbinwin32              Computer - > Properties -> Advanced system settings -> Environment Variab

17、les -> System Variables -> path, 添加              .MATLABruntimewin32;              .MATLABbin;      

18、0;       .MATLABexternlibwin32microsoft;              .MATLABbinwin323.vs2010環(huán)境配置             Property Pages -> VC+ D

19、irectories -> Include Directories, 添加(安裝目錄下)            .MATLABexterninclude             Property Pages -> VC+ Directories -> 

20、Library Directories, 添加            .MATLABexternlibwin32microsoft            Property Pages -> C/C+ -> General -> Additional Includ

21、e Directories, 添加            .MATLABexterninclude            Property Pages -> Linker -> General -> Additional Library Di

22、rectories, 添加            .MATLABexternlibwin32microsoft           Property Pages -> Linker -> Input -> Additional Dependencies, 添加&

23、#160;                         libeng.lib                       &#

24、160;  libmat.lib                          libmex.lib                   

25、0;      libmx.lib                          mclmcrrt.lib               

26、           mclmcr.lib                          Myfitline.lib    4.vs2010下完成程序     

27、60;         把剛才生成的*.h *.dll *.lib文件復(fù)制到剛剛新建的工程的文件夾下,并且用添加現(xiàn)有項(xiàng)添加的工程中。(此處的*代表你的m文件名稱)               調(diào)用函數(shù) myfitline的文件前要         &

28、#160;                  #include "mclmcr.h"                           

29、#include "matrix.h"                            #include "mclcppclass.h"            &#

30、160;               #include "Myfitline.h”              具體程序如下:              void CNewFeatureofS

31、tormView:Onposition()                             / TODO: 在此添加命令處理程序代碼                

32、0;if( !MyfitlineInitialize()                                      MessageBox(_T("初始化失敗");   

33、60;                               / 為變量分配內(nèi)存空間,可以查幫助mwArray                &

34、#160; mwArray mwX(5, 1, mxDOUBLE_CLASS); / 5,1表示矩陣的大?。ㄋ衜altab只有一種變量,就是矩陣,                  mwArray mwY(5, 1, mxDOUBLE_CLASS);/為了和Cpp變量接軌,設(shè)置成1*5的矩陣,mxDOUBLE_CLASS表示變量的精度)      

35、0;           mwArray mwM(1, 1, mxDOUBLE_CLASS);                  mwArray mwXR(50,1, mxDOUBLE_CLASS);           

36、;       mwArray mwYT(1,1, mxDOUBLE_CLASS);                  mwArray mwT(1,1, mxDOUBLE_CLASS);               &#

37、160;  int x5=432,435,438,441,443;    /樣本點(diǎn)坐標(biāo)                  int y5=136,138,140,145,147;    /              

38、60;   int xr50,m=3,t=446;           /參數(shù)設(shè)置                  for (int i=400;i<450;i+)          

39、0;                             xri-400=i;                    

40、0;               mwX.SetData(x, 5);      /調(diào)用類里面的SetData函數(shù)給類賦值                  mwY.SetData(y, 5);    

41、;              mwM.SetData(&m, 1);                  mwXR.SetData(xr, 50);            &

42、#160;     mwT.SetData(&t, 1);                  myfitline(1,mwYT,mwX,mwY,mwM,mwXR,mwT);                

43、0; double c = mwYT.Get(1, 1); /調(diào)用類里面的Get函數(shù)獲取取函數(shù)返回值                  CString strNumber;                  strNumber.Format(_T("

44、%lf"),c);                  MessageBox(strNumber, _T("坐標(biāo)");                  / 后面是一些終止調(diào)用的程序    &

45、#160;             MyfitlineTerminate();                  / terminate MCR              

46、;   mclTerminateApplication();             vs2010下調(diào)用matlab2012b調(diào)試方法標(biāo)簽: matlabvs2010配置管理64位error LNK20192013-11-01 16:53 4435人閱讀 評論(2) 收藏 舉報(bào) 分類: matlab(3)  vs2010版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)

47、載。配置環(huán)境:vs2010+matlab2012b+win7 64位說明:以安裝路徑“E:Program FilesMATLABR2012b”為例MATLAB外部支持文件夾:E:Program FilesMATLABR2012bexternmatlab自帶的c例程:E:Program FilesMATLABR2012bexternexampleseng_matengine.h的位置:E:Program FilesMATLABR2012bexterninclude各種lib的位置:E:Program FilesMATLABR2012bexternlibwin64microsoft在matlab幫

48、助中輸入“C language”即可找到有關(guān)MATLAB Engine的一個(gè)頁面。從這個(gè)頁面開始,學(xué)習(xí)各種關(guān)鍵詞,就能夠找到一切你需要的資料。使用MATLAB Engine一般用兩套函數(shù)就可以了。1.engXXXX,關(guān)于Engine本身的操作,包括打開/關(guān)閉,設(shè)置/取得變量,執(zhí)行語句等等。2.mxXXXX,關(guān)于數(shù)據(jù)類型mxArray的操作,與MATLAB交互的左右類型全部為mxArray。搭建過程:1.先在VC6的tools->options->directories里添加相關(guān)目錄include files:E:Program FilesMATLABR2012bexternincl

49、udeE:Program FilesMATLABR2012bexternincludewin64library files:E:Program FilesMATLABR2012bexternlibwin64microsoft2 點(diǎn)擊LInker input 將libmx.lib;libmex.lib;libeng.lib;加入到Additional Dependencies              或者用#pragma comment (lib, "libeng.lib")    &

50、#160;                     #pragma comment (lib, "libmx.lib")                           #pragma comment (lib, "libmex.lib") 語句3 環(huán)境變量加上E:Program FilesMATLABR2012b

51、binwin64 否則編譯成功運(yùn)行時(shí)會(huì)顯示缺少 dll4包含頭文件 engine.h5這就可以去調(diào)用engine里的一些引擎函數(shù)了做好這些后,如果我們環(huán)境一樣,下面的代碼應(yīng)該能夠編通并且正常執(zhí)行,其中包含了常用的一些函數(shù),一般來說使用Engine的時(shí)候也就用這些了。出現(xiàn)問題解決方法:1 編譯出現(xiàn):1>test.obj : error LNK2019: 無法解析的外部符號 _engClose,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _engSetVisible,該符號在函數(shù) _main 中被引用1>test.

52、obj : error LNK2019: 無法解析的外部符號 _mxDestroyArray,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _mxGetData,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _mxGetDimensions_730,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _mxGetNumberOfDimensions_730,該符號在函數(shù) _main 中被引用1

53、>test.obj : error LNK2019: 無法解析的外部符號 _engGetVariable,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _engEvalString,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _engPutVariable,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _mxGetPr,該符號在函數(shù) _main 中被引用1>test.obj

54、 : error LNK2019: 無法解析的外部符號 _mxCreateDoubleMatrix_730,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _engOpen,該符號在函數(shù) _main 中被引用1>D:VSProjectsmatlabtestmatlabtestDebugmatlabtest.exe : fatal error LNK1120: 12 個(gè)無法解析的外部命令這個(gè)問題如果你按照上述配置好的話,這就很有可能出在兼容問題上。因?yàn)?012b只提供64位版本,所有需要將vs工程變?yōu)?4位。點(diǎn)擊win32

55、旁的下拉列表,選擇配置管理器。在活動(dòng)解決方案平臺(tái)這里選擇x64即可。重新編譯一切ok。2 如果vs工程中還包含其他庫是32位的,那么只能裝matlab7 ,他只支持32位。而且matlab6.x版本又不支持vs2010.裝好以后,需要配置兼容性。然后點(diǎn)擊其桌面的快捷方式,修改其兼容性,我的系統(tǒng)是win7,改成了兼容vista,保存修改,點(diǎn)擊成功運(yùn)行。uniquews· 博客園· 首頁· 新隨筆· 聯(lián)系· 訂閱· 管理隨筆- 51  文章- 0  評論- 7 VS2010與Matlab2010b混合編程VS

56、2010與Matlab2010b混合編程      套用今天的簽名“最新的VS+最新的MATLAB+最新的WINDOWS=無盡的煩惱 ”,用了一天的時(shí)間去配置相關(guān)的環(huán)境,確實(shí)很囧。好在現(xiàn)在問題解決了,特發(fā)布過程如下,希望能給有需要的朋友帶來幫助。 注:因?yàn)槌绦蛞彩莿傉{(diào)通,所以有些原因還沒有仔細(xì)分析,如果不對,敬請指教。1.<MATLAB>表示MATLAB按照目錄2. 配置過程中的錯(cuò)誤,請見:附錄3.文中包含"只針對64位WINDOWS"字眼設(shè)置的,在WIN32(X86)環(huán)境無需設(shè)置4.本文配置

57、中可能包含多余的一些配置,不過現(xiàn)在的目的是運(yùn)行成功哈至于精簡部分,待我和大家使用時(shí)慢慢研究。  /*環(huán)境:1.VS20102.MATLAB 2010b3.WINDOW 7 (X64)*/  1.Matlab環(huán)境設(shè)置       要建立獨(dú)立運(yùn)行的C應(yīng)用程序,系統(tǒng)中需要安裝Matlab、Matlab編譯器、C/C+編譯器以及Matlab C/C+數(shù)學(xué)庫函數(shù)和圖形庫函數(shù)。Matlab編譯器使用mbuild命令可以直接將C/C+源代碼編譯為獨(dú)立運(yùn)行程序,在這些源代碼中可以使用Matlab提供的

58、接口來調(diào)用Matlab數(shù)學(xué)庫函數(shù)。       雖然生成的可執(zhí)行程序可以脫離Matlab環(huán)境運(yùn)行,但是它需要Matlab C/C+數(shù)學(xué)庫文件或者圖形庫文件的支持才能運(yùn)行。但如果C/C+源代碼完全是按傳統(tǒng)C/C+源代碼語法規(guī)則編寫,沒有包含Matlab數(shù)學(xué)庫和圖形庫的調(diào)用,則不僅可以獨(dú)立與Matlab環(huán)境,也不需要那兩個(gè)庫函數(shù)的支持。      在 Matlab 的Command Window 下輸入命令       

59、mbuild setup      操作過程如下圖:         然后輸入命令    mex setup    以類似的方法配置編譯器。Matlab 的配置完成。 2.VS環(huán)境設(shè)置(1)設(shè)置Include 和Library 目錄    項(xiàng)目右鍵->屬性->VC+目錄->包含目錄:添加    <MATL

60、AB>R2010bexternincludewin64    <MATLAB>R2010bexterninclude    項(xiàng)目右鍵->屬性->VC+目錄->庫目錄:添加    <MATLAB>R2010bexternlibwin32microsoft    <MATLAB>R2010bexternlibwin64microsoft    截圖(部分):    (2)設(shè)置工程目錄    項(xiàng)目右鍵->屬性->C/C+->常規(guī)->附件包含目錄:添加    <MATLAB>R2010bexternincludewin64    <MATLAB>R2010bexterninclude  

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論