我运行了两个变量(H1
和H2
)的更新,这两个变量预期会给出类似的结果,但其中只有一个(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
。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