切換到寬版
  • 廣告投放
  • 稿件投遞
  • 繁體中文
    • 8670閱讀
    • 3回復(fù)

    [分享]讓Matlab高效率運行的技巧 [復(fù)制鏈接]

    上一主題 下一主題
    在線cyqdesign
     
    發(fā)帖
    28695
    光幣
    96996
    光券
    0
    只看樓主 倒序閱讀 樓主  發(fā)表于: 2008-10-17
    關(guān)鍵詞: Matlab
    用過Matlab的人都知道,Matlab是一種解釋性語言,存在計算速度慢的問題,為了提高程序的運行效率,matlab提供了多種實用工具及編碼技巧。 Ax<\jW<  
    & 0v.E"0<  
    1. 循環(huán)矢量化 d53 L65[  
    w:ULi3  
      Matlab是為矢量和矩陣操作而設(shè)計的,因此,可以通過矢量化方法加速M文件的運行。矢量化是指將for循環(huán)和while循環(huán)轉(zhuǎn)換為等價的矢量或矩陣操作。下面給出一個循環(huán)的例子: FJS'G^  
    XGs^rIf  
    i=0; KSqTY>%fnv  
    UpUp8%fCU  
    for n = 0:0.1:1000  Ewo~9 4{  
    cCdX0@hY  
        i=i+1; 4zc<GL3[  
    a/:XXy |  
        y(i)=cos(n); m *X7T  
    WS0JS'  
    end Ex(3D[WmMW  
    ;Ss$2V'a  
    那么我們可以矢量化為: jX */piSq  
    ;4~U,+Av  
    n= 0:0.1:1000; nkY@_N  
    ;+_8&wbqW  
    y=cos(n); 3fkk [U  
    PEXq:TA  
    我們可以用tic和toc函數(shù)來查看上述各代碼運行的時間,采用for循環(huán)的程序0.39秒(具體時間和計算機配置有關(guān)),而矢量化后幾乎耗時為0。 SN">gmY+  
    8b&uU [  
    2. 給數(shù)組或矩陣預(yù)分配內(nèi)存 l I-p_K  
    xAdq+$><  
        特別是使用大型數(shù)組或矩陣時,Matlab進行動態(tài)內(nèi)存分配和取消時,可能會產(chǎn)生內(nèi)存碎片,這將導(dǎo)致大量閑置內(nèi)存產(chǎn)生,預(yù)分配可通過提前給大型數(shù)據(jù)結(jié)構(gòu)預(yù)約足夠空間來避免這個問題。 ]qktj=p  
    k`YYZt]@  
    3. 用函數(shù)代替腳本文件 W)=%mdxW0  
    q~Jq/E"f  
        因為每次調(diào)用MATLAB的腳本文件都需要將不必要的中間變量加載到內(nèi)存中,每執(zhí)行一次,就加載一次。函數(shù)在調(diào)用時被編譯成了偽代碼,只需要加載到內(nèi)存一次。當(dāng)多次調(diào)用同一個函數(shù)時會運行快一些。因此盡量多使用函數(shù)文件而少使用腳本文件,也是提高執(zhí)行效率的一種方法。 Px;Cg 6  
    l[Z)@bC1   
    4. 用Mex文件編寫循環(huán)代碼 9O98Q6-s  
    wyY*:{lZ  
        Matlab提供了與C和C++的接口,那么我們可以在用C或C++語言編寫耗時的循環(huán)代碼,然后通過接口程序在Matlab中轉(zhuǎn)換成dll文件,這就是我們所要的Mex文件,通過這種方法可以極大地提高計算速率。
     
    光行天下網(wǎng)站、公眾號廣告投放、企業(yè)宣傳稿件發(fā)布,請聯(lián)系QQ:9652202,微信號:cyqdesign
    分享到
    離線lywfeng
    發(fā)帖
    466
    光幣
    6662
    光券
    0
    只看該作者 1樓 發(fā)表于: 2009-07-07
    謝謝了
    發(fā)帖
    43
    光幣
    2
    光券
    0
    只看該作者 2樓 發(fā)表于: 2016-03-23
    謝謝了
    離線gengyunfei
    發(fā)帖
    247
    光幣
    8
    光券
    0
    只看該作者 3樓 發(fā)表于: 2016-11-18
    學(xué)習(xí)了