首页 > 解决方案 > scipy.optimize.root 在非线性函数上返回 NaN

问题描述

我正在使用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 的错误。但是,我仍然会感谢有关解决此类问题的最佳方法的任何意见。

标签: pythonscipy

解决方案


推荐阅读