提高M(jìn)atlab仿真程序執(zhí)行性能ppt課件_第1頁(yè)
提高M(jìn)atlab仿真程序執(zhí)行性能ppt課件_第2頁(yè)
提高M(jìn)atlab仿真程序執(zhí)行性能ppt課件_第3頁(yè)
提高M(jìn)atlab仿真程序執(zhí)行性能ppt課件_第4頁(yè)
提高M(jìn)atlab仿真程序執(zhí)行性能ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、提高M(jìn)atlab仿真程序執(zhí)行性能正文構(gòu)造背景與意義影響仿真程序性能的要素提高仿真程序性能的建議執(zhí)行速度測(cè)試方法背景與意義Matlab與其他言語(yǔ)的差別:例如對(duì)于C或者C+來(lái)說(shuō),只需算法的思想不變、采用的數(shù)據(jù)構(gòu)造一樣,不同人寫出來(lái)的語(yǔ)句在效率上普通不會(huì)產(chǎn)生太大的差別。所以,對(duì)于C來(lái)說(shuō),程序的好壞普通由算法來(lái)決議。但是,在Matlab中,同樣的算法、同樣的構(gòu)造、同樣的流程,假設(shè)采用的語(yǔ)句不一樣,在效率上就會(huì)大大不同。所以,了解有關(guān)Matlab執(zhí)行效率的內(nèi)容,對(duì)我們的接下來(lái)的仿真實(shí)際會(huì)有很多協(xié)助。影響仿真程序性能的要素很多書上都說(shuō)Matlab是解釋性言語(yǔ),執(zhí)行效率不如C/C+高。這曾令我對(duì)Matlab

2、的執(zhí)行速度失去自信心;然而這句話雖然是正確的,卻非常不全面,導(dǎo)致我們將速度慢的緣由歸咎于工具言語(yǔ)本身;實(shí)踐上,Matlab經(jīng)過(guò)借助混合編程的方法,其執(zhí)行效率與編譯型言語(yǔ)之間的差別曾經(jīng)不是很明顯;大多數(shù)情況下,執(zhí)行效率的低下,是由于我們忽視了一些影響仿真程序性能的要素導(dǎo)致的影響仿真程序性能的要素For-循環(huán)函數(shù)調(diào)用內(nèi)存分配矩陣索引其它影響仿真程序性能的要素For循環(huán)傳統(tǒng)觀念以為for-loop是影響性能的致命環(huán)節(jié),讓我們來(lái)對(duì)此驗(yàn)證:tictocElapsed time is 0.000001 seconds. ticfor i=1:1000000endTocElapsed time is 0.0

3、03144 seconds.影響仿真程序性能的要素For循環(huán)從上面的實(shí)驗(yàn)結(jié)果可以得出以下結(jié)論:tic/toc語(yǔ)句的時(shí)間開銷可以忽略不計(jì)for-loop語(yǔ)句本身的時(shí)間開銷也非常小,關(guān)鍵的影響效率的地方不在于循環(huán)本身,而是在于循環(huán)的內(nèi)部接下來(lái)我們就借助for循環(huán),分析一下其他的各個(gè)影響效率的要素影響仿真程序性能的要素函數(shù)調(diào)用函數(shù)的分類:build-in functionMEX-function (MATLAB executable)m-functionanonymous functioninline function其它相關(guān)內(nèi)容不講:function handlefeval影響仿真程序性能的要素內(nèi)

4、建函數(shù)ticfor i=1:1000000 cos(0);endtocMean elapsed time is 0.032866 seconds.影響仿真程序性能的要素m-函數(shù)ticfor i=1:1000000 func(i);endtocMean elapsed time is 0.185556 seconds.function func( )end影響仿真程序性能的要素匿名函數(shù)ticfor i=1:1000000 funca(i);endtocMean elapsed time is 0.561228 seconds.funca=(x);影響仿真程序性能的要素內(nèi)聯(lián)函數(shù)ticfor i=1

