曲线拟合方程不适合拟合曲线

时间:2015-01-05 12:10:47

标签: python

我正在使用此代码来曲线拟合一些数据:

def extract_parameters(Ts, ts):
    def model(t, Ti, Ta, c):
        return (Ti - Ta)*math.e**(-t / c) + Ta
    popt, pcov = cf(model, Ts, ts, p0 = (10, 6, 7))
    Ti, Ta, c = popt
    maxx = max(Ts)
    xfine = np.linspace(0, maxx, 101)
    print "xfine: ", xfine
    yfitted = model(xfine, *popt)
    print "yfittted", yfitted
    pl.plot(Ts, ts, 'o', label = 'data point')
    pl.plot(xfine, yfitted, label = 'fit')
    pylab.legend()
    pylab.show()
    return Ti, Ta, c

当我进入时:

 extract_parameters([1,2,3,4,5,6],[100,60,50,40,45,34])

我完美契合

但是当我进入时:

extract_parameters([1,2,3,4,5,6,7],[100,80,70,65,60,58,56])

我得到的是enter image description here

谁能明白为什么?曲线拟合变化很大?

1 个答案:

答案 0 :(得分:2)

curve_fit这样的优化器会尝试找到最佳匹配,但并不总是成功。 请注意extract_parameters([1,2,3,4,5,6],[100,60,50,40,45,34])返回

(196.85292746741234, 38.185643828689777, 1.0537367332516778)

这意味着它以p0 = (10, 6, 7)的初始参数猜测开始 并找到了通往不同位置的路。

您可以通过选择更接近最佳值的初始猜测来帮助优化器。只需将其更改为

即可
p0 = (100, 6, 7)

允许

extract_parameters([1,2,3,4,5,6,7],[100,80,70,65,60,58,56])

找到更合适的人:(131.71232607048836, 54.894539483338022, 1.8503931318517444)

enter image description here