Я пытаюсь подгонять некоторые данные из кода моделирования, который я выполнял, чтобы выяснить зависимость от степенного закона. Когда я рисую линейную подгонку, данные не подходят очень хорошо.
Здесь python script, который я использую, чтобы соответствовать данным:
#!/usr/bin/env python
from scipy import optimize
import numpy
xdata=[ 0.00010851, 0.00021701, 0.00043403, 0.00086806, 0.00173611, 0.00347222]
ydata=[ 29.56241016, 29.82245508, 25.33930469, 19.97075977, 12.61276074, 7.12695312]
fitfunc = lambda p, x: p[0] + p[1] * x ** (p[2])
errfunc = lambda p, x, y: (y - fitfunc(p, x))
out,success = optimize.leastsq(errfunc, [1,-1,-0.5],args=(xdata, ydata),maxfev=3000)
print "%g + %g*x^%g"%(out[0],out[1],out[2])
вывод, который я получаю: -71205.3 + 71174.5 * x ^ -9.79038e-05
В то время как на сюжете пригонка выглядит так же хорошо, как вы ожидали бы от наименьших квадратов, форма вывода беспокоит меня. Я надеялся, что константа будет близка к тому, где вы ожидаете, что ноль будет (около 30). И я ожидал найти зависимость мощности большей доли, чем 10 ^ -5.
Я пробовал перемасштабировать свои данные и играть с параметрами optimize.leastsq без везения. Является ли то, что я пытаюсь сделать возможным, или мои данные просто не позволяют? Расчет дорог, поэтому получение большего количества точек данных является нетривиальным.
Спасибо!