我在非线性函数上使用scipy.optimize.root (scipy v. 0.19.0)
。
我的代码如下:
def invalid(num):
if isnan(num) or num < 0 or num > some_other_number:
return True
return False
def target_func(guesses, args):
for i in range(len(guesses)):
if invalid(guesses[i]):
return [float('inf')] * len(guesses)
# do some other calculations
return [res(guess) for guess in guesses]
result = root(target_func, guesses, args, method='lm')
大多数时间root
返回正确的结果。
但是在一种情况下,该函数返回NaN
,这意味着“最佳”解决方案的目标函数为inf。在这种情况下,求解器先前已经测试了有效的猜测,并且收到的结果肯定小于无穷大。但是一旦收到inf结果,它似乎就会发疯,并且不会回到有限的数字。
有什么我应该做些不同的事情来解决这个问题吗?谢谢!
更新:我发现代码中的错误导致目标函数返回inf。但是,我仍然希望您提供有关解决此类问题的最佳方法的任何意见。