Matlab提速方法

轉自:http://blog.sina.com.cn/s/blog_74976bc801014fjf.html

最近做實驗的時候需要用matlab,確實寫起來快,而且工具強大,但是有時遇到速度讓人頭疼,不能像c java可以利用數據結構或者什麼模式來提高速度,上網搜了下,發現已經有一些現成的辦法來提速,親自測了下,確實,一個將近一分鐘的程序現在只需要十秒不到了。。

從一本書上摘來的,希望大家能在回覆中補充(我在別處發過)


   Matlab是一種解釋性語言,程序執行速度不夠理性,可採取以下措施提速:
   
   1、儘量避免使用循環
        (1)儘量使用像量化的運算代替循環操作,可明顯提高執行效率;
        (2)在必須使用多衝循環時,儘量將循環次數少的放在外層,較多的在內層。

   2、大型矩陣預先定維
        給大型矩陣動態定位是很費時的事情,在定義大型矩陣時,首先用Matlab的內建函數,
        如zeros()或ones()對變量進行定維,然後賦值,可顯著減少時間。

   3、二重循環的矩陣代替
        使用meshgrid()函數構造兩個m×n的矩陣i,j,從而直接得出所需矩陣。如:
        [i,j]=meshgrid(1:m,1:n);%m=10,n=1000
        H=1./(i+j-1)           %此例生成了一個m×n的Hillbert長方形矩陣

   4、優先考慮內建函數
        它們是由更底層的C語言實現的,執行效率顯然要快於使用循環的矩陣運算。

   5、採用更有效的算法
        你如quad()和quad8(),後者無論在速度上還是在精度上都要明顯優於前者。

   6、應用Mex技術
        比如,當好事的循環不可避免時,可考慮C語言,按Mex技術要求的格式編寫相應部分的程序,
      通過編譯連接,形成Matlab中可直接調用的動態鏈接庫(dll)文件。

   7、遵守PerfromanceAcceleration的規則(可以參考幫助文檔,總結爲以下七條)
      1、只有使用以下數據類型Matlab纔會對程序加速:
         logical,char,int8,uint8,int16,int32,uint32,double,對其它類型不予加速;
      
      2、Matlab不會對超過三維的數組加速;
      
      3、當使用for循環時,只有當for循環的範圍內只使用標量來表示並且每一條語句只使用支持加速的      數據類型,只是用三維以下的數組,只調用了內建函數時才予以加速;
      
      4、當使用if,elseif,while和switch時,條件測試語句只是用了標量纔會予以加速;
      
      5、不要在同一行寫入多條操作,這樣會減慢執行速度;
      
      6、當某條操作改變了原來的數據類型和形狀(大小或維數)時,會減慢速度;
      
      7、應帶使用這樣的復常量如x=1+2i,而x=1+2*i會減慢速度。

打擊可以使用一對tic/toc來查看某段程序的執行時間。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章