Я пытаюсь сопоставить некоторые данные из кода моделирования, который я запускал, чтобы выяснить степенную зависимость. Когда я строю линейную подгонку, данные не очень хорошо подходят.
Вот скрипт 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, но безуспешно. Возможно ли то, что я пытаюсь сделать, или мои данные просто не позволяют этого? Расчет стоит дорого, поэтому получить больше точек данных нетривиально.
Спасибо!