MATLAB程式设计入门篇MATLAB编译器.ppt

上传人:小飞机 文档编号:5439229 上传时间:2023-07-07 格式:PPT 页数:24 大小:200.99KB
返回 下载 相关 举报
MATLAB程式设计入门篇MATLAB编译器.ppt_第1页
第1页 / 共24页
MATLAB程式设计入门篇MATLAB编译器.ppt_第2页
第2页 / 共24页
MATLAB程式设计入门篇MATLAB编译器.ppt_第3页
第3页 / 共24页
MATLAB程式设计入门篇MATLAB编译器.ppt_第4页
第4页 / 共24页
MATLAB程式设计入门篇MATLAB编译器.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《MATLAB程式设计入门篇MATLAB编译器.ppt》由会员分享,可在线阅读,更多相关《MATLAB程式设计入门篇MATLAB编译器.ppt(24页珍藏版)》请在三一办公上搜索。

1、MATLAB 程式設計入門篇 MATLAB 編譯器,張智星http:/www.cs.nthu.edu.tw/jang清大資工系 多媒體檢索實驗室,MATLAB編譯器具有下列功能:產生獨立應用程式(Stand-alone Applications)應用程式能夠具有MATLAB的完整功能可以在沒有安裝 MATLAB的電腦上執行產生C或C+的程式庫:含動態程式庫(Dynamically Linked Libraries,簡稱DLL,用於微軟視窗系統)或共享程式庫(Shared Libraries,用於UNIX/LINUX系統)可用於任何外部應用程式可以在沒有安裝 MATLAB的電腦上執行,14-1

2、MATLAB編譯器簡介,軟體元件:例如 Java 類別庫(Java Classes)、Excel 增益程式(Excel Add-ins)、COM 及.NET 物件等,這些軟體元件的產生需要使用 MATLAB Builder,14-1 MATLAB編譯器簡介,進入範例說明前,必須先設定電腦上的C編譯器,以便用於MATLAB編譯器,方法如下述在MATLAB命令視窗下輸入mbuild-setup,系統回應如下:,14-1 MATLAB編譯器簡介,Please choose your compiler for building standalone MATLAB applications:Would

3、you like mbuild to locate installed compilers y/n?,輸入y之後,按下 Enter,系統回應如下:這些C編譯器是MATLAB在你的電腦自動偵測出來的結果(所以在不同的電腦會得到不同的結果),14-1 MATLAB編譯器簡介,Select a compiler:1 Lcc C version 2.4.1 in C:PROGRAM FILESMATLABR2006Asyslcc 2 Microsoft Visual C/C+version 8.0 in C:Program FilesMicrosoft Visual Studio 8 3 Micros

4、oft Visual C/C+version 6.0 in C:PROGRA1MIAF9D10 NoneCompiler:,提示,若在上述過程中,出現錯誤訊息,你可以先進行mex-setup,再進行mbuild-setup,可能就可以解決你的問題。,若要MATLAB編譯器將一個MATLAB函式編譯成獨立應用程式,所使用的指令是 mcc,格式如下mcc m userFunc.m先撰寫一個 MATLAB 函式myEigValue.m範例14-1:myEigValue/myEigValue.m,14-2 產生獨立應用程式,function eigValue=myEigValue(mat)%myEig

