Подгонка данных к квадратному корню или логарифмической функции

Итак, у меня есть данные:

ensub = np.array([0, 10, 12, 14, 13.5, 12.3, 14, 13.1, 13, 12.9, 14, 14, 13, 13])
time = np.array([0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39])

и я замышляю это, я бы хотел найти подходящий вариант. Итак, естественный образ действий - это какой-то poly1d:

enfit = np.polyfit(time, ensub, 2)
ene = np.poly1d(enfit)
xen = np.linspace(time[0], time[-1], 100)
yen = ene(xen)
plt.plot(time,ensub,'o', xen, yen, color='blue')

который дает следующий график:
 Plot1

Я получаю что-то вроде этого, что обычно нормально. Но я знаю, что эти данные очень хорошо подходят для другой функции, например для квадратного корня или логарифмический.

Предпочтительнее использовать такой тип графика:  BetterPlot

Как я могу подобрать более точное уравнение к этим данным, показать его и сделать так, чтобы оно могло быть вызвано?


person Estif    schedule 07.01.2017    source источник
comment
Найдите «нелинейная регрессия». Я считаю, что у scipy есть функция для этого.   -  person Terry Jan Reedy    schedule 07.01.2017
comment
вы можете построить свой собственный x_new = (x, x ** 2, log (x), exp (x)) и т. д., а затем подобрать линейную регрессию multi var для (y, x_new). См. Этот ответ, чтобы узнать, как выполнить подгонку нескольких переменных.   -  person tihom    schedule 07.01.2017