Matlab向量化再探

一个向量化例子

之前的观点是Matlab的向量化的计算效率比for循环高。
今天考察一个例子,计算10000个随机数相加, 平台是Matlab 2018b。
先说结论:进行预定义矩阵尺寸的for循环并且减少循环中的重复计算的情况下,效率比自带函数的效率要高。
从此看出,提高效率的关键在于定义矩阵尺寸,而向量化不能有效的提高计算速度。

计算结果
直接for循环: 0.002595 seconds
预定义数组for循环时间: 0.001345 seconds
预定义数组for循环,计算好变量时间: 0.000789 seconds
直接向量化时间: 0.000987 seconds

%% 简单for循环
tic;
dt = 1/n;
w(1) = 0;
for i=1:n
    w(i+1) = w(i) + sqrt(dt)*randn;
end
t1 = toc;
plot(0:dt:1,w)
fprintf('直接for循环: %f seconds\n\n', t1)

%% 预定义数组
clear w
tic;
dt = 1/n;
w = zeros(n+1,1);
for i=1:n
    w(i+1) = w(i) + sqrt(dt)*randn;
end
t1 = toc;
fprintf('预定义数组for循环时间: %f seconds\n\n', t1)

%% 先计算好变量
clear w
tic;
dt = 1/n;
w = zeros(n+1,1);
sdt = sqrt(dt);
for i=1:n
    w(i+1) = w(i) + sdt*randn;
end
t1 = toc;
fprintf('预定义数组for循环,计算好变量时间: %f seconds\n\n', t1)

%% 向量化函数
clear w
tic;
dt = 1/n;
w = sqrt(dt)*cumsum([0;randn(n,1)]);
t1 = toc;
fprintf('直接向量化时间: %f seconds\n\n', t1)

你可能感兴趣的:(数值分析,Matlab)