-1

我正在尝试将 lmfit 用于全局拟合问题(schild 分析)。我有一些共享参数和一些基于这些共享计算的参数。在某一时刻,该函数遇到 log 为负数并抛出一个 [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))
4

2 回答 2

0

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

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

于 2020-02-21T01:17:33.500 回答
0

您可以将 lmfit 中的 nan_policy 设置为“省略”!更多信息在这里https://lmfit.github.io/lmfit-py/model.html

于 2020-02-20T14:27:36.610 回答