babysoul 发表于 2009-2-24 11:10:39

关于变量清零后的耗时问题,谁能解释一下原因?

MATLAB 2008b下,

tic
for m = 1:1000000
    a.sinx = sin(m);
end;
toc;

运行时间约为0.16 s
但当改为

tic
a = [];
for m = 1:1000000
    a.sinx = sin(m);
end;
toc;

运算时间为6秒
为什么在循环体外加一句a=[],耗时就这么严重?(profile viewer表明耗时全在循环体内部)

ljelly 发表于 2009-2-24 11:32:09

我用2007a
前者耗时1.199597秒
后者耗时1.198657秒
没有多大的差别

看来2008b确实有不同啊
是什么原因呢?是mupad的问题吗?
我也想知道

kokyo52 发表于 2009-2-24 13:14:22

我用 7.0.1
测试了几次
第一个代码:Elapsed time is 2.003000 seconds.
第二个代码:Elapsed time is 2.003000 seconds.
:victory:

debateshang 发表于 2009-2-24 13:18:01

我用2007a
前者耗时1.199597秒
后者耗时1.198657秒
没有多大的差别

看来2008b确实有不同啊
是什么原因呢?是mupad的问题吗?
我也想知道
ljelly 发表于 2009-2-24 11:32 http://forum.simwe.com/images/common/back.gif
这应该不是2008b的问题,也应该与mupad无关,我用matlab2008a试了试tic
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
Elapsed time is 0.163418 seconds.
tic
a = [];
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
Elapsed time is 4.416226 seconds.
但是我把a=[]变为a=1时
tic
a = 1;
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
??? Warning: Struct field assignment overwrites a value with class "double".
See MATLAB 7.0.4 Release Notes, Assigning Nonstructure Variables As Structures Displays Warning for details.
Elapsed time is 4.568766 seconds
可以看出它是7.0.4后出现的问题,我用matlab7.0试了试
tic
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
Elapsed time is 2.516000 seconds.
>> tic
a = [];
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
Elapsed time is 2.531000 seconds.
>> tic
a = 1;
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
Elapsed time is 2.516000 seconds.
这只能说明7.04之后对循环的加速功能更好了,
页: [1]
查看完整版本: 关于变量清零后的耗时问题,谁能解释一下原因?