![MATLAB教案.ch12.MATLAB編譯器和API_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/0035cfd9-ee0e-496c-ab42-8b568a42a095/0035cfd9-ee0e-496c-ab42-8b568a42a0951.gif)
![MATLAB教案.ch12.MATLAB編譯器和API_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/0035cfd9-ee0e-496c-ab42-8b568a42a095/0035cfd9-ee0e-496c-ab42-8b568a42a0952.gif)
![MATLAB教案.ch12.MATLAB編譯器和API_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/0035cfd9-ee0e-496c-ab42-8b568a42a095/0035cfd9-ee0e-496c-ab42-8b568a42a0953.gif)
![MATLAB教案.ch12.MATLAB編譯器和API_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/0035cfd9-ee0e-496c-ab42-8b568a42a095/0035cfd9-ee0e-496c-ab42-8b568a42a0954.gif)
![MATLAB教案.ch12.MATLAB編譯器和API_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/0035cfd9-ee0e-496c-ab42-8b568a42a095/0035cfd9-ee0e-496c-ab42-8b568a42a0955.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、112MATLAB 編譯器和編譯器和API幾乎所有使用過(guò) MATLAB 的科技人員,無(wú)不為該軟件的簡(jiǎn)潔、便捷和功能之強(qiáng)大和可靠所震撼,同時(shí)也對(duì) MATLAB產(chǎn)生了新的期望:一,希望程序能運(yùn)行得更快;二,希望獲得可擺脫 MATLAB 環(huán)境而獨(dú)立運(yùn)行的可執(zhí)行軟件;三,希望從其他“非 MATLAB”的外部程序中調(diào)用 MATLAB。本章前 6 節(jié)介紹 MATLAB 版編譯器(Compiler)。由于 1.2 版與 2.0 版差異較大,又由于 2.0 版缺少 1.2 版具有的優(yōu)化功能,因此內(nèi)容安排上將兼顧地論及兩個(gè)版本。值得指出的是:除 Mathworks外,還有其他一些公司生產(chǎn)的編譯器,其中比較著名的
2、是 MathTools公司的Mediva;據(jù)該公司自稱(chēng),性能優(yōu)于 Mathworks 的,且具有繪圖功能。本章第 7 節(jié)論及 API應(yīng)用程序接口,扼要地介紹不同平臺(tái)間的數(shù)據(jù)傳送和 MATLAB 引擎技術(shù)。節(jié)后算例演示了,如何從外部調(diào)用 MATLAB 引擎。12.1編譯器編譯器 2.0 概述概述12.1.1編譯器編譯器 2.0 的功能的功能12.1.2編譯器編譯器 2.0 的性能改的性能改進(jìn)進(jìn)12.1.3編譯器編譯器 2.0 的局限性的局限性12.1.4把腳本文件把腳本文件改寫(xiě)為函數(shù)改寫(xiě)為函數(shù)文件文件【例 12.1.4-1】有一個(gè)繪圓的 M 腳本文件 circle.m 如下。希望獲得一個(gè) MEX
3、 繪圓程序。(1)原始的繪圓)原始的繪圓腳本文件腳本文件circle.mclf;r=2;t=0:pi/100:2*pi;x=r*exp(i*t);plot(x,r*);axis(square)(2)對(duì)這腳本文)對(duì)這腳本文件直接編譯件直接編譯將因錯(cuò)誤而將因錯(cuò)誤而失敗失敗mcc -x circle ? Error: File circle is a Script M-file and cannot be compiled with the current Compiler.Error in = H:MATLAB53toolboxcompilermcc.dll (3)把腳本文件)把腳本文件改寫(xiě)成函數(shù)
4、改寫(xiě)成函數(shù)文件。文件。circle_f.m:function circle_f(r)clf;t=0:pi/100:2*pi;x=r*exp(i*t);plot(x,r*);axis(square)(4)再對(duì))再對(duì) circle_f.m 進(jìn)行編譯進(jìn)行編譯,將順利通過(guò),將順利通過(guò)。mcc -x circle_f%mcc 是編是編譯指令,詳見(jiàn)譯指令,詳見(jiàn) 12.4 節(jié)。節(jié)。 2(5)運(yùn)行生成的)運(yùn)行生成的MEX 文件文件circle_f.dllcircle_f(0.5) %調(diào)用調(diào)用 circle_f繪制一半徑繪制一半徑為為 0.5 的圓的圓 which circle_f %查詢(xún)所調(diào)用查詢(xún)所調(diào)用的的
5、circle_f 的的路徑全稱(chēng)。路徑全稱(chēng)。 d:myworkcircle_f.dll 5 1 2 3 4 5 圖 12.1.4-1 MEX 文件circle_f.dll 所畫(huà)的圓12.2編譯器的安編譯器的安裝和配置裝和配置12.2.1配置配置 MATLAB 編譯編譯器的前提準(zhǔn)器的前提準(zhǔn)備備圖 12.2.1-1 【Select MATLAB Componets】對(duì)話(huà)窗的選項(xiàng)局部圖12.2.2為產(chǎn)生為產(chǎn)生 MEX 文件進(jìn)行文件進(jìn)行預(yù)配置預(yù)配置312.2.2.1對(duì)對(duì) MATLAB 編譯器編譯器應(yīng)用程序應(yīng)用程序 mex 的設(shè)置的設(shè)置圖 12.2.2.1-1 為產(chǎn)生 MEX 文件所產(chǎn)生的配置屏1圖 12
6、.2.2.1-2 為產(chǎn)生 MEX 文件所產(chǎn)生的配置屏212.2.2.2配置正確性配置正確性的驗(yàn)證的驗(yàn)證(1)mex 應(yīng)用應(yīng)用程序的驗(yàn)證程序的驗(yàn)證4cd d:mywork%把用戶(hù)目錄把用戶(hù)目錄指定為當(dāng)前指定為當(dāng)前目錄目錄mex my_yprime.c%由由 my_yprime.c 文件生成文件生成my_yprime.dll 文件文件my_yprime(1,1:4)%運(yùn)行運(yùn)行 my_yprime.dll 文件文件which my_yprime%獲得獲得 my_yprime.dll 文件文件的位置信息的位置信息 ans = 2.0000 8.9685 4.0000 -1.0947d:myworkmy
7、_yprime.dll (2)在)在 MATLAB 命令窗命令窗中驗(yàn)證中驗(yàn)證 mcc 應(yīng)用程序應(yīng)用程序mcc -x my_yprime_m%my_yprime_m(1,1:4)which my_yprime_m ans = 2.0000 8.9685 4.0000 -1.0947d:myworkmy_yprime_m.dll (3)在)在 DOS 提示提示符后驗(yàn)證符后驗(yàn)證 mex、mcc 應(yīng)用應(yīng)用程序程序圖 12.2.2.2-1 在 DOS 狀態(tài)下驗(yàn)證編譯指令12.2.3為產(chǎn)生獨(dú)立為產(chǎn)生獨(dú)立外部應(yīng)用程外部應(yīng)用程序進(jìn)行預(yù)配序進(jìn)行預(yù)配置置12.2.3.1對(duì)對(duì) MATLAB 編譯器編譯器mbuild
8、 應(yīng)用程序應(yīng)用程序的設(shè)置(的設(shè)置(2.0 版)版)圖 12.2.3.1-1 為產(chǎn)生獨(dú)立外部應(yīng)用程序所產(chǎn)生的配置屏 15圖 12.2.3.1-2 為產(chǎn)生獨(dú)立外部應(yīng)用程序所產(chǎn)生的配置屏 212.2.3.2對(duì)對(duì) MATLAB 編譯器編譯器mbuild 應(yīng)用程序應(yīng)用程序的設(shè)置(的設(shè)置(1.2 版)版)12.2.3.3配置正確性配置正確性的驗(yàn)證的驗(yàn)證(1)mbuild 應(yīng)用程序應(yīng)用程序的驗(yàn)證的驗(yàn)證cd d:mywork%把用戶(hù)目錄把用戶(hù)目錄指定為當(dāng)前指定為當(dāng)前目錄目錄mbuild my_ex1.c%在在 d:mywork 下生成下生成 my_ex1.exe 文件文件圖 12.2.3.2-1 在 DOS
9、窗口運(yùn)行驗(yàn)證程序 my_ex1.exe 所得的結(jié)果(2)mcc 應(yīng)用應(yīng)用程序的驗(yàn)證程序的驗(yàn)證mcc -p my_hello.m % 6圖 12.2.3.2-2 在 DOS 窗口運(yùn)行驗(yàn)證程序 my_hello.exe 所得的結(jié)果(3)在)在 DOS 狀狀態(tài)下驗(yàn)證態(tài)下驗(yàn)證 mbuild、mcc 工作工作正確性正確性圖 12.2.3.2-3 在 DOS 狀態(tài)驗(yàn)證編譯指令12.3MATLAB 編譯器使編譯器使用入門(mén)用入門(mén)12.3.1由由 M 文件創(chuàng)文件創(chuàng)建建 C MEX 文件文件的入門(mén)算例的入門(mén)算例【例 12.3.1-1】先編寫(xiě) M 文件,然后生成相應(yīng)的 MEX文件。該文件用以判斷方陣是否奇異。cd
10、d:mywork (1)在)在 MATLAB 的編輯的編輯器中,編寫(xiě)下面的器中,編寫(xiě)下面的函數(shù)文件函數(shù)文件 exm1.m 。exm1.mfunction y=exm1(A)m,n=size(A);if m=n;error(An input matrix should be n-by-n.)endr=rank(A);if r=mdisp(This matrix is nonsigular)elsedisp(This matrix is sigular)end(2)把該函數(shù)文)把該函數(shù)文件存放于用件存放于用戶(hù)目錄戶(hù)目錄 d:mywork 下。下。7(3)在)在 MATLAB 命令窗命令窗中,運(yùn)行以
11、下指中,運(yùn)行以下指令對(duì)令對(duì) exm1.m 進(jìn)行編譯進(jìn)行編譯。 mcc -x exm1 %編譯編譯 m 文件文件。 (4)調(diào)用)調(diào)用 MEX文件文件 exm1.dll 進(jìn)行計(jì)算進(jìn)行計(jì)算A=1,0,1;2,1,0;4,1,4 exm1(A) %調(diào)用調(diào)用 exm1 來(lái)判斷矩來(lái)判斷矩陣陣 A 是否奇是否奇異。異。 which exm1 %查詢(xún)所調(diào)用查詢(xún)所調(diào)用的的 exm1的路徑和全的路徑和全稱(chēng)。稱(chēng)。 A = 1 0 1 2 1 0 4 1 4This matrix is nonsigulard:myworkexm1.dll 12.3.2由由 M 文件創(chuàng)文件創(chuàng)建外部應(yīng)用建外部應(yīng)用程序的入門(mén)程序的入門(mén)算例
12、算例【例 12.3.2-1】建立一個(gè)脫離 MATLAB 環(huán)境,可獨(dú)立運(yùn)行的外部程序。該程序的功能是:對(duì)于給定矩陣 A,如果存在 S使得 S-1AS=,則要求出一個(gè) S,否則給出信息說(shuō)明所給的矩陣 A 不能對(duì)角化。(1)編寫(xiě)兩個(gè))編寫(xiě)兩個(gè) M函數(shù)文件:函數(shù)文件:exm2.m 和和 exm2_f.m 。(第一個(gè)文件。(第一個(gè)文件是主文件。)是主文件。)exm2.mfunction exm2A=4,0,0;0,3,1;0,1,3;S=exm2_f(A)exm2_f.mfunction S=exm2_f(A)m,n=size(A);if m=nerror(輸入矩陣應(yīng)是方陣!);end;e=eig(A)
13、;%檢查輸入矩陣的特征值是否各異same=0;for i=1:m-1 for j=(i+1):m if e(j)=e(i) same=1; end endend% A可以對(duì)角化的條件是A具有互異特征值或者A為埃爾米特矩陣。if any(any(A-A)&(same=1) error(矩陣無(wú)法對(duì)角化!);endv,d=eig(A);S=v;(2)把這兩個(gè)函)把這兩個(gè)函數(shù)文件存放數(shù)文件存放于用戶(hù)自己于用戶(hù)自己的目錄的目錄 d:mywork,并在,并在 MATLAB 中運(yùn)中運(yùn)行檢驗(yàn)。行檢驗(yàn)。exm2 S = 1.0000 0 0 0 0.7071 0.7071 0 0.7071 -0.7071 8(
14、3)生成獨(dú)立的)生成獨(dú)立的外部可執(zhí)行外部可執(zhí)行程序。在程序。在 MATLAB 指令窗指令窗中,運(yùn)行如下指中,運(yùn)行如下指令令mcc -m exm2 exm2_f (4)打開(kāi))打開(kāi) DOS窗口,在窗口,在 d:mywork 目錄下,運(yùn)行目錄下,運(yùn)行 exm2.exe,得如圖,得如圖 12.3.2-1 的結(jié)果。的結(jié)果。圖 12.3.2-1 在 DOS 窗口運(yùn)行生成程序 exm2.exe 所得的結(jié)果12.4編譯指令編譯指令 mcc 簡(jiǎn)介簡(jiǎn)介12.4.1 mcc 的基的基本調(diào)用格式本調(diào)用格式12.4.2 mcc 的選的選項(xiàng)標(biāo)志項(xiàng)標(biāo)志12.4.2.1編譯器編譯器 2.0 選項(xiàng)簡(jiǎn)介選項(xiàng)簡(jiǎn)介12.4.2.2在
15、命令行中在命令行中指定選項(xiàng)標(biāo)指定選項(xiàng)標(biāo)志志【例 12.4.2.2-1】假設(shè)當(dāng)前目錄上存在一個(gè)文件 exm3.m ,現(xiàn)要求利用M 編譯器將它轉(zhuǎn)換為C+語(yǔ)言的源碼文件,并要求將原M 文件中那注釋區(qū)的內(nèi)容作為所得C+源碼文件的注釋。mcc -t -L Cpp -A annotation:comments exm3%得到得到 exm3.cpp 和和 exm3.hpp 12.4.2.3設(shè)置缺省選設(shè)置缺省選項(xiàng)項(xiàng)【例 12.4.2.3-1】假設(shè)已在 d:mywork下創(chuàng)建了文本文件 mccstartup (請(qǐng)注意:該文件不可帶擴(kuò)展名),該文件的內(nèi)容包括若干編譯指令的選項(xiàng)?,F(xiàn)要求利用該文件,從 exm3.m
16、出發(fā)得到C+語(yǔ)言的源文件。cd d:mywork%將將 d:mywork 設(shè)為當(dāng)前設(shè)為當(dāng)前工作目錄工作目錄type mccstartup%打印文本文打印文本文件件 mccstartup 的內(nèi)容的內(nèi)容 -t -L C -A annotation:none !copy mccstartup h:y9857temp%將將 mccstartup 轉(zhuǎn)移到臨轉(zhuǎn)移到臨時(shí)目錄下時(shí)目錄下!copy exm3.m h:y9857temp%將待編譯將待編譯 M源碼轉(zhuǎn)移到源碼轉(zhuǎn)移到臨時(shí)目錄下臨時(shí)目錄下!del mccstartup ,%刪除刪除 mccstartup!del exm3*%刪除原有的刪除原有的編譯后文件
17、編譯后文件dir mccstartup%當(dāng)前目錄下當(dāng)前目錄下是否含有是否含有 mccstartupdir h:matlab53binmccstartup%bin 下是下是否含該文件否含該文件dir exm3*%當(dāng)前目錄下當(dāng)前目錄下是否含有是否含有 exm3* 1 file(s) copied 9 1 file(s) copied mccstartup not found.h:matlab53binmccstartup not found.exm3* not found. !copy h:y9857tempexm3.m d:myworkmcc -L Cpp exm3% 1 file(s) cop
18、ied ? Error: The options specified will not generate any output files.Please use one of the following options to generate an executable output file: -x (generates a MEX-file executable using C) -m (generates a stand-alone executable using C) -p (generates a stand-alone executable using C+) -S (gener
19、ates a Simulink MEX S-function using C)Or type mcc -? for more usage information.Error in = H:MATLAB53toolboxcompilermcc.dll !copy h:y9857tempmccstartup d:mywork%將將 mccstartup 拷貝到當(dāng)拷貝到當(dāng)前目錄前目錄mcc -L Cpp exm3%dir exm3*%!del mccstartup 1 file(s) copied exm3.cpp exm3.hpp exm3.m 12.4.2.4編譯器編譯器 1.2 選項(xiàng)簡(jiǎn)介選項(xiàng)簡(jiǎn)
20、介【例 12.4.2.4-1】要求利用 1.2 版編輯器對(duì)文件 exm4.m 進(jìn)行操作,目標(biāo)是獲得C MEX 文件和 C 語(yǔ)言的獨(dú)立可執(zhí)行文件。(1)在 5.3 版 MATLAB 指令窗中的執(zhí)行指令mcc -V1.2 exm4mcc -V1.2 -em exm4(2)為完成同樣任務(wù)在 5.2 版指令窗中的執(zhí)行指令mcc exm4mcc -em exm4 12.5編譯文件的編譯文件的性能優(yōu)化性能優(yōu)化12.5.1優(yōu)化原優(yōu)化原 M 文文件的性能件的性能12.5.1.1提高向量化提高向量化程度程度【例 12.5.1.1-1】本例演示:M 文件與 MEX 文件、向量運(yùn)算與循環(huán)運(yùn)算的速度比較。(1)編寫(xiě)如
21、下兩)編寫(xiě)如下兩類(lèi)函數(shù)類(lèi)函數(shù) M 文文件。件。function y=sa(x)x=x+(x=0)*eps;y=sin(x)./x;function y=saf(x)n=length(x);for k=1:nx(k)=x(k)+(x(k)=0)*eps;y(k)=sin(x(k)/x(k);end10(2)在)在 MATLAB 指令窗指令窗中,對(duì)中,對(duì) sa_mex.m 和和 saf_mex.m 進(jìn)行編譯進(jìn)行編譯。cd d:myworkmcc -x sa_mex%mcc -x saf_mex%(3)運(yùn)行四個(gè)文)運(yùn)行四個(gè)文件,記錄運(yùn)算時(shí)件,記錄運(yùn)算時(shí)間間t=-2*pi:pi/500:2*pi;ti
22、c;sa(t);tt(1)=toc;tic;saf(t);tt(2)=toc;tic;sa_mex(t);tt(3)=toc;tic;y=saf_mex(t);tt(4)=toc;(4)結(jié)果顯示和)結(jié)果顯示和比較比較plot(t,y,r-);grid 2 4 6 8 圖 12.5.1.1-1disp(運(yùn)算速度比運(yùn)算速度比較較)disp( sa.m saf.m sa_mex.dll saf_mex.dll)disp(tt) 運(yùn)算速度比較 sa.m saf.m sa_mex.dll saf_mex.dll 0.3300 2.9100 0.3800 2.5800 12.5.1.2對(duì)數(shù)組進(jìn)行對(duì)數(shù)組進(jìn)行
23、預(yù)置預(yù)置【例 12.5.1.2-1】以上節(jié)例 12.5.1.1-1 為基礎(chǔ)。saf.m 文件中數(shù)組變量 x 和y 的大小隨循環(huán)進(jìn)行而增長(zhǎng),這大大減慢了運(yùn)算速度。本例演示:在循環(huán)前對(duì)進(jìn)行變量預(yù)置的好處。(1)編寫(xiě)如下文)編寫(xiě)如下文件,以件,以 saf_pro.m 和和 saf_pro_mex.m 為名,將之保存在為名,將之保存在當(dāng)前目錄下當(dāng)前目錄下。function y=saf(x)n=length(x);x=zeros(1,n);y=zeros(1,n);for k=1:nx(k)=x(k)+(x(k)=0)*eps;y(k)=sin(x(k)/x(k);end(2)產(chǎn)生編譯文)產(chǎn)生編譯文件件
24、 mcc -x saf_mex mcc -x saf_pro_mex (3)運(yùn)行)運(yùn)行11t=-2*pi:pi/500:2*pi;tic;saf(t);tt(1)=toc;tic;saf_pro(t);tt(2)=toc;tic;saf_mex(t);tt(3)=toc;tic;y=saf_pro_mex(t);tt(4)=toc;(4)速度比較)速度比較disp(運(yùn)算速度比運(yùn)算速度比較較)disp( saf.m saf_pro.m saf_mex.dll saf_pro_mex.dll)disp(tt) 運(yùn)算速度比較 saf.m saf_pro.m saf_mex.dll saf_pro_m
25、ex.dll 2.8600 0.6600 2.6300 0.4400 12.5.1.3避免調(diào)用復(fù)避免調(diào)用復(fù)數(shù)域函數(shù)數(shù)域函數(shù)12.5.2利用利用 mcc(-V1.2)的優(yōu)化性能的優(yōu)化性能12.5.2.1編譯時(shí)指定編譯時(shí)指定優(yōu)化選項(xiàng)優(yōu)化選項(xiàng)-r 和和-i【例 12.5.2.1-1】求如下非線(xiàn)性差分方程組在 10000 個(gè)點(diǎn)上的值。觀(guān)察原 M 文件、無(wú)選項(xiàng)和有選項(xiàng) MEX文件運(yùn)行速度的不同。0, 03 . 04 . 1100121yxxyxyxkkkkk(1)利用)利用 MATLAB 編輯編輯窗口編寫(xiě)如窗口編寫(xiě)如下下 M 函數(shù)文函數(shù)文件件function x,y=m_henon(n)x=zeros(
26、1,n);y=zeros(1,n);for k=1:n-1 x(k+1)=1+y(k)-1.4*x(k)2; y(k+1)=0.3*x(k);end(2)對(duì))對(duì) M 文件分文件分別選用編譯別選用編譯器器 2.0 和和 1.2 進(jìn)行編譯進(jìn)行編譯如下。如下。cd d:myworkmcc -x mex20_henon%用用 2.0 編譯器產(chǎn)編譯器產(chǎn)生普通生普通 MEX 文件文件mcc -V1.2 -ri ri_mex12_henon%用用 1.2 編輯器產(chǎn)編輯器產(chǎn)生優(yōu)化的生優(yōu)化的 MEX 文件文件(3)計(jì)算各文件)計(jì)算各文件運(yùn)行時(shí)間費(fèi)運(yùn)行時(shí)間費(fèi)用的相對(duì)值用的相對(duì)值。n=10000;t=zeros(3
27、,2);for k=1:2%運(yùn)行兩次,以做比較運(yùn)行兩次,以做比較tic;m_henon(n);t(1,k)=toc;tic;mex20_henon(n);t(2,k)=toc;tic;ri_mex12_henon(n);t(3,k)=toc;endt=t/t(1,1); (4)顯示比較結(jié))顯示比較結(jié)果果filename= m_henon; mex20_henon;ri_mex12_henon;disp( 各文件運(yùn)行各文件運(yùn)行開(kāi)銷(xiāo)的相對(duì)開(kāi)銷(xiāo)的相對(duì)值比較表值比較表)disp(blanks(1)%產(chǎn)生一個(gè)空產(chǎn)生一個(gè)空行行disp( 文件名文件名 第一次運(yùn)行第一次運(yùn)行 第二次運(yùn)行第二次運(yùn)行)disp(
28、filename blanks(3) blanks(3) num2str(t)12%blanks 產(chǎn)生兩個(gè)產(chǎn)生兩個(gè)空列空列 各文件運(yùn)行開(kāi)銷(xiāo)的相對(duì)值比較表 文件名 第一次運(yùn)行 第二次運(yùn)行 m_henon 1 0.78086 mex20_henon 0.69753 0.59259ri_mex12_henon 0.015432 0 12.5.2.2利用變量類(lèi)利用變量類(lèi)型申明優(yōu)化型申明優(yōu)化性能性能12.5.2.3利用編譯注利用編譯注記優(yōu)化性能記優(yōu)化性能【例 12.5.2.3-1】編譯注記 %#ivdep的應(yīng)用舉例。(1)編寫(xiě)如下兩)編寫(xiě)如下兩個(gè)函數(shù)個(gè)函數(shù) M 文文件,并存放在件,并存放在 d:mywo
29、rk 目錄上。目錄上。ivdep0.mfunction A=ivdep0( )A=1:10;A(5:9)=A(3:7);ivdep.mfunction A=ivdep( )A=1:10;%#ivdepA(5:9)=A(3:7);(2)分別對(duì)這兩)分別對(duì)這兩個(gè)文件進(jìn)行個(gè)文件進(jìn)行編譯編譯。cd d:myworkmcc -V1.2 ivdep0mcc -V1.2 ivdep(3)在)在 MATLAB 指令窗指令窗中運(yùn)行以下中運(yùn)行以下指令。指令。tic;A0=ivdep0;t0=toc;tic;A=ivdep;t=toc/t0;(4)顯示結(jié)果)顯示結(jié)果。A0,Adisp(使用編譯注使用編譯注記記%#i
30、vdep后的運(yùn)用時(shí)后的運(yùn)用時(shí)間僅為原來(lái)間僅為原來(lái)的的 num2str(t) A0 = 1 2 3 4 3 4 5 6 7 10A = 1 2 3 4 3 4 3 4 3 10使用編譯注記%#ivdep后的運(yùn)用時(shí)間僅為原來(lái)的 0.15152 12.6創(chuàng)建獨(dú)立的創(chuàng)建獨(dú)立的外部應(yīng)用程外部應(yīng)用程序序12.6.1獨(dú)立外部程獨(dú)立外部程序的工作特序的工作特點(diǎn)和創(chuàng)建過(guò)點(diǎn)和創(chuàng)建過(guò)程程1312.6.1.1獨(dú)立外部程獨(dú)立外部程序與序與 MEX文件的不同文件的不同工作特點(diǎn)工作特點(diǎn)12.6.1.2獨(dú)立外部程獨(dú)立外部程序創(chuàng)建過(guò)程序創(chuàng)建過(guò)程說(shuō)明說(shuō)明12.6.2關(guān)于指令關(guān)于指令 mbuild12.6.3借助編譯指借助編譯指令
31、令 mcc 創(chuàng)創(chuàng)建獨(dú)立應(yīng)用建獨(dú)立應(yīng)用程序程序12.6.3.1創(chuàng)建獨(dú)立應(yīng)創(chuàng)建獨(dú)立應(yīng)用程序時(shí)用程序時(shí) mcc 的使用的使用格式和常用格式和常用選項(xiàng)標(biāo)志選項(xiàng)標(biāo)志12.6.3.2由全由全 M 源文源文件產(chǎn)生件產(chǎn)生 EXE 應(yīng)用程序應(yīng)用程序【例 12.6.3.2-1】創(chuàng)建一個(gè)適應(yīng)“超定”、“恰定”、“欠定”線(xiàn)性方程求解的示例性應(yīng)用程序。(1)編寫(xiě)以下兩)編寫(xiě)以下兩個(gè)個(gè) M 函數(shù)文函數(shù)文件件。LLS.mfunction LLS()Ae=5;%Av=2;%A,b=LLSDATA(Ae,Av);x=Ab;%以下都是為獲得較清晰的顯示而編寫(xiě)S=恰定;if AeAv S=超定;elseif AeAe A=WA(1
32、:Ae,:);end14b=ones(Ae,1);(2)對(duì)存放在)對(duì)存放在 d:mywork 上的這兩上的這兩個(gè)文件進(jìn)行個(gè)文件進(jìn)行編譯編譯。圖 12.6.3.2-1 獨(dú)立應(yīng)用程序 LLS.exe 解超定方程示例(3)把)把 LLS.m 文件第文件第 2、3 行改為行改為 Ae=3;Av=5,重新編譯、運(yùn)行,結(jié)果見(jiàn)圖,重新編譯、運(yùn)行,結(jié)果見(jiàn)圖 12.6.3.2-2。圖 12.6.3.2-2 獨(dú)立應(yīng)用程序 LLS.exe 解欠定方程示例12.6.3.3由含由含 feval 指令的指令的M 文件生成文件生成EXE 文件文件【例 12.6.3.3-1】采用編譯指定法生成一定法生成一個(gè)可以計(jì)算方陣各種特
33、征量的獨(dú)立外部應(yīng)用程序。(1)編寫(xiě)函數(shù))編寫(xiě)函數(shù) M文件:文件:mat_feat.m 和和 my_det.m 。mat_feat.mfunction mat_feat(f_name)%disp(被分析矩陣)%A=magic(4)%給定的被分析矩陣N=8;%為字符串比較而設(shè)的字符串長(zhǎng)度 8 。n=size(f_name,2);%測(cè)量輸入字符串的長(zhǎng)度f(wàn)f_name=f_name blanks(N-n);%給輸入字符串補(bǔ)充空字符,使長(zhǎng)度為8。if ff_name=my_det blanks(2) disp(矩陣 A 的行列式值 = )15elseif ff_name=rank blanks(4) d
34、isp(矩陣 A 的秩 = )elseif ff_name=norm blanks(4) disp(矩陣 A 的2-范數(shù) = )elseif ff_name=cond blanks(4) disp(矩陣 A 的條件數(shù) = )elseif ff_name=eig blanks(5) disp(矩陣 A 的特征值 = )elseif ff_name=svd blanks(5) disp(矩陣 A 的奇異值 = )else disp(您輸入的指令,或者不是本函數(shù)文件所能解決的,或是錯(cuò)誤的!)endd=feval(f_name,A);disp(d)my_det.mfunction d=my_det(A
35、)d=det(A);(2)創(chuàng)建計(jì)算給)創(chuàng)建計(jì)算給定矩陣秩的定矩陣秩的EXE 文件文件mcc -V1.2 -pm mat_feat f_name=rank(3)所生成的)所生成的 mat_feat.exe 可脫可脫離離 MATLAB 而獨(dú)立而獨(dú)立運(yùn)行。運(yùn)行。!mat_feat WARNING: Reference to uninitialized variable 被分析矩陣 16 2 3 13 ; 5 11 10 8 ; 9 7 6 12 ; 4 14 15 1 矩陣 A 的秩 = 3 (4)求矩陣行列)求矩陣行列式值的式值的 EXE 文件創(chuàng)建文件創(chuàng)建指令、驗(yàn)證運(yùn)行指指令、驗(yàn)證運(yùn)行指令、及運(yùn)行
36、結(jié)果令、及運(yùn)行結(jié)果。mcc -V1.2 p m mat_feat f_name=my_det!mat_feat 被分析矩陣 16 2 3 13 ; 5 11 10 8 ; 9 7 6 12 ; 4 14 15 1 矩陣 A 的行列式值 = 0 【例 12.6.3.3-2】采用編譯注記法生成一記法生成一個(gè)可以計(jì)算方陣行列式值的獨(dú)立外部應(yīng)用程序。(1)假定想創(chuàng)建)假定想創(chuàng)建一個(gè)計(jì)算矩一個(gè)計(jì)算矩陣行列式值陣行列式值的獨(dú)立應(yīng)用的獨(dú)立應(yīng)用程序,那么只要在程序,那么只要在上例上例 mat_feat.m 文文件的第件的第和和行之間插入行之間插入以下兩行指以下兩行指令,而令,而 M 文件的文件的其余部分都其余
37、部分都不必改動(dòng)。不必改動(dòng)。%#function my_detf_name=my_det;(2)用以下指令)用以下指令對(duì)對(duì) M 文件進(jìn)文件進(jìn)行編譯,便可得到正行編譯,便可得到正確的確的 EXE文件。文件。16mcc p mat_feat【例 12.6.3.3-3】當(dāng) feval 調(diào)用的是MATLAB C+庫(kù)中的函數(shù)時(shí),可以采用更簡(jiǎn)單的 feval輸入宗量直接賦值法,實(shí)現(xiàn) EXE文件的創(chuàng)建。如創(chuàng)建一個(gè)計(jì)算方陣特征值的獨(dú)立外部應(yīng)用程序。(1)只要在例)只要在例 12.6.3.3-1 的的 mat_feat.m 文件第文件第和和行中間插入行中間插入如下一條指如下一條指令即可。令即可。f_name=ei
38、g;(2)用以下指令)用以下指令對(duì)對(duì) M 文件進(jìn)文件進(jìn)行編譯,便可得到正行編譯,便可得到正確的確的 EXE文件。文件。mcc p mat_feat(3)以下是運(yùn)行)以下是運(yùn)行指令和結(jié)果指令和結(jié)果!mat_feat 被分析矩陣 A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 矩陣 A 的特征值 = 34.0000 8.9443 -8.9443 -0.0000 12.6.3.4由含泛函指由含泛函指令的令的 M 文件文件生成生成 EXE程序程序【例 12.6.3.4-1】創(chuàng)建一個(gè)求一元函數(shù)局部最小值的獨(dú)立外部應(yīng)用程序。)sin(16 . 0 xxexy (1)為
39、了讓讀者)為了讓讀者了解函數(shù)了解函數(shù),對(duì)將生成的,對(duì)將生成的EXE 文件文件的運(yùn)行結(jié)果的運(yùn)行結(jié)果正確性做正確性做)sin(16 . 0 xxexy 直直觀(guān)的判斷。先運(yùn)行以下觀(guān)的判斷。先運(yùn)行以下指令繪制如指令繪制如圖圖 12.6.3.4-1 所示的函所示的函數(shù)曲線(xiàn)。數(shù)曲線(xiàn)。xx=0:0.01:5;yy=SAA(xx);%SAA.m 文件見(jiàn)本文件見(jiàn)本例第例第 2 步步plot(xx,yy)x0=2;x=fmins(SAA,x0);y=SAA(x);plot(xx,yy,b-,x,y,r.,MarkerSize, 20),grid 17012345 圖12.6.3.4-1 函數(shù)在 2 附近的局部最小
40、值)sin(16 . 0 xxexy (2)編制以下)編制以下 M函數(shù)文件,并存放在用函數(shù)文件,并存放在用戶(hù)自己的工戶(hù)自己的工作目錄上。作目錄上。fcpp.mfunction fcpp(fun)%#function SAA%被泛函調(diào)用函數(shù)的編譯注記是必須的。fun=SAA;%對(duì)泛函指令中第一輸入宗量具體化也是必須的。xs=1;x=fmins(fun,xs);y=feval(fun,x);disp(blanks(2)disp(獨(dú)立外部程序 fcpp.exe 運(yùn)行結(jié)果顯示)disp(blanks(2)ss=sin(exp(0.6x)/x 函數(shù)在 x = num2str(xs) 附近達(dá)最小值的坐標(biāo)為
41、 ;disp(ss);disp(blanks(1);disp( num2str(x) , num2str(y) )SAA.mfunction y=SAA(x)x=x+(x=0)*eps;y=sin(x.*exp(0.6*x)./x;(3)在)在 MATLAB 指令窗指令窗或或 DOS 環(huán)環(huán)境中運(yùn)行以境中運(yùn)行以下編譯指令下編譯指令,在用戶(hù)目錄,在用戶(hù)目錄上產(chǎn)生上產(chǎn)生 fcpp.exe 。mcc p fcpp(4)在)在 DOS 中中運(yùn)行運(yùn)行 fcpp.exe 的操的操作情況和結(jié)作情況和結(jié)果如圖果如圖 12.6.3.4-2。18圖12.6.3.4-2 生成的獨(dú)立程序 fcpp.exe 在 DOS
42、中的運(yùn)行結(jié)果12.6.3.5由由 C/C+源碼和源碼和 M 源源碼文件混合碼文件混合生成生成 EXE應(yīng)用文件應(yīng)用文件【例 12.6.3.5-1】主程序?yàn)?C源碼文件,被調(diào)用程序?yàn)?M 文件。(1)主文件)主文件 fileinc.c 和被調(diào)用的和被調(diào)用的mrank.m 文件如下文件如下fileinc.c#include #include matlab.h#include templib.hint main(int argc, char *argv)int n ;mxArray *r;mxArray *N;TemplibInitialize();n = 5;N=mxCreateDoubleMatrix(1,1,mxREAL);*mxGetPr(N)=n;r = mlfMrank(N);mlfPrintMatrix(r);mxDestroyArray(r);mxDestroyArray(N);TemplibTerminate();return 0;mrank.mfunction
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 10吃飯有講究(說(shuō)課稿)-部編版道德與法治一年級(jí)上冊(cè)
- 7 湯姆·索亞歷險(xiǎn)記(節(jié)選)說(shuō)課稿-2023-2024學(xué)年六年級(jí)下冊(cè)語(yǔ)文統(tǒng)編版
- 2025集體土地房屋轉(zhuǎn)讓合同
- Unit 2 My week PB Let's talk (說(shuō)課稿)-2024-2025學(xué)年人教PEP版英語(yǔ)五年級(jí)上冊(cè)001
- 2025產(chǎn)品銷(xiāo)售咨詢(xún)服務(wù)合同(中介撮合客戶(hù))
- 2025合同模板車(chē)位租賃合同范本
- 10吃飯有講究 說(shuō)課稿-2024-2025學(xué)年道德與法治一年級(jí)上冊(cè)統(tǒng)編版001
- 個(gè)人汽車(chē)信貸合同范例
- 鄉(xiāng)村道路改造雨季施工方案
- 重慶不銹鋼支撐施工方案
- 呆死帳的發(fā)生與預(yù)防課件
- 10000中國(guó)普通人名大全
- 導(dǎo)數(shù)常見(jiàn)函數(shù)圖像
- 起重機(jī)械安裝吊裝危險(xiǎn)源辨識(shí)、風(fēng)險(xiǎn)評(píng)價(jià)表
- 華北理工兒童口腔醫(yī)學(xué)教案06兒童咬合誘導(dǎo)
- 中國(guó)建筑項(xiàng)目管理表格
- 高一3班第一次月考總結(jié)班會(huì)課件
- 公共政策分析導(dǎo)論教學(xué)課件匯總完整版電子教案
- 我國(guó)油菜生產(chǎn)機(jī)械化技術(shù)(-119)
- 大跨度斜拉橋上部結(jié)構(gòu)施工技術(shù)(圖文并茂)
- 論人口模型論文計(jì)劃生育政策調(diào)整對(duì)人口數(shù)量結(jié)構(gòu)及其影響
評(píng)論
0/150
提交評(píng)論