Matlab中的下溢

时间:2014-05-13 16:59:40

标签: matlab underflow

将1e-300等负指数大的数字手动设置为零以避免Matlab下溢是一个好习惯吗?

如果不是,在实现log(1 + exp(x))等函数时如何避免下溢的危害?

1 个答案:

答案 0 :(得分:1)

通常,在添加非常大且非常小的值时会遇到麻烦,因为这会导致较高的相对误差。摆脱这个求和(1 + exp(x)),当x很大时,它会快速耗尽双值范围。

log(1+exp(x))
log(1+1/exp(x))*exp(x))
log(1+1/exp(x))+log(exp(x))
log(1+1/exp(x))+x

另一种方法是使用vpa:

log(1+exp(vpa(10^6)))

非常慢,但是你得到的结果具有配置的精度。

我从未见过手动将小值设置为零的情况是一个很好的解决方案,通常与容差相比更好。