Scipy curve_fit在测量数据拟合上失败

时间:2013-12-08 20:39:45

标签: python scipy curve-fitting

我编写了一个程序,用于对测量数据进行参数识别。公式是

f = k0 * x + c1 *(x-x1)^ e1 + c2 *(x-x2)^ e2。

(这是以这种方式呈现的,因为我还不允许在这里放图片)

我必须找到公式的正确参数,参数是k0,x,1,e1,c2,x2,e2。线性部分很容易找到。所以我得到了k0和x1.我的第一个问题是:这个代码是否适用于公式

x = [0.4,0.5,0.513,1.02,1.5,2,2.25,2.75,3,3.3,3.51,3.75,4,4.3,4.5,4.7]
y = [65,115,135,150,170,300,400,600,700,800,1064,1401,1935,2616,3697,4693]

x_np = np.array(x)
y_np = np.array(y)

p0 =(0.1,10)

def advance(x,c2,e2):
    k0 = 166.801522505
    c1 =0.195545880867
    x1 = 0.3
    x2 = 4.7
    print c1
    return k0*x+c1*np.power((x-x1),e1)+c2*np.power((x-x2),e2)


standard_fitting = scipy.optimize.curve_fit(advance, x_np, y_np, p0)

第二个是,我的代码无法对此曲线进行curve_fitting。如果我在拟合期间打印变量,则Python interpeter仅打印nan

1 个答案:

答案 0 :(得分:0)

x = [0.4,0.5,0.513,1.02,1.5,2,2.25,2.75,3,3.3,3.51,3.75,4,4.3,4.5,4.7]
y = [65,115,135,150,170,300,400,600,700,800,1064,1401,1935,2616,3697,4693]

x_np = np.array(x)
y_np = np.array(y)

p0 =(0.1,10)

def advance(x,c1,e1):
    k0 = 166.801522505
    x1 = 0.3
    print c1
    return k0*x+c1*np.power((x-x1),e1)#+c2*np.power((x-x2),e2)


standard_fitting = scipy.optimize.curve_fit(advance, x_np, y_np, p0)

这会收敛并​​运行。您的示例代码仍然无法运行。此外,我不建议使用该数据拟合两个以上的参数,两个参数拟合看起来相当不错,因此您可能没有足够的信息来有意义地适应更多参数。

编辑:哦,我看到曾经是一个线性部分。也许那时值得更多参数,不过我怀疑两个幂律模型会有所帮助。

如果您想使用更多参数,则需要进行良好的猜测。因此,例如,如果您想要k0作为参数,请使用y的均值或中位数或min作为猜测。首先将两个参数拟合,然后使用其输出作为下一个拟合输入的猜测。