如何强制MATLAB不作为Inf计算
我正在努力完成我编写的一些代码,有一行代码给了我MATLAB中的问题:如何强制MATLAB不作为Inf计算,matlab,floating-point,Matlab,Floating Point,我正在努力完成我编写的一些代码,有一行代码给了我MATLAB中的问题: Ts = (1+(DatesMod.*Bs)./VolMod).^(VolMod); VolMod是一个数组,其值的数量级为10^8,DatesMod的值范围在700000到740000之间,Bs的值范围在0到100之间。请注意,此函数在数学上类似于lim(n->Inf)(1+B*日期/n)^n。我知道这主要与在计算机上分配数字的方法有关。有没有一种聪明的方法可以强迫它计算实际值,而不是为每个值返回Inf 提前感谢。请注意
Ts = (1+(DatesMod.*Bs)./VolMod).^(VolMod);
VolMod是一个数组,其值的数量级为10^8,DatesMod的值范围在700000到740000之间,Bs的值范围在0到100之间。请注意,此函数在数学上类似于lim(n->Inf)(1+B*日期/n)^n。我知道这主要与在计算机上分配数字的方法有关。有没有一种聪明的方法可以强迫它计算实际值,而不是为每个值返回Inf
提前感谢。请注意
lim(n->Inf) (1+B*Dates/n)^n = exp(B*Dates)
而且,一旦参数大于709.9
,则exp
将溢出到Inf
,因此,如果没有任意精度的算术运算,就无法准确计算Ts
最好的选择可能是以对数精度工作,例如,使用logTs
logTs = VolMod .* log1p((DatesMod.*Bs)./VolMod)
然后,您需要重写任何后续表达式以使用此表达式,而无需显式计算exp(logTs)
(因为这将溢出)。请注意
lim(n->Inf) (1+B*Dates/n)^n = exp(B*Dates)
而且,一旦参数大于709.9
,则exp
将溢出到Inf
,因此,如果没有任意精度的算术运算,就无法准确计算Ts
最好的选择可能是以对数精度工作,例如,使用logTs
logTs = VolMod .* log1p((DatesMod.*Bs)./VolMod)
然后,您需要重写任何后续表达式以使用此表达式,而无需显式计算exp(logTs)
(因为这样会溢出)