use*_*004 7 matlab exp numerical-stability
我需要在Matlab中计算向量的归一化指数.
简单写作
res = exp(V)/sum(exp(V))
Run Code Online (Sandbox Code Playgroud)
V元素中的溢出大于log(realmax)= 709.7827.(我不确定下溢情况.)
我该如何实现它以避免数值不稳定?
更新:我收到了关于如何避免溢出的出色回复.但是,我仍然很高兴听到您对代码中可能出现下溢的想法.
以下方法通过减去指数然后取指数而不是除以指数来避免溢出:
res = 1./sum(exp(bsxfun(@minus, V(:), V(:).')))
Run Code Online (Sandbox Code Playgroud)
作为一般规则,可以通过尽可能长时间地在日志域中工作来避免溢出,并且仅在结束时使用指数.