python lmfit [nan]值

时间:2016-12-22 17:15:14

标签: python lmfit

我正在尝试将lmfit用于全局拟合问题(schild分析)。我有一些共享参数和一些基于这些共享计算的参数。在某一点上,该函数遇到负数的日志并抛出[nan]列表导致它失败。我该如何预防呢?谢谢。

def g1(params,xdata,ydata):

    hillSlope = params['hillSlope'].value
    schildSlope = params['SchildSlope'].value
    top = params['top'].value
    bottom = params['bottom'].value
    pA2 = params['pA2'].value


    EC50_1 = params['ec50_2'].value
    B_1 = params['B_2'].value
    Antag_1 = 1+(B_1/(10**(-1*pA2)))**schildSlope
    LogEC_1=np.log10(EC50_1*Antag_1)
    y_model_1 = y_model_1 = bottom + (top-bottom)/(1+10**((LogEC_1-xdata)*hillSlope))

2 个答案:

答案 0 :(得分:0)

您可以将lmfit中的nan_policy设置为“忽略”!更多信息,请点击https://lmfit.github.io/lmfit-py/model.html

答案 1 :(得分:0)

尝试使用@Andri建议的nan_policy可能是一件好事。更好的方法是首先防止nan发生。当然,如果log(x)nan将给出x<0。例如,通过设置EC50_1确保您的params['ec50_2'].min = 0不能为负。另外,请检查您的Antag_1是否为正。为了安全起见,请注意以下事实:对于x <0,x ** y将是复数。

简而言之,如果fit函数可以为参数值的任何组合生成nan,则拟合将失败。您必须处理和/或防止这些情况。