一、向量化
盡量使用矩陣操作,避免for loop
小技巧
1.1設定上下限
tic A=0:0.00001:10; B=0:0.00001:10; Z=zeros(size(A)); y=0; for i=1:100001 if (A(i)<0.1) A(i)=0.1; elseif (A(i)>0.1) A(i)=0.9; end Z(i)=sin(0.5*A(i))*exp(B(i)^2); y=y+Z(i); end toc y 時間已過 0.030514 秒。 | tic A=0:0.00001:10; B=0:0.00001:10; Z=zeros(size(A)); y=0; A=max(A,0.1); A=min(A,0.9); y=sin(0.5*A(i))*exp(B(i)^2)'; toc y 時間已過 0.018558 秒。 y = 1.1824 |
二、預配置設定記憶體
提前配置設定好記憶體可以加速程式執行,如果不知道大小,可以預先配置設定一個比較打的矩陣。
>> tic
x=1;
x(2)=2;
x(3)=3;
x(4)=4;
x(5)=5;
toc
%preallocation
tic
y=zeros(4,1);
y=1;
y(2)=2;
y(3)=3;
y(4)=4;
y(5)=5;
toc
時間已過 0.039377 秒。
時間已過 0.003747 秒。
三、列儲存優先
MATLAB是按列儲存方式column by column.如果不得不用for loop 可以按列通路