版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MATLAB程式設計進階篇
應用程式介面張智星jang@.tw.tw/~jang清大資工系多媒體檢索實驗室1可整理ppt3-1MATLAB應用程式介面應用程式介面ApplicationProgramInterface簡稱API和外部程式或其它程式語言溝通2可整理pptAPI的功能只要遵循API規範,可做到下列事項:從MATLAB呼叫C語言或Fortran語言撰寫的函數將MATLAB當成計算引擎(ComputingEngine),並從獨立的C或Fortran程式呼叫此MATLAB引擎,進行各種運算或圖形顯示以獨立的C或Fortran程式讀寫MATLAB專用的MAT檔在視窗環境,進行ActiveXAutomation,即將MATLAB視為ActiveXAutomationServer,讓其它應用程式(Excel或Access等)呼叫,或將MATLAB視為ActiveXAutomationController,呼叫視窗下其它應用程式在微軟視窗環境下,經由DDE(DynamicDataExchange)來和其它應用程式溝通並傳送資料
3可整理ppt3-2撰寫能讓MATLAB呼叫的
C函數:前置測試撰寫C函數讓MATLAB呼叫的原因MATLAB程式碼執行效率不佳,希望以C程式碼改進。常發生在MATLAB的JIT加速器無法加速您的程式碼,或是您的演算法無法改成向量化的程式碼。隱藏程式碼,保護智慧財產權。C的原始碼編譯後,變成二進位碼,MATLAB能夠呼叫,而使用者無法看到原始程式碼不想將已寫好的C程式碼改寫成MATLAB程式碼,而希望在MATLAB的環境下呼叫這些C程式碼進行其它只有在C程式能做到的事4可整理ppt只能在C程式下完成的工作更改呼叫端之工作空間的變數產生常駐記憶體(PersistentMemory),即產生在函數結束後,仍能讓其它函數或MATLAB存取的資料結構或變數串接埠(SerialPort)資料的傳送和接收DeviceDrivers等5可整理ppt提示使用pcode指令
優點:可將一般M檔案轉換成二進制檔案達到隱藏原始程式碼的功能缺點:無法大幅提高程式碼的執行效率6可整理ppt開始前置測試(I)選擇C編譯器編譯完成的C函數在MATLAB指令視窗內輸入
mex-setup7可整理ppt開始前置測試(II)選擇已安裝在電腦上的C編譯器8可整理ppt開始前置測試(III)按下「Enter」鍵,會出現畫面9可整理ppt提示lcc是Public-domain的C程式編譯器MATLAB5.x,是隨StateflowToolbox而來,MATLAB6.x,是隨MATLAB而來。執行「mex-setup」MATLAB5.x會跳出DOS視窗,MATLAB6.x不會跳出DOS視窗,都在MATLAB命令視窗完成其內容則與DOS視窗的內容大同小異10可整理ppt開始前置測試(IV)選用微軟公司的VisualC/C++,輸入「1」後,再按「Enter」鍵最後,再按「Enter」鍵確認即可11可整理ppt無安裝C編譯器若DOS視窗無顯示可供選擇的C編譯器電腦尚未安裝C編譯器先安裝C編譯器才能進行下一步的測試例如:MicrosoftVisualC/C++、WatcomC/C++、BorlandC等12可整理ppt開始前置測試(V)完成選擇C編譯器的程序,可以測試C程式編譯MATLAB有一現成的C程式碼yprime.c,其位置在{MATLABroot}\extern\examples\mex\yprime.c測試之前,須將此檔案拷貝至目前目錄,才可進行測試>>cdD:\matlabBook\MATLAB程式設計:進階篇\03-應用程式介面>>copyfile([matlabroot,'\extern\examples\mex\yprime.c'])若執行copyfile指令時產生錯誤訊息,通常表示目前目錄下已經有yprime.c檔案13可整理ppt開始前置測試(VI)在MATLAB指令視窗,輸入下列敘述來編譯此C程式>>mexyprime.cMATLAB即呼叫VisualC/C++(先前選的C編譯器)編譯yprime.c,並產生編譯的訊息若無錯誤訊息,編譯完成後,C編譯器會產生yprime.dll或yprime.mexw32可執行檔此即為MATLAB可呼叫的C函數,所在的位置可顯示如下>>whichyprimeD:\matlabBook\MATLAB程式設計:進階篇\03-應用程式介面\yprime.mexw3214可整理ppt提示在MATLAB7.1之前,所產生的檔案是yprime.dll,但從MATLAB7.1(含)之後,所產生的檔案是yprime.mexw32。15可整理ppt開始前置測試(VII)測試yprime執行>>yprime(1,1:4)ans=2.00008.96854.0000-1.0947MEX檔案MATLAB可呼叫的可執行檔通稱在其它電腦平台上,大部份以mex為此可執行檔副檔名的一部份16可整理ppt整理:MEX檔案的副檔名
平台MEX檔案的副檔名SunOS4.xmex4HP9000/series700mexhp7AlphamexdsSGImexsgSGI64mexsg64IBMRS/6000mexrs6Linux(32-bit)mexglxLinuxx86-64mexa6464-bitSolarisSPARCmexs64MicrosoftWindows(32-bit)dll(MATLAB7.1前),mexwin32(MATLAB7.1或更新)MicrosoftWindows(64-bit)dll(MATLAB7.1前),mexwin64(MATLAB7.1或更新)Macintosh
(PPC)mexmacMacintosh(Intel)mexmaci17可整理ppt3-3MATLAB的資料結構
及對應APIMATLAB變數的資料結構MATLAB內部只有一種資料型態宣告成mxArray是一個C語言下的結構(Structure)18可整理pptmxArray的StructureMATLAB對應的變數名稱維度資料型態實數或複數是否為稀疏矩陣(SparseMatrix)19可整理ppt變數的實部和虛部變數的實部和虛部在每個mxArray結構,包含兩個指標(Pointers)pr及pi分別指到這個變數的實部和虛部兩者都是資料型態為double的一維陣列欲取得這兩個指標用MATLAB提供的API函數mxGetPr及mxGetPi取得可存取某個MATLAB變數內的所有數值20可整理pptMATLAB提供的API函數-mxmx為字頭的API函數MATLAB變數資料(型態為mxArray)的存取mxGetPr(傳回實部指標)mxGetPi(傳回虛部指標)mxGetM(取得矩陣的橫列維度)mxGetN(取得矩陣的直行維度)mxCreateDoubleMatrix(產生變數型態為double的矩陣)21可整理pptMATLAB提供的API函數-mexmex為字頭的API函數
MATLAB環境下執行的動作
mexErrMsgTxt(在MATLAB印出錯誤訊息,並跳出MEX檔案)mexCallMATLAB(呼叫MATLAB引擎以執行MATLAB之數值運算)mexPrintf(在MATLAB印出訊息)22可整理pptMATLAB提供的API函數-matmat為字頭的API函數對MAT檔案的讀寫或處理matGetArray(從MAT檔案讀取mxArray陣列)matDeleteArray(從MAT檔案移除mxArray陣列)
23可整理ppt3-4一個最簡單的MEX檔案將一個輸入純量(資料型態為double)乘以2此程式碼已內建在MATLAB光碟中{MATLABroot}\extern\examples\refbook\timestwo.c範例3-1:scalarx2.c
有timestwo.c詳細的中文註解,並改名為scalarx2.c24可整理ppt簡單MEX檔案範例(I)在MATLAB中,呼叫C編譯器對scalarx2.c進行編譯>>mexscalarx2.c編譯完後,確認可執行檔是否存在>>whichscalarx2D:\matlabBook\MATLAB程式設計:進階篇\03-應用程式介面\scalarx2.dll25可整理ppt簡單MEX檔案範例(II)進行各項測試>>scalarx2(8.5)ans=17
>>scalarx2('Stringinput')???Inputmustbeascalar.>>scalarx2([123])???Inputmustbeascalar.26可整理pptMEX檔案的說明(I)同時有scalarx2.m及scalarx2.mexw32
存在於同一目錄下MATLAB選用scalarx2.mexw32
檔來執行若輸入「helpscalarx2」MATLAB會列出scalarx2.m的線上輔助說明有關scalarx2.mexw32的線上輔助說明,就必須置於scalarx2.m之內27可整理pptMEX檔案的說明(II)>>typescalarx2.m
functionout=scalarx2(in)%SCALARX2Ascalarversionof"timestwo".% Thisservesasanexampleofputtingon-linehelpinan% M-file,buttheactualprogrambodyisinanotherMEX-file% withthesamemajorfilename.
>>helpscalarx2
SCALARX2Ascalarversionof"timestwo". Thisservesasanexampleofputtingon-linehelpinan M-file,buttheactualprogrambodyisinanotherMEX-file withthesamemajorfilename.
>>whichscalarx2
D:\matlabBook\MATLAB程式設計:進階篇\03-應用程式介面\scalarx2.mexw3228可整理ppt3-5處理二維矩陣的MEX檔案範例將輸入二維矩陣(可能包含實部和虛部)乘以2範例3-2:arrayx2.c編譯程式>>mexarrayx2.c確認可執行檔的存在>>whicharrayx2
D:\matlabBook\MATLAB程式設計:進階篇\03-應用程式介面\yprime.mexw3229可整理ppt二維矩陣範例-1進行測試>>arrayx2([123])ans=246
>>arrayx2([1+i2+2i3+3i;456])ans=2.0000+2.0000i4.0000+4.0000i6.0000+6.0000i8.000010.000012.0000
>>arrayx2('Teststring')???Inputmustbeadouble.30可整理ppt二維矩陣範例-2(I)兩個輸入矩陣A和B矩陣旳大小分別是p×m及p×n分別代表由m個直行向量及n個直行向量所形成的集合每一個向量的長度都是p傳回一個距離矩陣CC(i,j)為向量A(:,i)和向量B(:,j)的矩離31可整理ppt提示大量資料的處理一般的慣例都是將各個向量以直行向量的方式堆成一個矩陣,再進行各種處理32可整理ppt二維矩陣範例-2(II)範例3-3:pairdist.c編譯程式>>mexpairdist.c33可整理ppt二維矩陣範例-2(III)測試程式>>whichpairdist
D:\matlabBook\MATLAB程式設計:進階篇\03-應用程式介面\pairdist.dll>>pairdist([23],[234])ans=012101
34可整理ppt二維矩陣範例-2(IV)>>A=rand(2,3);>>B=rand(2,4);>>C=pairdist(A,B)C=0.51040.98060.45440.56490.35620.23470.59110.26280.21010.58910.26750.1639
>>pairdist('string1','string2')???Input1isnotafullnumericalarray!35可整理ppt3-6產生基本工作空間變數的MEX檔案範例將輸入矩陣乘以2之後,存放成MATLAB基本工作空間中的一個變數範例3-4:putarray.c測試程式>>clearall>>mexputarray.c>>putarray([125])"putarray_output"iscreatedinthebaseworkspace.
>>whosNameSizeBytesClassputarray_output1x324doublearray
Grandtotalis3elementsusing24bytes36可整理ppt檢視變數putarray_output由putarray所置放在MATLAB基本工作空間的變數,可以檢視>>putarray_output
putarray_output=2410這個範例可能的應用從RS232埠讀取GPS傳回的資料,將資料進行處理後送入MATLAB的基本工作空間,MATLAB再根據此工作空間的變數進行即時的圖形繪製或成像從影像擷取卡抓取影像資像,送入MATLAB的基本工作空間,MATLAB再根據此資料進行即時計算,例如人臉辨識或指紋辨識等
37可整理ppt3-7對於結構陣列的處理MATLAB也提供比較複雜的資料結構,例如結構陣列、異質陣列等可以撰寫C程式碼,來和MATLAB內部的結構陣列進行資料的交換和計算。範例3-5:matlabStruct2c.c
38可整理ppt結構陣列範例1–(I)測試程式範例3-5:matlabStruct2c01.mmexmatlabStruct2c.cx(1).name='林政源';x(1).phone=2796;x(2).name='陳江村';x(2).phone=3425;x(3).name='張永森';x(3).phone=3213;matlabStruct2c(x)39可整理ppt結構陣列範例1–(II)結果
friend[0].name=林政源
friend[0].phone=2796.000000friend[1].name=陳江村
friend[1].phone=3425.000000friend[2].name=張永森
friend[2].phone=3213.000000由MATLAB印出來的訊息,事實上已經是C程式碼的結構陣列的欄位值。40可整理ppt結構陣列範例2
將C的結構陣列,送到MATLAB工作空間的結構陣列
範例3-7:cStruct2matlab.c測試程式範例3-8:cStruct2matlab01.m
1x3structarraywithfields:namephoneMATLAB在工作空間的結構陣列x即是由C的結構陣列轉換出來的結果。mexcStruct2matlab.cx=cStruct2matlab41可整理ppt
3-8從獨立的C程式來呼叫MATLAB引擎可由獨立的C程式呼叫MATLAB引擎已有一C程式碼,但想要使用MATLAB的特殊功能完成某些特定的工作Ex:使用MATLAB的數學功能,例如計算反矩陣、行列式、最小平方解、奇異值分解(SinglarValueDecomposition)等使用MATLAB的圖形顯示功能,例如二維及三維圖形、動畫等42可整理ppt提示欲將獨立的MATLAB視窗應用程式轉換成單獨的可執行檔StandaloneExecutable不需安裝MATLAB就可運作的.exe檔案需MATLAB5.x和6.x的「RuntimeServer」工具箱將MATLAB視窗應用程式轉成.exe檔案,包含所有的圖形顯示功能讓沒有安裝MATLAB的人使用MATLAB7.x,「RuntimeServer」工具箱已不存在,功能已搬到「MATLABCompiler」工具箱43可整理pptC呼叫MATLAB範例(I)C程式碼裡面啟動MATLAB並執行一個M檔案plotSine.m,同時秀出執行whos指令後的訊息,C的範例程式碼是plotViaMatlab01.c。在MATLAB輸入命令編譯此C程式碼範例3-9:matlabEngine01.m
optsFile=[matlabroot'\bin\win32\mexopts\msvc60engmatopts.bat'];mex('-f',optsFile,'plotViaMatlab01.c'); %進行編譯!plotViaMatlab01 %測試程式44可整理pptC呼叫MATLAB範例(II)若一切無誤,將產生plotViaMatlab01.exe執行此程式碼後啟動另一個MATLAB執行plotSine.m畫出右列圖形45可整理pptC呼叫MATLAB範例(III)同時跳出一個訊息視窗,以顯示MATLAB在執行whos指令後的輸出訊息
同時工作列也會顯示一個MATLAB的圖示,代表MATLABengine正在執行中。當你按下訊息視窗的「確定」後,MATLABengine也就跟著結束。46可整理pptC呼叫MATLAB的重點(I)首先產生一MATLABEngine的物件,經由這個物件啟動MATLAB及和MATLAB溝通,經由下列程式碼完成Engine*ep=engOpen(NULL);47可整理pptC呼叫MATLAB的重點(II)再來假設欲呼叫的MATLAB程式plotSine.m與呼叫的C程式在同一目錄,將MATLAB切換到此目錄將此程式所在目錄存入字串buffer:_getcwd(buffer,BUFSIZE);產生MATLAB內部字串變數app:app=mxCreateString(buffer);將字串變數app置入工作空間變數appDir:engPutVariable(ep,"appDir",app);將MATLAB的工作目錄切換至字串appDir所指定的目錄engEvalString(ep,"cd(appDir)");48可整理pptC呼叫MATLAB的重點(III)最後就將我們想要呼叫的MATLAB程式plotSine.m傳入執行,即可大功告成:engEvalString(ep,"plotSine");49可整理pptC呼叫MATLAB的重點(IV)接著我們要顯示MATLAB在執行whos之後所得到的輸出訊息設定buffer可以接收MATLAB的輸出訊息:
engOutputBuffer(ep,buffer,BUFSIZE);
在MATLABengine執行whos指令:
engEvalString(ep,"whos");
顯示buffer的內容:
MessageBox((HWND)NULL,(LPSTR)buffer,(LPSTR)"MATLAB-whos",MB_OK);最後關閉MATLABengine:
engClose(ep);50可整理ppt如果發生編譯錯誤可能是你所使用的編譯器不是MSVC6.0,此時要將編譯參數檔optsFile改成適合你所用的編譯器,常用的編譯參數檔案可以顯示如下:範例3-11:showOptsFile.m
bcc53engmatopts.batdf50engmatopts.batmsvc70engmatopts.batbcc54engmatopt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年幼儿园礼仪洗漱
- 急诊科护理血液透析
- 母婴护理行业趋势
- 围护结构节能工程专项施工方案(2026新版)
- 溺水儿童常见错误救援行为
- 剖宫产产妇心理疏导
- 用户使用手册更新函(5篇)范文
- 基础护理操作标准化培训
- 2026年度合作项目进度确认函6篇范文
- 2026年外研版小学英语六年级下册易错题专项卷含答案
- 2026年1月浙江省高考(首考)化学试题(含标准答案)
- 光传输网络基本知识课件
- 《北京市商品房现房买卖合同示范文本(2025年修订 公开征求意见稿)》
- 2025 ESICM临床实践指南:成人危重患者的液体治疗-第2部分:复苏液体量解读
- 安全生产管理人员准入制度
- 2026年浙江广厦建设职业技术大学单招职业适应性测试题库参考答案详解
- 2026年云南省政府采购评审专家考前冲刺备考300题(含答案)
- 2025年医疗设备回收项目可行性研究报告及总结分析
- 国家安全法课件1
- GB/T 15763.2-2025建筑用安全玻璃第2部分:钢化玻璃
- 燃气站场施工技术交底
评论
0/150
提交评论