SciPy Curve Fit не соответствует степенному закону

Итак, я пытаюсь согласовать набор данных со степенным законом следующего вида:

def f(x,N,a): # Power law fit
    if a >0:
        return N*x**(-a)
    else:
        return 10.**300

par,cov = scipy.optimize.curve_fit(f,data,time,array([10**(-7),1.2]))

где условие else - просто заставить a быть положительным. Использование scipy.optimize.curve_fit приводит кужасная посадка (зеленая линия)возвращая значения 1.2e + 04 и 1.9e0-7 для N и a, соответственно, без пересечения с данными. Из подгонок, которые я вставил вручную, значения должны быть около 1e-07 и 1.2 для N и a соответственно, хотя их помещение в Curve_fit в качестве начальных параметров не меняет результат. Удаление условия для положительного результата приводит к худшему соответствию, так как оно выбирает отрицательное, что приводит к совпадению с неправильным наклоном знака.

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

Ответы на вопрос(1)

Ваш ответ на вопрос