MATLAB外部程序接口技術(shù)_第1頁
MATLAB外部程序接口技術(shù)_第2頁
MATLAB外部程序接口技術(shù)_第3頁
MATLAB外部程序接口技術(shù)_第4頁
MATLAB外部程序接口技術(shù)_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第十一章 MATLAB外部程序接口技術(shù)11.1 M編譯器的功用和前提準(zhǔn)備11.2 創(chuàng)建MEX文件11.2.1 MEX文件編譯的驗證【例11.2-1】驗證mex應(yīng)用程序把C碼文件編譯成MEX文件的正確性。(1)先將matlabexternexamplesmex目錄下的yprime.c文件復(fù)制到用戶自己的工作目錄(比方d:mywork),然后將此文件名改為my_yprime.c。(2)運行以下指令cd d:myworkmex my_yprime.cmy_yprime(1,1:4)which my_yprime ans = 2.0000 8.9685 4.0000 -1.0947d:myworkmy

2、_yprime.dll 說明l 應(yīng)該指出:mex的編譯操作也可以象圖11.2-1那樣在DOS環(huán)境中進(jìn)行,結(jié)果相同。圖 11.2-1 在DOS狀態(tài)下進(jìn)行編譯操作【例11.2-2】驗證mcc應(yīng)用程序把M碼文件編譯成MEX文件的正確性。(1)先將matlabexternexamplesmex目錄下的yprime.m文件復(fù)制到用戶自己的工作目錄(比方d:mywork),然后將此文件名改為my_yprime_m.m。(2)運行以下指令cd d:mywork%把用戶目錄指定為當(dāng)前目錄mcc -x my_yprime_mmy_yprime_m(1,1:4)which my_yprime_m ans = 2.

