找到方程的自洽解

时间:2016-07-05 00:37:43

标签: python numpy scipy neural-network wolfram-mathematica

在这个问题的底部是一组从已发表的神经网络模型转录而来的功能。当我致电R时,我收到以下错误:

  

RuntimeError:调用Python对象时超出了最大递归深度

请注意,在每次调用R时,都会对网络中的每个其他神经元进行R的递归调用。这是导致超出递归深度的原因。 R的每个返回值都取决于所有其他值(网络涉及N = 512总值。)是否有人知道应该使用哪种方法来计算{{1}的自洽解决方案}?请注意,R本身是一个平滑的函数。我已经尝试将其视为向量解根问题 - 但在这种情况下,512维度不是独立的。有这么多自由度,根本找不到根(使用R函数)。 Python有没有可以帮助解决这个问题的工具?使用像Mathematica这样的东西解决scipy.optimize会更自然吗?我不知道这是怎么做到的。

R

2 个答案:

答案 0 :(得分:1)

这种递归永远不会结束,因为在递归调用之前没有终止条件,调整最大递归深度没有帮助

def R(x_i): 
   ...
   for x_j in x:
       sum_term += J(x_i - x_j) * R(x_j)

也许你应该做像

这样的事情
# some suitable initial guess
state = guess

while True: # or a fixed number of iterations
   next_state = compute_next_state(state)

   if some_condition_check(state, next_state):
       # return answer
       return state 

   if some_other_check(state, next_state):
       # something wrong, terminate
      raise ...

答案 1 :(得分:0)

使用sys.setrecursionlimit

更改最大递归深度
import sys
sys.setrecursionlimit(10000)

def rec(i):
    if i > 1000:
        print 'i is over 1000!'
        return
   rec(i + 1)

rec(0)

更多信息:https://docs.python.org/3/library/sys.html#sys.setrecursionlimit`