编辑:第一个问题已经解决,但我现在有了一个新问题:
我目前正在对要输入的某些数据进行曲线拟合。我的职责是:
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会有所帮助,但它似乎没有任何帮助。
任何想法都将不胜感激。
答案 0 :(得分:1)
您要符合的参数是Ti
,Ta
和c
,因此请勿先定义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]]))