如果函数未定义,则scipy root返回猜测值

时间:2018-10-26 11:41:09

标签: python scipy

我正在尝试进行参数研究。我有一个非常复杂的函数,并未为所有值定义。

我进行参数更改并且随时都扎根,但是如果参数使函数未定义,则scipy.optimize.root()返回猜测值,而不是错误或'nan'

仅当定义了函数(不必先确定定义函数的空间)时如何才能获得root用户权限?

我试图创建一个简单的示例以促进理解:

import numpy as np
from scipy.optimize import root

global k
def F(X):
    np.seterr(all='raise')
    try:
       f1=np.log(4.80-(X+k))
       return f1
    except:
       return np.nan

guess = 10
ks=[i/2.0 for i in range(10)]
for k in ks: 
    root(F, guess)

1 个答案:

答案 0 :(得分:1)

您应该将try-except块包装在根函数周围;这也是您要测试nan的地方。您应该进一步捕获scipy / root引发的特定异常,而不是每个异常。

import numpy as np
from scipy.optimize import root

def myroot(F, guess):
    np.seterr(all='raise')
    try:
        res = root(F, guess)
    except FloatingPointError as exp:
        return guess
    if np.isnan(res):
        return guess
    return res

global k
def F(X):
    return np.log(4.80-(X+k))

ks=[i/2.0 for i in range(10)]
guess = 10
for k in ks:
    print(myroot(F, guess))