为什么一个很小的数字返回inf而不是实数?

2024-05-14 00:52:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我运行了两个变量(H1H2)的更新,这两个变量预期会给出类似的结果,但其中只有一个(H2)在第35次迭代中遇到了RuntimeWarning: overflow encountered in double_scalars。我跟踪发现H方程中有一部分可以返回1.48219693752e-323,而H2返回inf,这导致了该迭代中所有方程的错误。你知道吗

1.48219693752e-323(-1.79769313486e+308, 1.79769313486e+308)之间。为什么其中一个返回inf?这里发生了什么事?你知道吗


额外信息:

for it in xrange(36): # for 35 iterations
    for k in xrange(kk):
        for j in xrange(jj):
            # update auxiliary
            gamma = H
            gamma2 = H2
            # update H
            H[k,j] = (gamma[k,j]/(2*lagrange)) * \
                     (( np.sqrt((sum(W[:,k]))**2 + \
                     (4*lagrange)*sum(V[:,j]*W[:,k]/np.dot(W[:,:],H[:,j]))) ) - \
                     sum(W[:,k]))
            H2[k,j] = (gamma2[k,j]/(2*lagrange)) * \
                     (( np.sqrt((sum(W[:,k]))**2 + \
                     ((4*lagrange/H2[k,j])*sum(gamma2[k,j]*V[:,j]*W[:,k]/np.dot(W[:,:],H2[:,j])))) ) - \
                     sum(W[:,k]))
            print H == H2
            print "for H: ", it, gamma[k,j], V[:,j]*W[:,k], sum(gamma[k,j]*V[:,j]*W[:,k])
            # gamma2[k,j] changes to be inf at 35th iteration but gamma[k,j] is fine
            print "for H2: ", gamma2[k,j], V[:,j]*W[:,k], sum(gamma2[k,j]*V[:,j]*W[:,k])

如果你想知道为什么它会给出类似的结果,因为H2在sum中有gamma2[k,j](应该作为系数拉出),并且应该被H2[k,j](sum前面的项)除以H2=gamma2。你知道吗


Tags: infornpupdateitsqrth2inf