我正在尝试进行参数研究。我有一个非常复杂的函数,并未为所有值定义。
我进行参数更改并且随时都扎根,但是如果参数使函数未定义,则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)
答案 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))