我正在尝试计算矩阵中单元格的所有参数,然后使用色彩映射表散射函数和视频写入器制作视频。我的代码很好,但是当我使用更高的n=64和N=241值时,它会花费很长的计算时间。
%% Implementing time loop
for k=2:N
for i=1:n
for j=1:n
cell(i,j,k).threshold=cell(i,j,k-1).threshold+(-H1*M/P+cell....
(i,j,k-1).activity*(H1+H2*cell(i,j,k-1).input)/D)*0.25;
cell(i,j,k).exc_level=cell(i,j,k-1).exc_level+....
((cell(i,j,k-1).input+cell(i,j,k-1).exc_level)/K)*0.25;
if cell(i,j,k-1).activity==0 &&....
cell(i,j,k).exc_level>cell(i,j,k).threshold
cell(i,j,k).activity=1;
elseif cell(i,j,k-1).activity==1 && cell(i,j,k-6).activity==0
cell(i,j,k).activity=1;
else
cell(i,j,k).activity=0;
end;
end;
end;
for i=1:n
for j=1:n
[Z_coord1,Z_coord2,Z_act,Z_exc]=dendrite5(cell,i,j,n,k);
cell(i,j,k).input=sum(Z_act.*Z_exc);
end;
end;
end;我想为n=64和N=241计算这个时间循环。你能给我一些建议来加速我的代码吗?另外,我认为主要的问题在于函数dendrite5。下面是函数:
function [Z_coord1,Z_coord2,Z_act,Z_exc]=dendrite5(cell,i_0,j_0,n,k)
Z_coord1=zeros(1,i_0+6);
Z_coord2=zeros(1,i_0+6);
Z_act=zeros(1,i_0+6);
Z_exc=zeros(1,i_0+6);
for i=i_0-6:i_0+6
for j=j_0-6:j_0+6
[i_hex_0,j_hex_0]=grid2hex(i_0,j_0);
[i_hex,j_hex]=grid2hex(i,j);
[i_card,j_card]=hex2card(i_hex,j_hex);
[i_0_card,j_0_card]=hex2card(i_hex_0,j_hex_0);
if (i_card-i_0_card)^2+(j_card-j_0_card)^2<1.70^2
[i_centered,j_centered]=boundary2(i,j,n);
d=sqrt((i_card-i_0_card)^2+(j_card-j_0_card)^2);
w=(2*0.85^2*acos(d/(2*0.85))-0.5*sqrt(4*0.85^2-d^2))/pi*0.85^2;
Z_coord1=[Z_coord1 i_centered];
Z_coord2=[Z_coord2 j_centered];
Z_act=[Z_act cell(i_centered,j_centered,k).activity];
Z_exc=[Z_exc w];
end;
end;
end;
% Z_coord1=Z_coord1(Z_coord1~=0);
% Z_coord1=Z_coord1(Z_coord1~=0);
% Z_coord1=Z_coord1(Z_coord1~=0);
% Z_coord1=Z_coord1(Z_coord1~=0);代码已格式化
发布于 2014-01-27 08:22:54
尝试向量化你的代码。MATLAB不编译代码。它是一个解释器。因此,
a = 1:1000000;
for i = a
n = n+i;
end比
a = 1:1000000;
sum(a)如果你真的想加速你的代码,看看MEX文件(http://www.mathworks.com/help/matlab/create-mex-files.html)。它们允许你编写和编译C和C++代码,编译它并作为Matlab函数运行,就像那些快速的内置函数一样。
发布于 2014-01-28 04:40:22
尝试在for循环外部初始化变量。这可能会有所帮助。
具体来说,请查看您的手机和Z_coord。我之所以提到最后一个,是因为当您这样做时,您将追加到数组中
Z_coord1 = [Z_coord1 i_center];因此,它一直在增长。如果它变得“太大”,Matlab会显著减慢速度。同样的语句也适用于您的cell变量(这在3nexted for循环中)。如果在for循环之外创建它们,则已经分配了空间。
https://stackoverflow.com/questions/21370985
复制相似问题