【问题标题】:How to force MATLAB to not compute as Inf如何强制 MATLAB 不计算为 Inf
【发布时间】:2017-10-20 01:44:34
【问题描述】:

我正在尝试处理我编写的一些代码,而一个特定的行在 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?

提前致谢。

【问题讨论】:

    标签: matlab floating-point


    【解决方案1】:

    注意限制

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

    一旦参数大于709.9exp 将溢出到Inf,因此没有真正的方法可以在没有任意精度算术的情况下精确计算Ts

    最好的选择可能是以对数精度工作,例如而不是Ts,您使用的是logTs

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

    然后您需要重写任何后续表达式以使用它,而无需显式计算 exp(logTs)(因为这会溢出)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多