Проблема с фикцией Python

EDIT: первая проблема решена, но у меня теперь есть новый вопрос:

В настоящее время я делаю кривую, пригодную для ввода некоторых данных. Моя функция:

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 ответ

Ваши параметры должны соответствовать 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]]))

licensed under cc by-sa 3.0 with attribution.