5、:1000000 funci(i);endtocMean elapsed time is 19.5606 seconds.funci=inline(,x);影響仿真程序性能的要素函數(shù)調(diào)用影響仿真程序性能的要素函數(shù)調(diào)用從上面的實(shí)驗(yàn)結(jié)果可以得出以下結(jié)論:內(nèi)聯(lián)函數(shù)的調(diào)用時(shí)間開銷最小,約為for-loop本身的10倍m-函數(shù)的調(diào)用時(shí)間開銷約為內(nèi)聯(lián)函數(shù)的6倍,約為for-loop本身的60倍匿名函數(shù)的調(diào)用時(shí)間開銷約為m-函數(shù)的3倍,約為for-loop本身的187倍內(nèi)聯(lián)函數(shù)的調(diào)用時(shí)間開銷過(guò)大,盡量不要在循環(huán)中運(yùn)用另外MEX-函數(shù)的調(diào)用時(shí)間開銷,理應(yīng)介于內(nèi)聯(lián)函數(shù)和m-函數(shù)之間影響仿真程序性能的要素矩陣索引

6、ticA=zeros(1000000,1);for i=1:1000000 A(i)=i;endtocMean elapsed time is 0.007592 seconds.影響仿真程序性能的要素矩陣索引ticA=zeros(1000000,1);for i=1:1000000 A(i,1)=i;endtocMean elapsed time is 0.007954 seconds.影響仿真程序性能的要素矩陣索引ticA=zeros(1000000,1);for i=1:1000000 A(i:i,1)=i;endtocMean elapsed time is 0.663598 secon

7、ds.影響仿真程序性能的要素矩陣索引ticA=zeros(1000000,1);for i=1:1000000 A(i,:)=i;endtocMean elapsed time is 0.273345 seconds.影響仿真程序性能的要素矩陣索引ticA=zeros(1000000,1);for i=1:1000000 A(i,1:1)=i;endtocMean elapsed time is 0.730042 seconds.影響仿真程序性能的要素矩陣索引ticA=zeros(1000000,1);for i=1:1000000 A(i:i,1:1)=i;endtocMean elapse

8、d time is 1.00852 seconds.影響仿真程序性能的要素矩陣索引影響仿真程序性能的要素內(nèi)存分配ticA=zeros(1000000,1);for i=1:1000000 A(i)=i;endtocMean elapsed time is 0.009025 seconds.影響仿真程序性能的要素內(nèi)存分配tic% A=zeros(1000000,1);for i=1:1000000 A(i)=i;endtocMean elapsed time 20 minutes.影響仿真程序性能的要素內(nèi)存分配因此,假設(shè)不預(yù)先分配好內(nèi)存,將會(huì)大大添加仿真時(shí)間,拖慢執(zhí)行效率;所幸的是,由于這個(gè)景象

