我正在尝试处理我编写的一些代码,并且一条特定的行在MATLAB中给我带来了问题:
Ts = (1+(DatesMod.*Bs)./VolMod).^(VolMod);
VolMod是一个数组大小为10 ^ 8的数组,DatesMod的值范围在700,000到740,000之间,Bs的值范围在0到100之间。请注意,此函数在数学上类似于执行lim (n-> Inf)(1 + B *日期/ n)^ n。据我所知,这主要与在计算机上分配数字的方法有关。我是否有一种聪明的方法可以强制它计算实际值而不是为每个值返回Inf?
提前致谢。
答案 0 :(得分:2)
请注意限制
lim(n->Inf) (1+B*Dates/n)^n = exp(B*Dates)
并且一旦参数大于exp
,Inf
将溢出到709.9
,因此没有真正的方法可以在没有任意精度算术的情况下完全计算Ts
。 / p>
最好的选择可能是以对数精度工作,例如:而不是Ts
您使用logTs
logTs = VolMod .* log1p((DatesMod.*Bs)./VolMod)
然后,您需要重写任何后续表达式以使用它而不显式计算exp(logTs)
(因为它会溢出)。