3、0000 8.9685 4.0000 -1.0947d:myworkmy_yprime_m.dll 11.2.2 由M文件創(chuàng)建C MEX文件的算例【例11.2-3】先編寫一個“判斷方陣是否奇異”的M文件,然后由該M文件生成相應(yīng)的MEX文件。(1)在MATLAB的編輯器中,編寫下面的函數(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

4、')elsedisp('This matrix is sigular')end(2)把該函數(shù)文件存放于用戶目錄d:mywork下。(3)在MATLAB命令窗中,運行以下指令對exm1.m進(jìn)行編譯。 mcc -x exm1 %編譯m文件。 (4)調(diào)用MEX文件exm1.dll 進(jìn)行計算A=1,0,1;2,1,0;4,1,4 exm1(A) which exm1 A = 1 0 1 2 1 0 4 1 4This matrix is nonsigulard:myworkexm1.dll 【例11.2-4】產(chǎn)生一個繪圓的MEX文件。本例演示:(A)M腳本文件不能被編譯;(B)

5、如何把腳本文件改寫成函數(shù)文件;(C)改寫后的M函數(shù)文件可被正確編譯。(1)原始的繪圓腳本文件circle.mclf;r=2;t=0:pi/100:2*pi;x=r*exp(i*t);plot(x,'r*');axis('square')(2)對該腳本文件直接編譯將因錯誤而失敗mcc -x circle ? Error: File "circle" is a Script M-file and cannot be compiled with the current Compiler.Error in => H:MATLAB53toolbo

6、xcompilermcc.dll (3)把腳本文件改寫成函數(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)再對circle_f.m進(jìn)行編譯,將順利通過mcc -x circle_f (5)運行生成的MEX文件circle_f.dllcircle_f(0.5) which circle_f d:myworkcircle_f.dll圖11.2-2 MEX文件circle_f.dll所畫的圓11.3 創(chuàng)建獨立的外部應(yīng)用程序1

7、1.3.1 M編譯器的預(yù)配置 一 對M編譯器mbuild應(yīng)用程序的設(shè)置 二 配置正確性的驗證【例11.3-1】驗證mbuild應(yīng)用程序把C碼文件編譯成EXE文件的正確性。(1)先將matlabexternexamplescmath 目錄下的ex1.c文件復(fù)制到用戶自己的工作目錄(比方d:mywork),然后將此文件名改為my_ex1.c。(2)在MATLAB指令窗中運行以下指令,將在d:mywork目錄下產(chǎn)生my_ex1.exe。cd d:myworkmbuild my_ex1.c(3)打開Windows的DOS窗口,并使d:mywork成為當(dāng)前目錄,運行my_ex1.exe,若得到結(jié)果與圖1

8、1.3-1相同,就表示mbuild應(yīng)用程序工作正常。圖 11.3-1 在DOS窗口運行驗證程序my_ex1.exe所得的結(jié)果【例11.3-2】驗證mcc應(yīng)用程序把M文件編譯成EXE文件的正確性。(1)先將matlabexternexamplescompiler目錄下的hello.m文件復(fù)制到用戶自己的工作目錄(比方d:mywork),然后將此文件名改為my_hello.m。(2)在MATLAB指令窗中運行以下指令,便在d:mywork目錄下產(chǎn)生my_hello.exe。mcc -p my_hello.m (3)打開Windows的DOS窗口,并使d:mywork成為當(dāng)前目錄,運行my_hell

9、o.exe,若得到結(jié)果與圖11.3-2相同,就表示MATLAB編譯器工作正常。圖11.3-2 在DOS窗口運行驗證程序my_hello.exe所得的結(jié)果【例11.3-3】驗證mbuild、mcc工作正確性也可以在DOS狀態(tài)下進(jìn)行。(1)為確保驗證過程的可信度,首先刪除d:mywork目錄上的所有文件。(2)將MATLAB自帶的ex1.c和hello.m文件復(fù)制到用戶自己的工作目錄d:mywork ,并將它們分別改名為my_ex1.c和my_hello.m 。(3)然后打開Windows的DOS窗口,進(jìn)行如圖11.3-3的操作。(4)假如所得結(jié)果與圖11.3-3相同,則表明工作正常。圖 11.3

10、-3 在DOS狀態(tài)驗證編譯指令11.3.2 獨立外部程序的工作特點和創(chuàng)建過程 一 獨立外部程序與MEX文件的不同工作特點 二 獨立外部程序創(chuàng)建過程說明11.3.3 關(guān)于指令mbuild11.3.4 科學(xué)計算和結(jié)果可視化獨立應(yīng)用程序的創(chuàng)建 一 創(chuàng)建獨立應(yīng)用程序時mcc的使用格式 二 由全M源文件產(chǎn)生EXE科學(xué)計算應(yīng)用程序【例11.3-4】創(chuàng)建一個適應(yīng)“超定”、“恰定”、“欠定”線性方程求解的示例性應(yīng)用程序。(1)編寫以下兩個M函數(shù)文件。LLS.mfunction LLS()Ae=5;Av=2;A,b=LLSDATA(Ae,Av);x=Ab;%以下都是為獲得較清晰的顯示而編寫S='恰定&#

11、39;if Ae>Av S='超定'elseif Ae<Av S='欠定'enddisp('用外部獨立程序求如下' S '方程 Ax=b 的解,其中')cs=blanks(Ae)'ns=fix(Ae/2);As=cs;As(ns)='A'bs=cs;bs(ns)='b'es=cs;es(ns)='='disp(As cs es cs num2str(A) cs cs cs cs cs bs cs es cs num2str(b)disp('方程的解 

12、9;)nxs=fix(Av/2);cxs=blanks(Av)'xs=cxs;xs(nxs)='x'exs=cxs;exs(nxs)='='disp(xs cxs exs cxs num2str(x)LLSDATA.mfunction A,b=LLSDATA(Ae,Av)n=max(Ae,Av);WA=magic(n);A=WA(:,1:Av);if n>Ae A=WA(1:Ae,:);endb=ones(Ae,1);(2)對存放在d:mywork上的這兩個文件進(jìn)行編譯。圖 11.3-4 獨立應(yīng)用程序LLS.exe解超定方程示例(3)把LLS.m文

13、件第2、3行改為Ae=3;Av=5,將文件另存為LLS1.m并重新編譯、運行。mcc -p LLS1 !LLS1 外部獨立程序求欠定方程 Ax=b 解,其中 A = 17 24 1 8 15 b = 1 23 5 7 14 16 1 4 6 13 20 22 1 方程的解 0.013372 x = 0.0063953 0 0 0.041279 三 可視化應(yīng)用程序的產(chǎn)生和使用【例11.3-5】產(chǎn)生一個能繪制類似圖6.3-3所示圖形的C+獨立應(yīng)用程序。(1)將例6.3-3中的代碼加上function“頭”后保存為函數(shù)文件grph.m,function grphX0,Y0,Z0=sphere(30); %產(chǎn)生單位球面的三維坐標(biāo)X=2*X0;Y=2*Y0;Z=2*Z0; %產(chǎn)生半徑為2的球面的三維坐標(biāo)surf(X0,Y0,Z0); %畫單位球面shading interp %采用插補(bǔ)明暗處理hold on,mesh(X,Y,Z),color

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論