2017-10-19 249 views
0

我想通过一些代码,我写的和一个特定的行给我的问题在MATLAB的工作:如何强制MATLAB不计算为天道酬勤

Ts = (1+(DatesMod.*Bs)./VolMod).^(VolMod); 

VolMod与顺序值的数组DatesMod的值范围在700,000和740,000之间,Bs的值范围在0和100之间。请注意,该函数在数学上类似于lim(n> Inf)(1 + B * Dates/n)的n次方。我明白这主要与计算机上分配数字的方法有关。有没有一种聪明的方法可以强制它计算实际值,而不是为每个值返回Inf?

在此先感谢。

回答

2

注意,限制

lim(n->Inf) (1+B*Dates/n)^n = exp(B*Dates) 

exp会溢出到Inf一旦参数大于709.9较大,所以计算Ts恰好没有高精度计算没有真正的方法。

最好的选择可能是以对数精度工作,例如,而不是TslogTs

logTs = VolMod .* log1p((DatesMod.*Bs)./VolMod) 

的工作,你就那么需要重写任何后续的表达式中使用这个没有明确计算exp(logTs)(因为这将溢出)。