scipy.optimize.root在非线性函数上返回NaN

时间:2018-11-05 08:17:23

标签: python scipy

我在非线性函数上使用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。但是,我仍然希望您提供有关解决此类问题的最佳方法的任何意见。

0 个答案:

没有答案