C ++,非常意外的-1#INF

时间:2012-04-01 15:21:33

标签: c++ algorithm debugging optimization nan

我正在调试优化例程。我生成一个日志文本文件,我在优化例程中的每次迭代中跟踪目标函数值。

以下是上下文:我使用曲线拟合问题,模型在四参数中是线性的,而在X数据中是多项式

Y = PARAM1*X^3+PARAM2*X^2+PARAM3*X+PARAM4

我对从该模型生成的未通过无偏的数据运行优化例程,以便测试算法。

在日志文件中,第一个优化步骤显示没有问题。功能评估具有双重值。在每次迭代时,计算5个函数值(并显示在日志文件中)。从给定的迭代开始,事情变得糟糕:一个函数评估变为-1#INF,尽管在这一点上已经成功地评估了目标函数(!)。在接下来的迭代中,“坏点”继续在-1#INF进行评估,并且逐个其他点也最终在-1#INF处进行评估。在给定公式的情况下,在这些点上计算Y并不是很困难,并且考虑到之前已对它们进行了适当的评估。

另外,我怀疑是另一个原因,比如内存管理。你对此有任何想法,或者有什么建议可以更近地跟踪问题吗?


修改

我在日志文件中看到第一次出现-1#INF。在每次迭代时,在5个点评估函数,但这5个点中只有一个是“新点”。首次出现-1#INF时,此时已成功评估功能。

看起来像是

ITERATION N-1
f1 559.011
f2 560.034
f3 562.034
f4 560.342
f5 560.344

ITERATION N 
f1 -1#INF
f2 560.034
f3 558.034
f4 560.342
f5 560.344

其中ITERATION Nf3是新点的函数评估,f1是与ITERATION N-1中的f1相同的点上的函数评估。

1 个答案:

答案 0 :(得分:2)

Infinity在计算中传播。最大的几率是多项式产生的 - 因为X已经是-Inf。最大的几率是由X的计算除以零引起的。继续前进并添加在分区中检查零的代码。