为什么trapz积分的速度取决于输入值的大小?

时间:2017-03-23 18:01:29

标签: matlab

我在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

我没有解释。为什么输入值是多少?

1 个答案:

答案 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.