пытаюсь получить разумные значения из scipy powerlaw fit

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

Вот скрипт Python, который я использую для подгонки данных:

#!/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.

Я пытался масштабировать свои данные и экспериментировать с параметрами, чтобы оптимизировать.leastsq, но безуспешно. Возможно ли то, что я пытаюсь сделать, или мои данные просто не позволяют этого? Расчет стоит дорого, поэтому получить больше точек данных нетривиально.

Спасибо!

11
задан user 27 April 2014 в 00:36
поделиться