9、的重要性,Matlab的編輯器可以發(fā)現(xiàn)并提示這個(gè)問(wèn)題,會(huì)用紅的波浪線標(biāo)志出來(lái)影響仿真程序性能的要素其它關(guān)于Matlab還有很多細(xì)節(jié)及技巧,可以經(jīng)過(guò)在程序中查詢產(chǎn)品協(xié)助,獲得設(shè)計(jì)師的建議,一點(diǎn)一點(diǎn)積累下面列舉一些編程的建議提高仿真程序性能的建議向量化函數(shù)化預(yù)分配內(nèi)存隨時(shí)用測(cè)試工具檢測(cè)執(zhí)行效率提高仿真程序性能的建議向量化N=0:0.1:1000;for i=0:10000 y(i)=cos(N(i);end向量化:N=0:0.1:1000;y=cos(N);提高仿真程序性能的建議向量化Y=arrayfun(function, X);向量化函數(shù):accumarrayarrayfunbsxfuncel

10、lfunspfunstructfun提高仿真程序性能的建議函數(shù)化盡量運(yùn)用內(nèi)建函數(shù),內(nèi)建函數(shù)的速度是最快的m-函數(shù)的執(zhí)行效率也很高M(jìn)EX-函數(shù)的執(zhí)行效率僅次于內(nèi)建函數(shù),將耗時(shí)的代碼寫成MEX-函數(shù),將大大提高運(yùn)轉(zhuǎn)速度匿名函數(shù),內(nèi)聯(lián)函數(shù),以及一些面向?qū)ο蠓椒ǎM量不要在執(zhí)行次數(shù)多的循環(huán)體內(nèi)運(yùn)用提高仿真程序性能的建議預(yù)分配內(nèi)存A = zeros(1000, 1);A = int8(zeros(100, 1);A = zeros(1000, 1, int8);常用的預(yù)分配內(nèi)存函數(shù):zerosoneseye執(zhí)行速度測(cè)試方法tic/toc語(yǔ)句profile函數(shù)profiler工具執(zhí)行速度測(cè)試方法tic/t

11、oc語(yǔ)句tic/toc語(yǔ)句,前面曾經(jīng)引見(jiàn)了實(shí)例。tic/toc不一定要成對(duì)出現(xiàn),一個(gè)tic后面可以有多個(gè)toc,但需求需求重新計(jì)時(shí)的時(shí)候,要再次執(zhí)行tictoc的結(jié)果可以用變量接納下來(lái),如T=tocT(k)=toc;執(zhí)行速度測(cè)試方法profile函數(shù)profile onscript-nameprofile reportprofile offprofile clear 對(duì)于單個(gè)m文件,他只需求簡(jiǎn)單的在Matlab 命令行窗口Command Window輸入profile on,然后是m文件名,比如文件名為calculation.m的文件,直接輸入calculation,執(zhí)行終了以后,輸入prof

12、ile report,就可以察看每條語(yǔ)句的耗時(shí)。終了后別忘了profile off。還可以運(yùn)用profile clear去除之前執(zhí)行的結(jié)果。執(zhí)行速度測(cè)試方法profile函數(shù)運(yùn)轉(zhuǎn)到斷點(diǎn)profile on單步執(zhí)行profile reportprofile offprofile clear 對(duì)于在一大堆語(yǔ)句中單獨(dú)調(diào)用的m文件,假設(shè)他僅僅需求用matlab察看這個(gè)函數(shù)的耗時(shí),那么用斷點(diǎn)運(yùn)轉(zhuǎn)到他需求查看的函數(shù)之前,然后按照上面仿真單個(gè)文件的方法,在命令行窗口執(zhí)行profile on,然后調(diào)用函數(shù), 接下來(lái)用profile report查看報(bào)告,最后輸入profile off終了。執(zhí)行速度測(cè)試方法pr

13、ofiler工具執(zhí)行速度測(cè)試方法profiler工具執(zhí)行速度測(cè)試方法profiler工具執(zhí)行速度測(cè)試方法profiler工具執(zhí)行速度測(cè)試方法profiler工具附:減少內(nèi)存運(yùn)用的建議為變量定義適宜的數(shù)據(jù)類型x=zeros(1,1000,uint8);當(dāng)運(yùn)用大的矩陣變量時(shí),預(yù)先指定維數(shù)并分配好內(nèi)存,防止每次暫時(shí)擴(kuò)展維數(shù)重用變量,防止生成大的中間變量,并刪除不再需求的暫時(shí)變量當(dāng)程序需求生成大量數(shù)據(jù)時(shí),可以思索定期將變量寫到磁盤,然后去除這些變量。當(dāng)需求這些變量時(shí),再重新從磁盤加載當(dāng)矩陣中數(shù)據(jù)極少時(shí),將全矩陣轉(zhuǎn)換為稀疏矩陣clear, save, load, whos, pack附:for-loop中的循環(huán)變量for

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論