SciPy-Kurvenanpassung schlägt fehl Potenzgesetz

So, ich versuche, einen Datensatz mit einem Potenzgesetz der folgenden Art zu versehen:

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]))

wobei die else-Bedingung nur darin besteht, a zu zwingen, positiv zu sein. Die Verwendung von scipy.optimize.curve_fit ergibtan schreckliche Passform (grüne Linie) gibt Werte von 1.2e + 04 und 1.9e0-7 für N bzw. a zurück, ohne dass sich die Daten überschneiden. Von den Anpassungen, die ich manuell eingegeben habe, sollten die Werte bei 1e-07 und 1,2 für N bzw. a landen, obwohl das Einfügen dieser Werte in curve_fit als Anfangsparameter das Ergebnis nicht verändert. Das Entfernen der Bedingung, dass a positiv sein soll, führt zu einer schlechteren Anpassung, da ein Negativ ausgewählt wird, was zu einer Anpassung mit der falschen Vorzeichensteigung führt.

Ich kann nicht herausfinden, wie ich aus dieser Routine eine glaubwürdige, geschweige denn verlässliche Anpassung machen kann, aber ich kann keine anderen guten Python-Kurvenanpassungsroutinen finden. Muss ich meinen eigenen Algorithmus für kleinste Fehlerquadrate schreiben oder mache ich hier etwas falsch?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage