1. 程式人生 > >matlab提高執行速度

matlab提高執行速度

1)為矩陣變數預製記憶體而不是動態分配

慢:

for k = 2:1000 

    x(k) = x(k-1) + 5; 

end 

快:

x = zeros(1, 1000); 

for k = 2:1000 

    x(k) = x(k-1) + 5; 

end 

在程式一開始就為所有大的矩陣變數預製儲存單元。

(2)將迴圈語句改為向量形式

慢:

For ii=1:100

Square(ii)=ii^2;

End

快:

ii=1:100;

Square(ii)=ii^2;

!!!執行速度從慢到快依次為:for loop → for loop+preallocate with zeros function 

→ vectorize

(3)邏輯陣列可以用來將某個陣列的子陣列進行向量化運算,避免迴圈,加快執行速度:

a=[1 2 3;4 5 6;7 8 9];

b=a>5

a(b)=sqrt(a(b)) %a中大於5的數字求平方根

a(~b)=a(~b).^2  %a中小於等於5的數字求平方

輸出結果:

b =

     0     0     0

     0     0     1

     1     1     1

a =

    1.0000    2.0000    3.0000

    4.0000    5.0000    2.4495

    2.6458    2.8284    3.0000

a =

    1.0000    4.0000    9.0000

   16.0000   25.0000    2.4495

    2.6458    2.8284    3.0000

(4)matlab profiler(執行和計時)

    根據每行程式碼所耗費的時間分別改進。



2.生成隨機數時,生成均勻分佈的函式rand(x,y)的速度比生成其它分佈的隨機數的函式速度快的多,大概10倍左右;當要生成除正態和均勻分佈以外的隨機數時,自定義函式要比通用函式快的多,比如生成指數分佈隨機數,exprnd(1,1,20)速度是random(‘exp’,1,1,20)的40多倍。