Python曲线拟合问题

时间:2014-12-12 20:49:39

标签: python numpy

编辑:第一个问题已经解决,但我现在有了一个新问题:

我目前正在对要输入的某些数据进行曲线拟合。我的职责是:

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, 7, 6))
    Ti, Ta, c = popt
    xfine = np.linspace(0, 10, 101)
    yfitted = model(xfine, *popt)
    pl.plot(Ts, ts, 'o', label = 'data point')
    pl.plot(xfine, yfitted, label = 'fit')
    pylab.legend()
    pylab.show() 

当我进入时:

extract_parameters(np.array([1,2,3,4,5,6,7,8,9,10]), np.array([10.0,9.0,8.5,8.0,7.5,7.3,7.0,6.8,6.6,6.3]))

我的图表开始适合结束但是当我的数据从10开始时,我的曲线从大约240开始然后扫描dow,这不是我想要的。我认为设置p0会有所帮助,但它似乎没有任何帮助。

任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您要符合的参数是TiTac,因此请勿先定义Ti

from scipy.optimize import curve_fit
def model(t, Ti, Ta, c):
    return (Ti - Ta) * np.exp(-t / c) + Ta

Ti, Ta, c = 100, 25, 10     # super-low heat-capacity tea!
t = np.linspace(0,100,101)  # time grid
data = model(t, Ti, Ta, c)  # the data to be fitted
data += np.random.rand(len(data))    # add some noise
curve_fit(model, t, data)

给出:

(array([ 100.4656674 ,   25.44794971,   10.04560802]),
 array([[ 0.02530277,  0.00100244, -0.00377959],
        [ 0.00100244,  0.00122549, -0.00062579],
        [-0.00377959, -0.00062579,  0.00128791]]))