use*_*422 5 math matlab numerical-methods
log(a*b)在Matlab中总是比log(a)+ log(b)更快吗?
我测试了几个输入,似乎log(a*b)更快.你能有更有经验的人给我一些意见吗?也许警告说这可能并非总是如此,或者其他我应该小心的事情?因此,在第一种情况下,我们有1个日志操作和1个乘法,在第二种情况下,我们有两个日志操作和一个求和.
编辑:
要添加到我的原始帖子,更一般的问题是:
log(a*b*...*z)总是比log(a)+ log(b)+ ... + log(z)快吗?
谢谢
Mar*_*sen 13
log(a*b)应该总是更快,因为计算对数是昂贵的.在log(a*b)你只需做一次,在log(a)+log(b)你做两次.
与对数,指数等相比,计算乘积和总和是微不足道的.就处理器周期而言,总和和乘积通常都小于5,而对于某些架构,指数和对数可以从50到200个周期.
log(a*b*...*z)总是比log(a)+ log(b)+ ... + log(z)快
是.当然.尽可能避免计算对数.
这是一个小实验:
a=rand(5000000,1);
% log(a(1)*a(2)...)
tic
for ii=1:100
    res=log(prod(a));
end
toc
% Elapsed time is 0.649393 seconds.  
% log(a(1))+log(a(2))+...
tic
for ii=1:100
    res=sum(log(a));
end
toc
% Elapsed time is 6.894769 seconds.
在某些时候,时间比率会饱和.它饱和的地方取决于您的处理器架构,但差异至少是一个数量级.
请注意,虽然log产品计算速度较快,但由于机器精度的原因,有时可能会出错.
其中一个有问题的情况是使用大量整数操作数或大数字作为操作数.在这种情况下,产品a_1 * a_2 * ... a_n将导致溢出,而计算对数之和则不会.
另一个有问题的情况是使用较小的数字,使得它们的产品由于机器精度而变为零(如Amro所述).
| 归档时间: | 
 | 
| 查看次数: | 568 次 | 
| 最近记录: |