轉自: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來查看某段程序的執行時間。