日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

vs2010和Matlab R2012b 混合編程

 LSS133LSS 2014-06-10

思路:為了實(shí)現(xiàn)matlab與C++混合編程,采用由m文件構(gòu)造動(dòng)態(tài)鏈接庫(kù)然后在visual studio中調(diào)用的方法。

本人系統(tǒng):Windows 7旗艦版(32位),VS2010旗艦版,Matlab R2012b    只有R2010b或以上版本才識(shí)別VS2010編輯器

 

1. matlab中dll創(chuàng)建

         1.1    m文件編寫(xiě)

          function [ yt ] = myfitline( x,y,m,xrange,t )
         %xy為坐標(biāo)向量,m為多項(xiàng)式階數(shù),xrange為顯示圖上面的坐標(biāo)范圍,t為要求的坐標(biāo)橫軸位置
         %   Detailed explanation goes here
         p=polyfit(x,y,m);%計(jì)算各階系數(shù)p1x^m+p2x^(m-1)+....+ pmx+ p(m+1)
         yy=polyval(p,xrange);%計(jì)算一個(gè)區(qū)域內(nèi)的函數(shù)值用于畫(huà)圖
         yt=polyval(p,t);   %  計(jì)算指定x下的函數(shù)對(duì)應(yīng)的y值
         plot(x,y,'r*',xrange,yy,'b')
         end

        1.2   設(shè)置編譯器

                     >> mex -setup   選擇VS2010

                     >> mbuild -setup  選擇VS2010

                     >> mcc -W cpplib:Myfitline -T link:lib myfitline     (這就創(chuàng)建好了)

              其中,mccMatlab提供的編譯命令,對(duì)于這一點(diǎn),Matlab的幫助說(shuō)明如下:
               -W lib:string link:lib其中-W是控制編譯之后的封裝格式,cpplib,是指編譯成C++lib,cpplib冒號(hào)后面是指編譯的庫(kù)的名字,-T表示目標(biāo),

       link:lib表示要連接到一個(gè)庫(kù)文件的目標(biāo),目標(biāo)的名字是后面的myfitline,即你寫(xiě)的m函數(shù)的名字。
              運(yùn)行完之后,你的目錄下面,將會(huì)出現(xiàn)以下一些文件:
              Myfitline.cpp
              Myfitline.exp
              Myfitline.dll
              Myfitline.exports
              Myfitline.h
              Myfitline.lib
              mccExcludedFiles.log
              readme.txt
              具體每一個(gè)文件的意思,請(qǐng)查幫助,這里只說(shuō)其中很有用的幾個(gè):
              Myfitline.dll是編譯好的動(dòng)態(tài)庫(kù),myfitline這個(gè)函數(shù)封裝在里面,Myfitline.h是對(duì)應(yīng)的頭文件,在C里面調(diào)用這個(gè)函數(shù)的時(shí)候,需要include這個(gè)頭文件,

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

              這就是myfitlineC函數(shù)的聲明。nargout表示輸出變量的個(gè)數(shù),其他就是對(duì)應(yīng)了m函數(shù)的幾個(gè)變量。
              注意,變量的類型是mwArray,這是Matlab提供的一個(gè)特殊的變量類型(在7.0的版本,編譯之后,變量類型是mxArray)。mwArray是一個(gè)類,具體可以查幫助。

 

2.系統(tǒng)環(huán)境配置

 

              Computer Properties -> Advanced system settings -> Environment Variables -> User Variables -> path, 添加(MATLAB下為MATLAB 2012軟件安裝目錄)

              ...\MATLAB\extern\lib\win32\microsoft;

              ...\MATLAB\bin\win32

              Computer Properties -> Advanced system settings -> Environment Variables -> System Variables -> path, 添加

              ...\MATLAB\runtime\win32;

              ...\MATLAB\bin;

              ...\MATLAB\extern\lib\win32\microsoft;

              ...\MATLAB\bin\win32


3.vs2010環(huán)境配置

 

            ①Property Pages -> VC++ Directories -> Include Directories, 添加(安裝目錄下)

            ...\MATLAB\extern\include\ 

            ②Property Pages -> VC++ Directories -> Library Directories, 添加

            ...\MATLAB\extern\lib\win32\microsoft

            ③Property Pages -> C/C++ -> General -> Additional Include Directories, 添加

            ...\MATLAB\extern\include\

            ④Property Pages -> Linker -> General -> Additional Library Directories, 添加

            ...\MATLAB\extern\lib\win32\microsoft

           ⑤Property Pages -> Linker -> Input -> Additional Dependencies, 添加

                          libeng.lib

                          libmat.lib

                          libmex.lib

                          libmx.lib

                          mclmcrrt.lib

                          mclmcr.lib

                          Myfitline.lib

    4.vs2010下完成程序

               把剛才生成的*.h *.dll *.lib文件復(fù)制到剛剛新建的工程的文件夾下,并且用添加—現(xiàn)有項(xiàng)添加的工程中。(此處的*代表你的m文件名稱

               調(diào)用函數(shù) myfitline的文件前要

                            #include "mclmcr.h"

                            #include "matrix.h"

                            #include "mclcppclass.h"

                            #include "Myfitline.h

              具體程序如下:

              void CNewFeatureofStormView::Onposition()
            {
                 // TODO: 在此添加命令處理程序代碼
                 if( !MyfitlineInitialize())
                 {
                     MessageBox(_T("初始化失敗"));
                  }
                 // 為變量分配內(nèi)存空間,可以查幫助mwArray
                  mwArray mwX(5, 1, mxDOUBLE_CLASS); // 5,1表示矩陣的大小(所有maltab只有一種變量,就是矩陣,
                  mwArray mwY(5, 1, mxDOUBLE_CLASS);//為了和Cpp變量接軌,設(shè)置成1*5的矩陣,mxDOUBLE_CLASS表示變量的精度)
                  mwArray mwM(1, 1, mxDOUBLE_CLASS);
                  mwArray mwXR(50,1, mxDOUBLE_CLASS);
                  mwArray mwYT(1,1, mxDOUBLE_CLASS);
                  mwArray mwT(1,1, mxDOUBLE_CLASS);
                  int x[5]={432,435,438,441,443};    //樣本點(diǎn)坐標(biāo)
                  int y[5]={136,138,140,145,147};    //
                  int xr[50],m=3,t=446;           //參數(shù)設(shè)置
                  for (int i=400;i<450;i++)
                  {
                      xr[i-400]=i;
                  }
                  mwX.SetData(x, 5);      //調(diào)用類里面的SetData函數(shù)給類賦值
                  mwY.SetData(y, 5);
                  mwM.SetData(&m, 1);
                  mwXR.SetData(xr, 50);
                  mwT.SetData(&t, 1);
                  myfitline(1,mwYT,mwX,mwY,mwM,mwXR,mwT);
                  double c = mwYT.Get(1, 1); //調(diào)用類里面的Get函數(shù)獲取取函數(shù)返回值
                  CString strNumber;
                  strNumber.Format(_T("%lf"),c);
                  MessageBox(strNumber, _T("坐標(biāo)"));
                  // 后面是一些終止調(diào)用的程序
                  MyfitlineTerminate();
                  // terminate MCR
                 mclTerminateApplication();
            }

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多