- 計(jì)算機(jī)仿真技術(shù)與CAD
- 李國勇主編
- 2676字
- 2019-01-09 15:00:29
1.9 MATLAB編譯器
利用MATLAB編譯器,不僅可以把M文件編譯成MEX文件(擴(kuò)展名為.dll)或獨(dú)立應(yīng)用的EXE程序(擴(kuò)展名為.exe),減少對語言環(huán)境本身的依賴性,而且可以通過編譯,隱藏自己開發(fā)的算法,防止修改其內(nèi)容。
如果要完成M文件的編譯或MATLAB與C語言的交互,必須建立MATLAB的mex,mcc和mbuild三個(gè)編輯器。mex編譯命令可以將C語言編寫的C文件轉(zhuǎn)換成在MATLAB環(huán)境下能運(yùn)行的各種MATLAB文件的形式。mcc編譯命令可以將MATLAB編寫的M文件轉(zhuǎn)換成為各種形式的C語言或MEX文件。如果是將M文件轉(zhuǎn)換為可執(zhí)行文件,mcc先將M文件轉(zhuǎn)換成Win32格式程序代碼,再利用mbuild命令將其編譯為EXE程序。如果是將M文件轉(zhuǎn)換成MEX文件,mcc先將M文件轉(zhuǎn)換成MEX格式的C代碼,再調(diào)用mex命令將其編譯成MEX文件。
1.9.1 創(chuàng)建MEX文件
利用MATLAB編輯器mex或mcc可把C源代碼文件(擴(kuò)展名為.c)或M文件(擴(kuò)展名為.m)經(jīng)由C源代碼編譯成MEX文件。當(dāng)程序變量為實(shí)數(shù)、或向量化程度較低、或含有循環(huán)結(jié)構(gòu)時(shí),采用MEX文件可提高運(yùn)行速度。另外,MEX文件采用二進(jìn)制代碼生成,能更好地隱藏文件算法,使之免遭非法修改。MEX文件可直接在MATLAB環(huán)境下運(yùn)行,它的使用方法與M文件相同,但同名文件中的MEX文件被優(yōu)先調(diào)用。MEX文件最簡便的創(chuàng)建方法是利用MAT-LAB內(nèi)裝的MEX編輯器(MATLAB Compiler)進(jìn)行轉(zhuǎn)換。
如果系統(tǒng)僅安裝了一個(gè)標(biāo)準(zhǔn)編譯器,在MATLAB環(huán)境下首次利用mex或mcc命令運(yùn)行編輯器時(shí),MATLAB將自動完成配置;而如果系統(tǒng)安裝了多個(gè)標(biāo)準(zhǔn)編譯器,MATLAB將提示用戶指定一個(gè)默認(rèn)編輯器。另外,也可利用mex -setup命令來改變配置。
1.利用C文件創(chuàng)建MEX文件
如果要在MATLAB的當(dāng)前工作目錄中,生成一個(gè)與C源代碼程序同名的MEX文件,只需要在MATLAB命令窗口中輸入以下命令
>>mex filename.c
以上命令中的filename.c為當(dāng)前工作目錄中將要?jiǎng)?chuàng)建MEX文件的C源代碼程序名。
【例1-41】 將MATLAB的自帶文件yprime.c編譯成MEX文件。
解 首先將子目錄matlab\extern\examples\mex中的yprime.c文件復(fù)制到MATLAB的當(dāng)前工作目錄中,并更名為ex1-41.c,然后在MATLAB命令窗口中輸入以下命令:
>>mex ex1 41.c
編譯成功后,便可在MATLAB的當(dāng)前工作目錄中,生成一個(gè)MEX文件ex1-41.mexw32(MATLAB 6.5為ex1-41.dll)。此時(shí)在MATLAB命令窗口中輸入以下命令:
>>y=ex1 41(1,1:4)
結(jié)果顯示:
y= 2.0000 8.9685 4.0000 -1.0947
2.利用M文件創(chuàng)建MEX文件
如果要在MATLAB的當(dāng)前工作目錄中,生成一個(gè)與M文件同名的MEX文件,只需要簡單地在MATLAB命令窗口中輸入以下命令:
>>mcc -x filename.m
以上命令中的filename.m為MATLAB當(dāng)前工作目錄中將要?jiǎng)?chuàng)建MEX文件的M文件名;-x為選項(xiàng),表示由M文件創(chuàng)建MEX文件。在此,mcc指令在把M文件變成C語言源代碼文件之后,會自動調(diào)用mex指令把C源代碼文件轉(zhuǎn)換為MEX文件。如果將選項(xiàng)-x換成-S或-B pcode,則表示用于創(chuàng)建MEX S函數(shù)或P碼文件。
值得注意的是,在將M文件轉(zhuǎn)換成MEX文件時(shí),M文件中的函數(shù)文件和文本文件的轉(zhuǎn)換過程略有不同。
(1)由MATLAB函數(shù)文件生成MEX文件
當(dāng)MATLAB的M文件為函數(shù)文件funname.m時(shí),在MATLAB命令窗口中,利用以下命令可直接在當(dāng)前目錄中生成與函數(shù)文件同名的MEX函數(shù)文件。
>>mcc -x funname.m
【例1-42】 將以下函數(shù)文件ex1-42.m生成MEX文件。
%ex1 42.m function y=ex1 42(x) y=3*x+x.^3;
解 在MATLAB命令窗口中,輸入以下命令:
>>mcc -x ex1 42.m
編譯成功后,同樣可在MATLAB的當(dāng)前工作目錄中,生成一個(gè)MEX文件ex1-42.dll和其他許多無用的中間文件。為了確保ex1-42.dll文件的正確運(yùn)行,將當(dāng)前目錄中的ex1-42.m文件和中間文件刪除后,在MATLAB命令窗口中輸入以下命令:
>>x=-1;y=ex1 42(x)
結(jié)果顯示:
y= -4
(2)由MATLAB文本文件生成MEX文件
當(dāng)MATLAB的M文件為文本文件filename.m時(shí),首先要在文本文件的開頭加一行“func-tion filename”,然后再在MATLAB命令窗口中,利用以下命令生成與文本文件同名的MEX文件。
>>mcc -x filename.m
【例1-43】 將以下文本文件ex1-43.m生成MEX文件。
%ex1 43.m a=5;b=6;c=a*b
解 首先要將以上文本文件改寫為
%ex1 43.m function ex1 43 a=5;b=6;c=a*b
然后再在MATLAB命令窗口中,輸入以下命令:
>>mcc -x ex1 43.m
編譯成功后,同樣在當(dāng)前工作目錄中,生成一個(gè)MEX文件ex1-43.dll和其他許多中間文件。將該目錄中的ex1-43.m和無用的中間文件刪除后,在MATLAB命令窗口中輸入命令
>>ex1 43
結(jié)果顯示:
c= 30
注意,編譯器mcc的選項(xiàng)-x在MATLAB 7.5中已經(jīng)不支持了,它僅可用于MATLAB 6.5及以前的版本。因?yàn)镸ATLAB 7.5的JIT加速器已經(jīng)可以把M文件的執(zhí)行效率增加許多,MATLAB 7.5已不應(yīng)用MEX格式來加速程序的執(zhí)行速度了。因此,MATLAB 7.5無法編譯MEX格式的文件。
1.9.2 創(chuàng)建EXE文件
前面介紹的MEX文件雖然編碼形式與M文件不同,但MEX文件仍是只能在MATLAB環(huán)境中運(yùn)行的文件,它與MATLAB其他指令的作用依靠動態(tài)鏈接實(shí)現(xiàn)。MATLAB編輯器mbuild或mcc可使C源代碼文件或M文件經(jīng)由C或C++源代碼生成獨(dú)立的外部應(yīng)用程序(擴(kuò)展名為.exe),即EXE文件。EXE文件可以獨(dú)立于MATLAB環(huán)境運(yùn)行,但是往往需要MATLAB提供的數(shù)學(xué)函數(shù)庫(MATLAB C/C++Math Library)和圖形函數(shù)庫(MATLAB C/C ++Graphics Library)的支持。
如果系統(tǒng)僅安裝有一個(gè)標(biāo)準(zhǔn)C/C ++編輯器,MATLAB將在首次執(zhí)行編譯時(shí)自動完成配置;如果系統(tǒng)安裝了多個(gè)標(biāo)準(zhǔn)編譯器,那么在首次執(zhí)行編譯任務(wù)時(shí),MATLAB將提示用戶指定一個(gè)默認(rèn)編輯器。另外,也可利用命令“mbuild -setup”來改變配置。
獨(dú)立外部程序或完全由M文件轉(zhuǎn)換產(chǎn)生,或完全由C/C++文件轉(zhuǎn)換產(chǎn)生,或由它們的混合文件轉(zhuǎn)換產(chǎn)生,但不能由MEX文件轉(zhuǎn)換得到。
1.利用C文件創(chuàng)建EXE文件
如果要在MATLAB的當(dāng)前目錄中,生成一個(gè)與C源代碼程序同名的EXE文件,只需要在MATLAB命令窗口輸入以下命令
>>mbuild filename.c
以上命令中的filename.c為將要編譯成EXE文件的C源代碼程序名。
2.利用M文件創(chuàng)建EXE文件
MATLAB在對M文件進(jìn)行轉(zhuǎn)換時(shí),它首先被編譯器翻譯成C/C++源代碼文件,然后自動調(diào)用mbuild命令,對產(chǎn)生的C/C++源代碼文件連同那些本來就是C/C++的源代碼文件一起再進(jìn)行編譯,并鏈接生成最終的可執(zhí)行外部EXE文件。
如果要在MATLAB的當(dāng)前目錄中,生成一個(gè)與M文件同名的EXE文件,只需要在MAT-LAB命令窗口輸入以下命令
>>mcc -m filename.m %創(chuàng)建C獨(dú)立應(yīng)用程序
或
>>mcc -p filename.m %創(chuàng)建C++獨(dú)立應(yīng)用程序
以上命令中的filename.m為當(dāng)前目錄中將要編譯成EXE文件的M文件名;選項(xiàng)-m表示產(chǎn)生C語言的可執(zhí)行外部應(yīng)用程序;選項(xiàng)-p表示產(chǎn)生C++語言的可執(zhí)行外部應(yīng)用程序,但此時(shí)要確保系統(tǒng)已經(jīng)安裝了有關(guān)C++編譯器(因MATLAB僅自帶一個(gè)Lcc C編譯器),否則無法正常建立。在此,mcc在把M文件變成C或C++源代碼文件之后,會再自動調(diào)用mbuild指令把C或C++源代碼文件轉(zhuǎn)換為可獨(dú)立執(zhí)行的EXE文件。如果在創(chuàng)建C或C++語言的獨(dú)立應(yīng)用程序時(shí),需要用到圖形函數(shù)庫,則需要利用以下相應(yīng)的命令
>>mcc -B sgl filename.m %創(chuàng)建帶繪圖函數(shù)的C獨(dú)立應(yīng)用程序
或
>>mcc -B sglcpp filename.m %創(chuàng)建帶繪圖函數(shù)的C++獨(dú)立應(yīng)用程序
與創(chuàng)建MEX文件類似,在創(chuàng)建EXE文件時(shí),當(dāng)M文件為文本文件filename.m時(shí),同樣首先要在文本文件的開頭加一行“function filename”,然后再利用以上命令進(jìn)行轉(zhuǎn)換。
【例1-44】 將以下M文件ex1-44.m創(chuàng)建成獨(dú)立應(yīng)用程序EXE文件。
%ex1 44.m function ex1 44 a=5;b=6;c=a+b t=0:0.01:2*pi;plot(t,sin(t))
解 在MATLAB命令窗口中,輸入以下命令:
>>mcc -B sgl ex1 44.m
編譯成功后,同樣在當(dāng)前目錄中,生成一個(gè)EXE文件ex1-44.exe和一個(gè)有用的ex1 44.ctf文件(MATLAB 6.5及以前版本為bin文件夾),以及其他許多無用的中間文件。利用鼠標(biāo)雙擊ex1-44.exe文件,便可得到以下結(jié)果和如圖1-13所示的正弦曲線。
c= 11
- 水聲傳感器網(wǎng)絡(luò)拓?fù)?/a>
- 基于MATLAB/Simulink系統(tǒng)仿真權(quán)威指南
- 虛擬現(xiàn)實(shí)的10堂課
- 一本書讀懂虛擬現(xiàn)實(shí)
- 高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)教材·計(jì)算機(jī)控制:基礎(chǔ)、技術(shù)、工具、實(shí)例
- 計(jì)算機(jī)仿真技術(shù)與CAD
- 現(xiàn)代運(yùn)動控制技術(shù)及其應(yīng)用
- 基于仿真的結(jié)構(gòu)優(yōu)化方法
- MATLAB Simulink 2020系統(tǒng)仿真從入門到精通
- VR虛擬現(xiàn)實(shí)模型設(shè)計(jì)與制作(基礎(chǔ)篇)
- VMware vSphere 6.0虛擬化架構(gòu)實(shí)戰(zhàn)指南
- 苦旅尋真:求索中國仿真解困之道
- 計(jì)算機(jī)仿真技術(shù)基礎(chǔ)(第2版)
- 基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真
- VR虛擬現(xiàn)實(shí)模型設(shè)計(jì)與制作(進(jìn)階篇)