MATLAB程式设计入门篇应用程式介面.ppt
《MATLAB程式设计入门篇应用程式介面.ppt》由会员分享,可在线阅读,更多相关《MATLAB程式设计入门篇应用程式介面.ppt(54页珍藏版)》请在三一办公上搜索。
1、MATLAB 程式設計進階篇應用程式介面,張智星http:/www.cs.nthu.edu.tw/jang清大資工系 多媒體檢索實驗室,3-1 MATLAB應用程式介面,應用程式介面Application Program Interface簡稱API和外部程式或其它程式語言溝通,API 的功能,只要遵循 API 規範,可做到下列事項:從 MATLAB 呼叫 C 語言或 Fortran 語言撰寫的函數將 MATLAB 當成計算引擎(Computing Engine),並從獨立的 C 或 Fortran 程式呼叫此 MATLAB 引擎,進行各種運算或圖形顯示以獨立的C或Fortran程式讀寫MAT
2、LAB專用的MAT檔在視窗環境,進行ActiveX Automation,即將 MATLAB視為ActiveX Automation Server,讓其它應用程式(Excel 或 Access等)呼叫,或將MATLAB視為 ActiveX Automation Controller,呼叫視窗下其它應用程式 在微軟視窗環境下,經由 DDE(Dynamic Data Exchange)來和其它應用程式溝通並傳送資料,3-2 撰寫能讓MATLAB呼叫的C 函數:前置測試,撰寫C函數讓 MATLAB 呼叫的原因MATLAB 程式碼執行效率不佳,希望以 C 程式碼改進。常發生在MATLAB的 JIT 加
3、速器無法加速您的程式碼,或是您的演算法無法改成向量化的程式碼。隱藏程式碼,保護智慧財產權。C 的原始碼編譯後,變成二進位碼,MATLAB 能夠呼叫,而使用者無法看到原始程式碼不想將已寫好的 C 程式碼改寫成 MATLAB 程式碼,而希望在 MATLAB 的環境下呼叫這些 C 程式碼進行其它只有在 C 程式能做到的事,只能在 C 程式下完成的工作,更改呼叫端之工作空間的變數產生常駐記憶體(Persistent Memory),即產生在函數結束後,仍能讓其它函數或 MATLAB 存取的資料結構或變數串接埠(Serial Port)資料的傳送和接收Device Drivers 等,提示,使用 pco
4、de 指令 優點:可將一般 M 檔案轉換成二進制檔案達到隱藏原始程式碼的功能缺點:無法大幅提高程式碼的執行效率,開始前置測試(I),選擇 C 編譯器編譯完成的 C 函數在 MATLAB 指令視窗內輸入 mex-setup,開始前置測試(II),選擇已安裝在電腦上的 C 編譯器,開始前置測試(III),按下 Enter 鍵,會出現畫面,提示,lcc 是Public-domain 的 C 程式編譯器MATLAB 5.x,是隨 Stateflow Toolbox 而來,MATLAB 6.x,是隨 MATLAB 而來。執行mex-setupMATLAB 5.x 會跳出 DOS 視窗,MATLAB 6.
5、x 不會跳出 DOS 視窗,都在 MATLAB 命令視窗完成其內容則與 DOS 視窗的內容大同小異,開始前置測試(IV),選用 微軟公司的 Visual C/C+,輸入1後,再按Enter鍵最後,再按Enter鍵確認即可,無安裝C編譯器,若 DOS 視窗無顯示可供選擇的 C 編譯器電腦尚未安裝 C 編譯器先安裝 C 編譯器才能進行下一步的測試例如:Microsoft Visual C/C+、Watcom C/C+、Borland C 等,開始前置測試(V),完成選擇 C 編譯器的程序,可以測試 C 程式編譯MATLAB 有一現成的 C 程式碼 yprime.c,其位置在MATLAB roote
6、xternexamplesmexyprime.c測試之前,須將此檔案拷貝至目前目錄,才可進行測試 cd D:matlabBookMATLAB程式設計:進階篇03-應用程式介面 copyfile(matlabroot,externexamplesmexyprime.c)若執行 copyfile 指令時產生錯誤訊息,通常表示目前目錄下已經有 yprime.c 檔案,開始前置測試(VI),在 MATLAB 指令視窗,輸入下列敘述來編譯此 C 程式 mex yprime.c MATLAB 即呼叫 Visual C/C+(先前選的 C 編譯器)編譯 yprime.c,並產生編譯的訊息若無錯誤訊息,編譯完
7、成後,C 編譯器會產生 yprime.dll 或 yprime.mexw32 可執行檔此即為 MATLAB 可呼叫的 C 函數,所在的位置可顯示如下 which yprimeD:matlabBookMATLAB程式設計:進階篇03-應用程式介面yprime.mexw32,提示,在 MATLAB 7.1 之前,所產生的檔案是 yprime.dll,但從 MATLAB 7.1(含)之後,所產生的檔案是 yprime.mexw32。,開始前置測試(VII),測試yprime執行 yprime(1,1:4)ans=2.0000 8.9685 4.0000-1.0947MEX 檔案MATLAB 可呼叫的
8、可執行檔通稱在其它電腦平台上,大部份以 mex 為此可執行檔副檔名的一部份,整理:MEX檔案的副檔名,3-3 MATLAB的資料結構及對應API,MATLAB 變數的資料結構MATLAB 內部只有一種資料型態宣告成 mxArray是一個 C 語言下的結構(Structure),mxArray的Structure,MATLAB 對應的變數名稱維度資料型態實數或複數是否為稀疏矩陣(Sparse Matrix),變數的實部和虛部,變數的實部和虛部在每個 mxArray 結構,包含兩個指標(Pointers)pr 及 pi分別指到這個變數的實部和虛部兩者都是資料型態為 double 的一維陣列欲取得這
9、兩個指標用 MATLAB 提供的 API 函數 mxGetPr 及 mxGetPi 取得可存取某個 MATLAB 變數內的所有數值,MATLAB 提供的API函數-mx,mx 為字頭的 API 函數MATLAB 變數資料(型態為 mxArray)的存取mxGetPr(傳回實部指標)mxGetPi(傳回虛部指標)mxGetM(取得矩陣的橫列維度)mxGetN(取得矩陣的直行維度)mxCreateDoubleMatrix(產生變數型態為 double 的矩陣),MATLAB 提供的API函數-mex,mex 為字頭的 API 函數 MATLAB 環境下執行的動作 mexErrMsgTxt(在 MA
10、TLAB 印出錯誤訊息,並跳出 MEX 檔案)mexCallMATLAB(呼叫 MATLAB 引擎以執行 MATLAB 之數值運算)mexPrintf(在 MATLAB 印出訊息),MATLAB 提供的API函數-mat,mat 為字頭的 API 函數對 MAT 檔案的讀寫或處理matGetArray(從 MAT 檔案讀取 mxArray 陣列)matDeleteArray(從 MAT 檔案移除 mxArray 陣列),3-4一個最簡單的 MEX 檔案,將一個輸入純量(資料型態為 double)乘以 2此程式碼已內建在 MATLAB 光碟中MATLAB rootexternexamplesre
11、fbooktimestwo.c範例3-1:scalarx2.c 有timestwo.c詳細的中文註解,並改名為 scalarx2.c,簡單MEX檔案範例(I),在 MATLAB 中,呼叫 C 編譯器對 scalarx2.c 進行編譯 mex scalarx2.c編譯完後,確認可執行檔是否存在 which scalarx2D:matlabBookMATLAB程式設計:進階篇03-應用程式介面scalarx2.dll,簡單MEX檔案範例(II),進行各項測試 scalarx2(8.5)ans=17 scalarx2(String input)?Input must be a scalar.scal
12、arx2(1 2 3)?Input must be a scalar.,MEX檔案的說明(I),同時有 scalarx2.m 及scalarx2.mexw32 存在於同一目錄下MATLAB 選用 scalarx2.mexw32 檔來執行若輸入help scalarx2MATLAB會列出 scalarx2.m 的線上輔助說明有關 scalarx2.mexw32 的線上輔助說明,就必須置於 scalarx2.m 之內,MEX檔案的說明(II),type scalarx2.m function out=scalarx2(in)%SCALARX2 A scalar version of times t
13、wo.%This serves as an example of putting on-line help in an%M-file,but the actual program body is in another MEX-file%with the same major file name.help scalarx2 SCALARX2 A scalar version of times two.This serves as an example of putting on-line help in an M-file,but the actual program body is in an
14、other MEX-file with the same major file name.which scalarx2 D:matlabBookMATLAB程式設計:進階篇03-應用程式介面scalarx2.mexw32,3-5 處理二維矩陣的 MEX 檔案範例,將輸入二維矩陣(可能包含實部和虛部)乘以2範例3-2:arrayx2.c編譯程式 mex arrayx2.c確認可執行檔的存在 which arrayx2 D:matlabBookMATLAB程式設計:進階篇03-應用程式介面yprime.mexw32,二維矩陣範例-1,進行測試 arrayx2(1 2 3)ans=2 4 6 arr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 程式 设计 入门 应用 介面
链接地址:https://www.31ppt.com/p-5439240.html