5、Value:Generate the eigenvalues of the given matrixif(isstr(mat)%若輸入是字串,轉成數值mat=eval(mat);enda,b=eig(mat);eigValue=diag(b);disp(eigValue);%顯示固有值 eigenValue,測試此範例,可以在MATLAB命令視窗輸入:myEigValue(magic(5);即可在螢幕顯示一個 5X5 的魔術方陣所對應的固有值,14-2 產生獨立應用程式,在將此MATLAB函式編譯成為可執行檔的過程中,會產生一些額外檔案,所以你必須將本範例由光碟拷貝至硬碟,才能進行以下的操作。

6、,提示,將 myEigValue.m 轉換成 myEigValue.exe,有一些細節要特別小心:myEigValue.exe 將使用命列列參數的方式來得到輸入方陣,所以 myEigValue.m 必須先使用 eval 將輸入字串轉為方陣。myEigValue.m 必須使用 disp 結果印在螢幕上,以方便 myEigValue.exe 來印出同樣的結果。,14-2 產生獨立應用程式,接著,我們在MATLAB命令視窗下,將工作目錄改變至 myEigValue.m 所在的目錄然後使用下列命令來將 myEigValue.m 編譯成 myEigValue.exe,如下:mcc m myEigValu

7、e.m經過半分鐘的時間,就會完成編譯,並產生數個檔案,包含 一個可執行檔 myEigValue.exe若要測試此可執行檔,可以直接在 DOS 命令視窗下輸入:myEigValue.exe magic(5),14-2 產生獨立應用程式,即可在螢幕顯示一個 5X5 的魔術方陣所對應的固有值若要輸入一個特定的方陣,可以使用類雙引號來包住代表方陣的字串,範例如下:myEigValue.exe 1 2 3;3 2 1;1 1 1,14-2 產生獨立應用程式,在第一次執行 myEigValue.exe時,會產生myEigValue_mcr 目錄,以便使用MATLAB的程式庫,所以花的時間會比較久一點。之後

8、再執行 myEigValue.exe,就會直接取用速度就會變快了。,提示,使用 mcc 時,還有幾點要注意:如果你的 MATLAB 函式有呼叫任何你自己定義的函式,要一併放進來編譯。如果只是要產生C程式碼,而不產生可執行檔,可以使用mcc mc myEigValue.m(c 代表只產生 C 語言的包裝程式檔案)。如果要檢視MATLAB編譯器在編譯時所產生的訊息,可以使用mcc mv myEigValue.m(v 代表 verbose)。如果你的函式沒有用到繪圖功能,可以使用mcc m R nojvm myFunc.m,以減小所產生的檔案大小。,14-2 產生獨立應用程式,若要將編譯後所產生的可

9、執行檔案搬到其他電腦上執行,必須將下列檔案放在一起,才能順利執行:myEigValue.exemyEigValue.ctfmyEigValue.ctf 用來記錄各種資訊,讓myEigValue.exe在第一次執行時,可以產生myEigValue_mcr目錄mcr代表MATLAB Compiler Runtime,用來存放myEigValue.exe會取用到的MATLAB程式庫,14-2 產生獨立應用程式,使用MATLAB編譯器可以產生共享程式庫(Shared Libraries),包含所有由使用者定義的函式,以便讓其他獨立應用程式來呼叫。產生一個共享程式庫。首先先定義這兩個 MATLAB 函式

10、範例14-2:sharedLibrary/myMatMultiply.m,14-3 產生共享資料庫,function out=myMatMultiply(mat1,mat2)%myMatEig:Generate the product of two given matricesout=mat1*mat2;,範例14-3:sharedLibrary/myMatInv.m接著將這兩個 MATLAB 函式編譯成共享程式庫,程式庫名稱為 matLib,所使用的指令如下mcc-B csharedlib:matLib myMatInv.m myMatMultiply.m此時會在工作目錄下產生數個檔案,主檔

11、名都是 matLib,這些檔案即是 matLib 程式庫,14-3 產生共享資料庫,function invMat=myMatInv(mat)%myMatInv:Generate the inverse matrix of the given matrixinvMat=inv(mat);,可以使用一般獨立應用程式來呼叫這個程式庫內所定義的函式。程式庫是由兩個 MATLAB 函式編譯所得,因此我們可以得到兩個對應的C函式,分別是 mlfMyMatInv 及 mlfMyMatMultiply,對應關係如下:out=myMatInv(in)mlfMyMatInv(1,14-3 產生共享資料庫,使用

12、matLib 程式庫來呼叫這兩個C函式的獨立應用程式範例如下範例10-4:myMatLibMain.c,/*=*此範例程式可以呼叫 MATLAB 編譯器所產生的程式庫 matLib*Roger Jang,20080211*=*/#include#include matLib.h/*顯示C資料型態為 mxArray 的雙倍精準陣列*/void matDisplay(const mxArray*in),14-3 產生共享資料庫,int i,j;int rowNum=mxGetM(in);/*橫列個數*/int colNum=mxGetN(in);/*直行個數*/double*data=mxGetP

13、r(in);/*指到輸入陣列中的雙倍精準資料*/*印出資料*/for(i=0;icolNum;i+)for(j=0;jrowNum;j+)printf(%4.2ft,dataj*colNum+i);printf(n);printf(n);/*主要工作函式*/void*mainFunction(int*errorCode),14-3 產生共享資料庫,mxArray*in1,*in2;/*定義送到程式庫函式的輸入矩陣*/mxArray*out=NULL;/*定義程式庫函式的輸出矩陣*/double data=1,3,5,2,4,6,0,8,9;/*測試用的資料*/*確認此應用程式已經被正確地啟始*

14、/if(!mclInitializeApplication(NULL,0)fprintf(stderr,錯誤:無法啟始應用程式!n);*errorCode=-1;return;/*確認程式庫matLib已經被正確地啟始*/if(!matLibInitialize()fprintf(stderr,錯誤:無法啟始程式庫!n);*errorCode=-2;return;,14-3 產生共享資料庫,14-3 產生共享資料庫,/*創造輸入矩陣*/in1=mxCreateDoubleMatrix(3,3,mxREAL);in2=mxCreateDoubleMatrix(3,3,mxREAL);/*將 da

15、ta 中的資料拷貝至 in1*/memcpy(mxGetPr(in1),data,9*sizeof(double);/*將 data 中的資料拷貝至 in2*/memcpy(mxGetPr(in2),data,9*sizeof(double);/*呼叫由 MATLAB 編譯器產生的程式庫 matLib 中的函式*/*計算矩陣相乘*/mlfMyMatMultiply(1,/*收回配置給 out 的記憶體*/,14-3 產生共享資料庫,/*計算反矩陣*/mlfMyMatInv(1,14-3 產生共享資料庫,/*主程式*/int main()int errorCode=0;mainFunction(,若要編譯此獨立程式,可在 MATLAB 命令視窗輸入如下:mbuild myMatLibMain.c matLib.lib此時即可產生獨立應用程式 myMatLibMain.exe,只要在 DOS 命令視窗下輸入myMatLibMain,即可看到此程式碼執行的結果。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号