我在matlab中的代码中有一个小错误,我从单个值(而不是数组)开始集成循环。
我注意到,如果我给trapz(1,1)它几乎立即给出零(就像它应该对于trapz(x,y)),但是它计算它所需的时间在很大程度上取决于&#39的大小。 ; Y'
那是:
tic;trapz(5.1000,1.6610e+03);toc
Elapsed time is 0.011022 seconds.
tic;trapz(5.1000,1.6610e+04);toc
Elapsed time is 0.485286 seconds.
tic;trapz(5.1000,1.6610e+05);toc
Elapsed time is 46.400199 seconds.
tic;trapz(5.1000,1.6610e+06);toc
..Still going on
我没有解释。为什么输入值是多少?
答案 0 :(得分:5)
通过两个标量输入,trapz
将您的通话解释为
的维度
trapz(y,dim)
在dim
y
之间进行整合
要沿该维度进行整合,它会使用permute
应用排列。随着dim
的增加,这种排列成本更高。这些是trapz
代码的相关行:
perm = [dim:max(ndims(y),dim) 1:dim-1];
y = permute(y,perm);
尝试自己计时:
>> y = 5; dim = 1e3;
tic, perm = [dim:max(ndims(y),dim) 1:dim-1]; y = permute(y,perm); toc
Elapsed time is 0.001761 seconds.
>> y = 5; dim = 1e4;
tic, perm = [dim:max(ndims(y),dim) 1:dim-1]; y = permute(y,perm); toc
Elapsed time is 0.148300 seconds.
>> y = 5; dim = 1e5;
tic, perm = [dim:max(ndims(y),dim) 1:dim-1]; y = permute(y,perm); toc
Elapsed time is 17.534308 seconds.