matlab加速:分配空间+向量化运算
clc;clear;
mysize=1000;
A=rand(mysize);
fprintf('不分配空间+for循环:');
tic;Accelerate1(A);toc;
fprintf('分配空间+for循环:')
tic;Accelerate2(A);toc;
fprintf('分配空间+向量化操作:')
tic;Accelerate3(A);toc;
function Accelerate1(A)
for i = 1:size(A,1)
for j = 1:size(A,2)
if A(i,j)>0.5
B(i,j)=A(i,j);
else
B(i,j)=-A(i,j);
end
end
end
end
function Accelerate2(A)
B=A*0;
for i = 1:size(A,1)
for j = 1:size(A,2)
if A(i,j)>0.5
B(i,j)=A(i,j);
else
B(i,j)=-A(i,j);
end
end
end
end
function Accelerate3(A)
B=A*0;
Index=A<0.5;
B(Index)=-A(Index);
end
matlab加速:并行计算
clc;clear;
mysize=1000;
A=rand(mysize);
parpool();
fprintf('并行计算:')
tic;Accelerate5(A);toc;
delete(gcp)
fprintf('非并行计算:')
tic;Accelerate4(A);toc;
function Accelerate4(A)
for i = 1:50
X=eig(A);
end
end
function Accelerate5(A)
parfor i = 1:50
X=eig(A);
end
end