<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 195, comments - 34, trackbacks - 0, articles - 1

    matlab的混合編程

    Posted on 2007-06-27 22:53 小強(qiáng)摩羯座 閱讀(1099) 評論(1)  編輯  收藏 所屬分類: matalb相關(guān)
     
    從一個簡單的例子說起
    2006-12-25 17:21:23
    馬上要考試?yán)玻疫€要寫報告做實(shí)驗(yàn),可就是打不起精神來準(zhǔn)備。突然想起來寫寫blog,這次想寫的是關(guān)于matlab混合編程的東西,以便日后用得著的時候可以方便的查看。
     
    關(guān)于為什么要進(jìn)行matlab的混合編程的原因,現(xiàn)在不想去仔細(xì)地調(diào)查了,哪天有興致了再寫吧。matlab的混合編程范圍也很廣,包括與C,fortran,Basic等各種高級語言的混合編程,我呢,只對C還稍稍有點(diǎn)認(rèn)識,就寫C的。
     
    matlab與C的混合編程包括在C中調(diào)用matlab和在matlab中調(diào)用C。先寫在C中調(diào)用matlab吧。在C中調(diào)用matlab可以使用matlab引擎,也利用matlab編譯器。嗯,先寫利用matlab編譯器的。
     
    關(guān)于這個編譯器的介紹,等考完P(guān)LD了,再去仔細(xì)地調(diào)研一下。這篇呢就從一個簡單的例子來講述一下怎么利用matlab的編譯器來進(jìn)行混合編程。
     
    首先,啟動matlab,編寫一個簡單的函數(shù)M文件,myplot.m:
    function myplot()
     
    n = 0:0.01:1;
    y = sin(2*pi*n);
     
    plot(n,y)
     
    NOTE:就目前來說,matlab還只支持函數(shù)M文件的編譯,而不支持腳本M文件,所以一定要寫成函數(shù)M文件。
     
    寫完M文件之后,必須對文件進(jìn)行編譯。在編譯之前,必須對編譯器進(jìn)行配置(這個步驟只需進(jìn)行一次,下次再用時就不用再進(jìn)行配置了)。配置使用的命令是mbuild -setup。然后按著提示選擇y/n和123就好了。
    配置完成之后,就可以進(jìn)行編譯了。編譯使用的命令是mcc。mcc函數(shù)可以帶多種參數(shù),關(guān)于各個參數(shù)的含義以后再說吧。在這里使用:
    mcc -W cpplib:libmyplot -T link:lib myplot.m
     
    Note:這里libmyplot是生成的lib文件的文件名,myplot.m是待編譯的文件。使用這個命令將會生成一序列不同格式的文件,在后面將會利用到。這個過程比較慢,要耐心等待,別以為是程序有問題然后就給關(guān)了,呵呵。
     
    這些是用matlab來實(shí)現(xiàn)的步驟,下面就要開始用c來調(diào)用了。
    先要對vc的預(yù)編譯路徑進(jìn)行設(shè)置。我用的是VC++6.0,設(shè)置的方法是:
    在tools\options\directions下的show directions for下的組合框選include files項(xiàng),添加"%matlab\extern\include",再選擇library files項(xiàng),添加"%matlab\EXTERN\LIB\WIN32\MICROSOFT"。這里%matlab是matlab的安裝路徑,library files項(xiàng)要根據(jù)系統(tǒng)平臺及c語言的開發(fā)環(huán)境來選擇。這個設(shè)置跟前面matlab編譯器的設(shè)置一樣,只需要設(shè)一次就可以了,建立其它的工程時不用現(xiàn)進(jìn)行設(shè)置。
     
    然后可以開始編程了。這里選用MFC編程。先建立一個基于對話框的工程,接受所有黑夜默認(rèn)的設(shè)置。完成后,將前面編譯生成的.ctf,.dll和.lib文件復(fù)制到當(dāng)前工程路徑下。
     
    對生成的對話框做一些改動,去掉自動生成的“確定”及取消“按鈕”及文本(如果你想留著也沒關(guān)系啦),添加"Plot"及"Close"按鈕,并添加其響應(yīng)函數(shù)(雙擊按鈕就會生成的)。
     
    在myplotDlg.cpp文件里添加:
    #include myplot.h
     
    在OnInitDialog函數(shù)里添加如下:
    // Initialize the MCR
     if (!mclInitializeApplication(NULL,0))
     {
      AfxMessageBox(_T("Could not intialize the application."));
      return TRUE;
     }
     // Initialize the matlab library
     libmyplotInitialize();
     
    在Plot按鈕的響應(yīng)函數(shù)中,添加:
    myplot();
     
    在Close按鈕的響應(yīng)函數(shù)中,添加:
    // Terminate the library
     libmyplotTerminate();
     
     // Terminate the MCR
     mclTerminateApplication();
     
     OnClose();
     
    程序的編寫到這里就OK啦。然后要設(shè)置連接選項(xiàng)了。
    Project\settings\category選擇Input,在Object/Library modules添加libmyplot.lib mclmcrrt.lib,對Win32 Release和Win32 Debug都進(jìn)行相同的設(shè)置。
     
    這樣的Over了,編譯,鏈接,運(yùn)行,就可以看到結(jié)果了。不過估計(jì)是因?yàn)橐獑覯CR吧,程序的啟動會很慢,耐心等待哦。
     
    最后說一下關(guān)于程序的發(fā)布問題。之所以進(jìn)行混合編程,一個很重要的原因就是想讓一些matlab函數(shù)可以脫離matlab平臺運(yùn)行,為了達(dá)到這一目的,在發(fā)布程序時,除了發(fā)布C生成的可執(zhí)行文件及matlab編譯生成的.ctf,.dll和.lib文件外,還應(yīng)該同時發(fā)布一個MCRInstaller以便沒有matlab平臺的用戶使用。MCRInstaller的生成方法很簡單,使用下面的函數(shù)即可:
    zipfile = buildmcr(dirname)
    該函數(shù)將生成MCRInstaller.zip文件,并將該文件保存到dirname指定的路徑下,zipfile返回的是完整的路徑名。
     
    這樣就可以發(fā)布程序了。沒有matlab平臺的用戶在使用時,應(yīng)該先將MCRInstaller.zip解壓到本地的某一路徑下,并將其中的可執(zhí)行文件所在的路徑(應(yīng)該是在bin文件夾底下)添加到系統(tǒng)環(huán)境變量中。
    Note:添加系統(tǒng)環(huán)境變量的方法
    在我的電腦上右鍵,選擇屬性,再選擇高級子菜單,點(diǎn)擊環(huán)境變量按鈕,并點(diǎn)擊彈出對話框中系統(tǒng)變量對應(yīng)的新建按鈕,變量名可以自定義,變量值就是前面得到的路徑。
     
    這樣就徹底地結(jié)束了,不過我沒有在沒有matlab平臺的電腦上測試過,哪位測試過的告訴我一下結(jié)果。


    Feedback

    # re: matlab的混合編程  回復(fù)  更多評論   

    2008-12-19 10:04 by ccx
    你好!你做過獨(dú)立發(fā)布嗎?好幾天了搞不定,望指點(diǎn)一下哦!
    主站蜘蛛池模板: 免费国产成人高清在线观看网站 | 久久亚洲一区二区| 亚洲午夜精品在线| 一区免费在线观看| 欧洲乱码伦视频免费| 亚洲免费观看在线视频| 久久国产色AV免费看| 亚洲性久久久影院| 亚洲国产AV一区二区三区四区 | 亚洲AV无码久久精品狠狠爱浪潮 | 最近免费中文字幕中文高清| 国产va精品免费观看| 亚洲αv在线精品糸列| 久久精品成人免费观看| 久久久久亚洲AV成人网人人网站 | 亚洲欧洲国产综合| 国产JIZZ中国JIZZ免费看| 成人免费视频小说| 亚洲性色高清完整版在线观看| 欧洲一级毛片免费| 亚洲日韩精品射精日| 免费无码婬片aaa直播表情| 最近免费中文字幕大全| 国产亚洲精品第一综合| 最近最好的中文字幕2019免费| 亚洲精品欧美综合四区| 亚洲福利中文字幕在线网址| 亚洲av日韩综合一区久热| 无码一区二区三区免费视频| 亚洲成年人电影在线观看| 好吊妞视频免费视频| 亚洲天堂2017无码中文| 国内精品乱码卡1卡2卡3免费| 亚洲欧美日韩综合俺去了| 无码国产精品一区二区免费I6| jizzjizz亚洲日本少妇| 国产美女做a免费视频软件| 亚洲熟伦熟女专区hd高清| 处破痛哭A√18成年片免费| 成人福利在线观看免费视频| 精品亚洲国产成AV人片传媒|