与MatLab相同的脚本/功能与时间不同

时间:2016-04-27 08:54:25

标签: matlab

我是某些"高级"初学者编程。我无法找到问题的答案,我发现了这个,MATLAB Speed Difference in Identical Code,但这并不是我正在寻找的。我有以下问题,我的脚本或功能由几个段组成,当我用Run Section手动运行它时,我需要15秒的时间。包括滚动和点击。当我将它们作为一个功能启动时,我需要72秒。代码是:

a=diff(Min_ZR);
b=zeros(38000000,1)*NaN;
i=1;

while i<length(a)
if a(i)==1;
    b(i)=1;
    i=i+1;

else
    b(i)=0;
    i=i+1;
end
end


 b(i:end) = [];
%%
iL=2;
kL=2;
L1=zeros(38000000,1)*0;

while iL<length(test_L)

if test_L(iL)==1

L1(iL)=L1(kL-1)+1;
iL=iL+1;
kL=iL;
else
    L1(iL)=L1(iL-1);
    iL=iL+1;

end
end
L1(iL:end)=[];

%%

iR=2;
kR=2;
L2=zeros(38000000,1)*0;

while iR<length(test_R)

if test_R(iR)==1

L2(iR)=L2(kR-1)+1;
iR=iR+1;
kR=iR;
else
    L2(iR)=L2(iR-1);
    iR=iR+1;

end
end
L2(iR:end)=[];
%%

iZ=2;
kZ=2;
ZR=zeros(38000000,1)*0;

%while i<length(test_R)
while iZ<length(b)
if b(iZ)==1

ZR(iZ)=ZR(kZ-1)+1;
iZ=iZ+1;
kZ=iZ;
else
    ZR(iZ)=ZR(iZ-1);
    iZ=iZ+1;

end
end
ZR(iZ:end)=[];





%%
L1=L1/4;
L2=L2/4;
ZR=ZR/8*34/22;
i=1;
diff_L1=zeros(38000000,1)*NaN;
diff_L2=zeros(38000000,1)*NaN;
while i<=length(ZR)

diff_L1(i)=L1(i)-ZR(i);
diff_L2(i)=L2(i)-ZR(i);
i=i+1;
end
diff_L1(i:end)=[];
diff_L2(i:end)=[];

l=length(ZR);
Drehmoment=zeros(l,1);
Drehmoment(1:10000)=100;
Drehmoment(10001:end)=380;
%%

figure % new figure
[hAx,hLine1,hLine2] = plotyy(ZR,diff_L2,ZR,Drehmoment);

title('Zahnradwandern 30.03.2016')
xlabel('Gesamtumdrehungen /1 ')

ylabel(hAx(1),'Differenzumdrehungen /1 ') % left y-axis
ylabel(hAx(2),'Drehmoment / Nm') % right y-axis

set(hAx(1),'Xlim',[0 1050000])
set(hAx(2),'Xlim',[0 1050000])
set(hAx(1),'Xtick',0:50000:1050000)
set(hAx(1),'XTickLabel',{'0','','100000','','200000','','300000','','400000','','500000','','600000','','700000','','800000','','900000','','1000000',''})
set(hAx(1),'Ylim',[-2 38])
set(hAx(1),'YTick',-2:2:38)
set(hAx(2),'YTick',0:20:400)
set(hAx(2),'Ylim',[0 400])
grid on
hold on 
plot (ZR,diff_L1,'color','g')
hold off
legend('Differenzumdrehungen PL2','Differenzumdrehungen PL1','Antriebsmoment')

对于每个部分,我需要不到1秒或2秒。只为剧情我需要更多,但正如我写了15秒。顶部不到72秒。我在运行函数时得到的。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

在以下情况下,您的代码是否会改善其效果:

  1. 您将索引i更改为iiij保留给虚构单位;
  2. 定义b=nan(length(a),1);L1=zeros(length(test_L),1);并省略b(:,end)=[];L1(iL:end)=[];;
  3. 使用for ii=1:length(a)代替while循环;
  4. 使用b=zeros(length(a),1);b(a==1)=1;代替整个while循环;
  5. 使用diff_L=L1-R1代替while循环;
  6. 使用Drehmoment=ones(l,1)*380;Drehmoment(1:100000)=100;
  7. 这些只是你可以浪费时间的建议......

    编辑关于hbadert的评论

    你试过了吗?

    Block=1;
    BlockTic(Block)=tic;
    %%Block 1
    BlockToc(Block)=toc;
    Block=Block+1;
    BlockTic(Block)=tic;
    %%...
    BlockToc(Block)=toc;
    
    AllTime=BlockToc(end)-BlockTic(1);
    Times=BlockToc-BlockTic;
    
    disp(['Global time: ',num2str(AllTime)])
    disp('Block times:')
    disp(Times')
    

答案 1 :(得分:0)

我发现了问题,如果我用跑步和时间启动程序,它告诉我72秒,或者在我使用提示4之后从克劳利60秒。它还说&#34;运行和时间fkt&#34;不要使用资源,但如果我只是运行程序,它会在10秒内完成。