Passende hyperbolische und harmonische Funktionen mit Kurve

Ich habe ein Problem mit der Kurvenfahrtfunktion. Hier habe ich einen Code mit zwei Funktionen zu arbeiten. Die erste ist eine hyperbolische Funktion. Die zweite ist die gleiche aber mit einem Parameter = 1. Mein Problem ist, dass das Ergebnis, um die erste Funktion mit Kurve passen funktioniert gut, aber mit dem zweiten doesn't. Ich habe ein kommerzielles Programm, das korrekte Lösungen für beide erzeugt. So ist es möglich, eine Lösung für die zweite Funktion zu finden (ein besonderer Fall des ersten, wie ich oben erwähnt habe) Gibt es jemanden, der mir eine Vorstellung davon geben könnte, was ich falsch mache? Vielen Dank !

Hier ist der Code zu laufen:

  • Kann Python-Module nach der Installation von Anaconda nicht installieren
  • Wie kann man einen festen Breitenstring ausrichten?
  • Was sind alle möglichen Pos-Tags von NLTK?
  • Kryptische Warnung öffnet sich bei der Pandas-Zuweisung mit loc und iloc
  • Python-Ausstieg Verbraucher auf erste StopIteration
  • So filtern Sie die Liste der Wörterbücher mit passenden Werten für einen bestimmten Schlüssel
  • def hypRegress(ptp,pir): xData = np.arange(len(ptp)) yData = pir xData = np.array(xData, dtype=float) yData = np.array(yData, dtype= float) def funcHyp(x, qi, exp, di): return qi*(1+exp*di*x)**(-1/exp) def errfuncHyp(p): return funcHyp(xData, p[0], p[1], p[2]) - yData #print(xData.min(), xData.max()) #print(yData.min(), yData.max()) trialX = np.linspace(xData[0], xData[-1], 1000) # Fit an hyperbolic popt, pcov = optimize.curve_fit(funcHyp, xData, yData) print 'popt' #print(popt) yHYP = funcHyp(trialX, *popt) #optimization # initial values p1, success = optimize.leastsq(errfuncHyp, popt,maxfev=10000) print p1 aaaa = funcHyp(trialX, *p1) plt.figure() plt.plot(xData, yData, 'r+', label='Data', marker='o') plt.plot(trialX, yHYP, 'r-',ls='--', label="Hyp Fit") plt.plot(trialX, aaaa, 'y', label = 'Optimized') plt.legend() plt.show(block=False) return p1 def harRegress(ptp,pir): xData = np.arange(len(ptp)) yData = pir xData = np.array(xData, dtype=float) yData = np.array(yData, dtype=float) def funcHar(x, qi, di): return qi*(1+di*x)**(-1) def errfuncHar(p): return funcHar(xData, p[0], p[1]) - yData #print(xData.min(), xData.max()) #print(yData.min(), yData.max()) trialX = np.linspace(xData[0], xData[-1], 1000) # Fit an harmonic popt, pcov = optimize.curve_fit(funcHar, xData, yData) print 'popt' print(popt) yHAR = funcHar(trialX, *popt) #optimization # initial values p1, success = optimize.leastsq(errfuncHar, popt,maxfev=1000) print p1 aaaa = funcHar(trialX, *p1) plt.figure() plt.plot(xData, yData, 'r+', label='Data', marker='o') plt.plot(trialX, yHAR, 'r-',ls='--', label="Har Fit") plt.plot(trialX, aaaa, 'y', label = 'Optimized') plt.legend() plt.show(block=False) return p1 ptp = ([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]) pir = ([150,85,90,50,45,60,60,40,40,30,28,30,38,30,26]) hypRegress(ptp,pir) harRegress(ptp,pir) input('pause') 

  • Bestimmen Sie die Verschlüsselung von Text in Python
  • Heben Sie die Ausnahme an, wenn das Skript fehlschlägt
  • "Objekt" speichern
  • Was ist der beste Weg, um über eine Python-Liste zu iterieren, mit Ausnahme bestimmter Werte und Ausdruck des Ergebnisses
  • Wörterbuch von csv file python
  • Schreiben Sie eine CSV ohne Trennzeichen in Python
  • One Solution collect form web for “Passende hyperbolische und harmonische Funktionen mit Kurve”

    Es ist ein klassisches Problem. Der curve_fit Algorithmus beginnt von einer anfänglichen Vermutung für die zu optimierenden Argumente, die, wenn nicht geliefert, einfach alle sind.

    Das heißt, wenn du anrufst

     popt, pcov = optimize.curve_fit(funcHar, xData, yData) 

    Der erste Versuch für die Anpassungsroutine wird annehmen

     funcHar(xData, qi=1, di=1) 

    Wenn Sie keine der anderen Optionen angegeben haben, ist die Passung schlecht, wie die großen Abweichungen der Parameterschätzungen belegen (überprüfen Sie die Diagonale von pcov und vergleichen Sie sie mit den tatsächlichen Werten, die in popt ).

    In vielen Fällen wird die Situation durch eine intelligente Vermutung gelöst. Aus deinem HAR-Modell sammle ich, dass die Werte um x==0 gleich groß sind wie qi . So könntest du eine anfängliche Vermutung von p0 = (pir[0], 1) liefern, was bereits zu einer befriedigenden Lösung führt. Du kannst es auch mit anrufen

     popt, pcov = optimize.curve_fit(funcHar, ptp, pir, p0=(0, 1)) 

    Was zu dem gleichen Ergebnis führt. Also das Problem ist nur, dass der Algorithmus ein lokales Minimum findet.

    Eine Alternative wäre es gewesen, einen anderen factor zu liefern, der "Parameter, der den Anfangsschritt bestimmt":

     popt, pcov = optimize.curve_fit(funcHar, ptp, pir, p0=(1, 1), factor=1) 

    In diesem Fall ergibt sich auch bei der (Standard-) Anfangs-Vermutung von p0=(1,1) die gleiche resultierende Passung.

    Denken Sie daran: Anpassung ist eine Kunst, keine Wissenschaft. Oftmals, durch die Analyse des Modells, das du passen möchtest, könntest du schon eine gute erste Vermutung liefern.

    Ich kann nicht für den im kommerziellen Programm verwendeten Algorithmus sprechen. Wenn es Open-Source (unwahrscheinlich) ist, könnte man einen Blick sehen, was sie tun

    Python ist die beste Programmiersprache der Welt.