• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        Matlab與VC集成

        Matlab與VC集成

        更新時間:2022-05-06 文章作者:未知 信息來源:網絡 閱讀次數:

        ◆ 上海大學通信與信息工程學院 楊高波

        Matlab是一個具有強大的矩陣運算、數據處理和圖形顯示功能的軟件,其輸出結果可視化,編程效率極高,極少的代碼即可實現復雜的運行,然而其邊解釋邊執行,運算效率較低,實現相同功能的代碼跟其他編程平臺相比運行時間相對較長,且不適合作為通用的編程平臺。因此,許多Matlab的應用程序需要使用諸如VC之類的通用編程平臺,實現Matlab與VC的混合編程,這樣有助于發揮Matlab和VC的各自優勢。

        集成的幾種實現方法

        為了實現混合編程,Matlab 5.0以后版本自帶了C語言編譯器(Compiler), 可以將M文件轉換為C-MEX或C/C++程序。根據Matlab是否運行,一般將Matlab與VC混合編程分為兩大類:Matlab在后臺運行和可以脫離Matlab環境運行。

        1.Matlab引擎(Engine)采用客戶機/服務器(Client/Server)的計算方式,通過Windows的ActivcX通道和Matlab接口。在具體的應用中,VC的程序作為前端客戶機,通過調用Matlab Engine在后臺與Matlab服務器建立連接,實現動態通信。這種方法實現較為簡單,不要求連接整個Matlab,只需要嵌入必要的Matlab Engine庫,可大大地節省系統資源,但這種Matlab在后臺運行,運行效率低下。

        2.Mideva是Mathtools公司推出的一種Matlab集成編譯開發平臺,提供對Matlab程序文件(M文件)的解釋執行和開發環境支持。經過簡單設置后Mideva可以將M源文件轉換為C/C++,然后添加到MSVC、C++ Builder的工程中。

        3. 另一種方法是先利用Mideva直接生成EXE文件(方法是啟動Mideva,在菜單“File->Compile to exe”中, 選出需要轉換的M文件),然后在VC中通過Shell調用,常見的外部函數有shellexec()或winexec()。這種方法簡單方便,但運行時出現一個控制臺窗口,而且由于VC和Matlab之間不能交互,通用性差,僅適用于VC中調用Matlab實現圖形顯示的場合。

        4. 最新也是最方便的方法是通過Matlab 6.0 Add-in實現Matlab與VC的混合編程。

        以上方法1需要Matlab在后臺運行,方法2、3、4可以脫離Matlab環境運行。

        Matlab Add-in

        Matlab 6.0以后版本對其Compiler作了較大的改進,其支持更多的數據類型,更強的優化功能,更為重要的是其Matlab Add-in提供了一個Matlab和VC直接集成的途徑。它具有一些新的特征:快速集成M文件到C++工程中,創建獨立的 C/C++應用程序或C MEX DLL;通過M文件創建共享庫或MEX文件;內含Visual Matrix Viewer,調試過程中可以查看矩陣變量的值; 直接修改M源文件而不是修改生成的C/C++文件;方便快捷地打包應用程序等。

        Matlab Add-in的安裝:

        1. 啟動Matlab,運行“mex-setup”,按照菜單提示選取MSVC。它將配置MEX使用MSVC為默認的編譯器(創建C-MEX文件必需),并安裝Matlab Add-in所需文件到MSVC目錄。

        2. 在Matlab環境下運行“mbuild-setup”, 按提示選取MSVC。它將配置使用MSVC為默認的編譯器(創建獨立應用程序必需),并安裝Matlab Add-in所需的Matlab Compiler和C/C++數學庫文件到MSVC目錄。

        3. 在Matlab環境下運行“cd(prefdir)”和“mccsavepath”。它將保存當前Matlab路徑到mccpath文件中,這是因為Matlab Add-in脫離Matlab運行,否則它無從知道Matlab路徑。

        4. 在MSVC環境中配置Matlab Add-in,方法是:從菜單“Tools -> Customize”選擇“Add-ins and Macro Files”選項卡,選中“Matlab Add-in”, 點擊“Close”。MSVC工具欄出現Matlab Add-in圖標,以后每次啟動VC,自動加載Matlab Add-in。

        5. 配置Windows系統。在Windows 95/98系統下,找到config.sys, 添加一行:shell= c:\ command.com /e:32768 /p(Windows ME有所不同,需設置Conagent.exe的屬性Memory選項卡的Initial Environment值為4096)。從表面看,VC的環境設置也是步驟較多,但只需設置一次。

        程序示例

        下面以創建一個Standalone程序為例具體說明。啟動MSVC,打開“File->New”菜單,選擇Project,選擇“Matlab Project Wizard”, Project Name命名為Mytest, 點擊Next,你可以選擇所生成的應用程序的類型:Windows Console EXE、C-MEX DLL、M-MEX DLL、Shared M-DLL; C程序還是C++程序;選取Debug、Release模式;選擇是否生成Main函數;是否需要支持圖形。這里選擇生成C++程序,其余采取默認設置,點擊“Finish”,出現對話框要求選擇添加到工程中的M源文件,選擇文件testplot.m后,這時你可以看到MSVC調用MCC生成一個混合M文件和C的工程。在“File View”選項卡中可以看到添加的M文件和自動生成的C++文件。

        這時大功告成,即可按F7編譯后按F5運行了,運行結果如下圖所示。



        程序運行結果

        這里用到的testplot.m內容如下(先在Matlab里編輯好):

        function mytest()

        t=0: 0.05*pi: 2*pi;

        y=sin(t);

        plot(t,y,‘b*’);

        可以通過雙擊Matlab M-files文件夾下testplot.m打開觀察。生成的testplot.cpp代碼如下(略有刪節):

        // MATLAB Compiler: 2.1 Date: Sat Nov 03 16:37:08 2001

        #include “testplot.hpp”

        #include “libmatlbm.hpp”

        static double _array0_[41] = { 0.0,.157,....};

        //自動生成的數組

        void InitializeModule_testplot() {

        }

        void TerminateModule_testplot() {

        }

        static void Mtestplot();

        _mexLocalFunctionTable _local_function_

        table_testplot = { 0, (mexFunctionTableEntry *)NULL };

        void mlxTestplot(int nlhs, mxArray * plhs[], int nrhs, mxArray * prhs[]) {

        MW_BEGIN_MLX();

        {

        if (nlhs > 0) {

        error(mwArray(“Run-time Error: File: testplot Line: 1 Column: 1 The function \‘testplot\’was called with more than the declared number of outputs (0). ”));

        }

        if (nrhs > 0) {

        error(mwArray(“Run-time Error: File: testplot Line: 1 Column: 1 The function \‘testplot\’ was called with more than the declared number of inputs (0).”));

        }

        Mtestplot();

        }

        MW_END_MLX();

        }

        #line 1 “D:\\ygbtest\\testplot.m”

        static void Mtestplot() {

        #line 1 “D:\\ygbtest\\testplot.m”

        mclMlineEnterFunction(“D:\\ygbtest\\testplot

        .m”, “testplot”)

        #line 1 “D:\\ygbtest\\testplot.m”

        mwLocalFunctionTable save_local_

        function_table_(&_local_function_table_testplot);

        #line 1 “D:\\ygbtest\\testplot.m”

        mwArray ans(mclGetUninitializedArray());

        #line 1 “D:\\ygbtest\\testplot.m”

        mwArray y(mclGetUninitializedArray());

        #line 1 “D:\\ygbtest\\testplot.m”

        mwArray t(mclGetUninitializedArray());

        // t=0: 0.05*pi: 2*pi;

        //

        #line 2 “D:\\ygbtest\\testplot.m”

        mclMline(2);

        #line 2 “D:\\ygbtest\\testplot.m”

        t = mwArray(1, 41, _array0_, (double *)NULL);

        //

        // y=sin(t);

        //

        #line 3 “D:\\ygbtest\\testplot.m”

        mclMline(3);

        #line 3 “D:\\ygbtest\\testplot.m”

        y = sin(mwVv(t,“t”));

        //

        // plot(t,y,‘b*’);

        //

        #line 4 “D:\\ygbtest\\testplot.m”

        mclMline(4);

        #line 4 “D:\\ygbtest\\testplot.m”

        ans.EqAns(Nplot(0, mwVarargin(mwVv(t, “t”), mwVv(y, “y”), “b*”)));

        #line 4 “D:\\ygbtest\\testplot.m”

        mclMlineExitFunction();

        #line 4 “D:\\ygbtest\\testplot.m”

        }

        自動生成的testplot_mainhg.cpp代碼如下:

        #include “matlab.hpp”

        //加入Matlab頭文件

        #include “libsglinit.hpp”

        #include “testplot.hpp”

        //加入應用程序頭文件

        static mexFunctionTableEntry function_table[1] = { { “testplot”, mlxTestplot, 0, 0, &_local_function_table_testplot } };

        static _mexcppInitTermTableEntry init_term_table[1] = { { InitializeModule_testplot, TerminateModule_testplot } };

        static _mexcpp_information _main_info = { 1, 1, function_table, 0, NULL, 0, NULL, 1, init_term_table };

        可以看到沒有添加一句C/C++代碼,即生成了一個Matlab的Standalone應用程序(是不是太容易啦)。需要注意兩點: 一是添加到MSVC工程的文件應當為一個函數文件,而不能是一個Script文件,否則會出現錯誤提示; 二是最好不要修改生成的C/C++代碼,如果需要改動,可以通過在MSVC工作區中直接修改M文件(無須在Matlab環境中),重新編譯即可。你可以通過在M文件中設置斷點,在運行中通過Matrix Viewer觀察Matlab變量的值。

        目前通過Add-in實現Matlab與VC的混合編程也有一定的不足:如目前并不支持所有的Matlab的函數;生成的程序代碼有些繁雜等。估計Matlab 6.0以后的版本在這方面肯定有所改進的。

        結 論

        Matlab Add-in提供了一種實現Matlab和VC混合編程的直接集成的途徑,通過它可以很方便地生成Matlab和VC的混合程序。在圖像處理等需要大量計算的工程應用場合有廣泛的應用價值。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 免费av一区二区三区| 亚洲欧洲校园自拍都市| 亚洲av无码一区二区三区在线播放| 久久精品免费一区二区| 亚洲精品人成电影网| 成人免费大片免费观看网站| 亚洲码一区二区三区| 2021国产精品成人免费视频| 亚洲狠狠成人综合网| 成熟女人牲交片免费观看视频| youjizz亚洲| 国产精品麻豆免费版| 国产精品亚洲综合| 亚洲免费一区二区| 中文字幕无码免费久久| 一区二区三区亚洲| 国产曰批免费视频播放免费s| 456亚洲人成在线播放网站| 高清国语自产拍免费视频国产 | 亚洲欧美国产国产综合一区| 韩国免费三片在线视频| 草久免费在线观看网站| 久久精品亚洲日本佐佐木明希| 6080午夜一级毛片免费看| 国内精品久久久久影院亚洲| 亚洲情侣偷拍精品| 久久aa毛片免费播放嗯啊| 亚洲午夜在线播放| 国产精品亚洲高清一区二区| 9420免费高清在线视频| 亚洲人片在线观看天堂无码| 久久久亚洲精品蜜桃臀| 免费看片在线观看| 深夜免费在线视频| 亚洲伊人久久大香线焦| 亚洲国产一区视频| 国产精品久久永久免费| 免费看内射乌克兰女| 内射少妇36P亚洲区| 亚洲av无码天堂一区二区三区| 久久99精品免费视频|