Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制MATLAB不作为Inf计算_Matlab_Floating Point - Fatal编程技术网

如何强制MATLAB不作为Inf计算

如何强制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 提前感谢。请注意

我正在努力完成我编写的一些代码,有一行代码给了我MATLAB中的问题:

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)
(因为这样会溢出)