我运行了两个变量(H1
和H2
)的更新,这些变量预计会产生类似的结果,但只有其中一个(H2
)遇到RuntimeWarning: overflow encountered in double_scalars
来自第35个迭代。我跟踪并发现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
总和gamma2[k,j]
(应该作为系数拉出)并且应该除以H2[k,j]
(前面的术语)总和)为H2=gamma2
。