Mit einem denke, mit scipy curve_fit
Ich habe eine Funktion, ich möchte Kurvenanpassung mit dem wissen der Fehler der Kurvenanpassung. Ich versuche, scipy.optimieren.curve_fit dies zu tun, aber bin knapp in problem. Jetzt mein code ist:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
pi = np.pi
sqrt = np.sqrt
mean = np.mean
A = 1
T_2 = 100
nu_0 = 10
phi_0 = 0
n = .001
nu_s = 500
T = 1000
t = np.linspace(0, T, num = (nu_s*T))
def S_n(A,t,T_2,nu_0,phi_0,n,nu_s,T):
return (A/np.sqrt(2))*np.exp(-t/T_2)*np.cos(2*pi*nu_0*t+phi_0)
S = S_n(A,t,T_2,nu_0,phi_0,n,nu_s,T) + np.random.normal(0, n, nu_s*T)
guess = np.array([A,T_2,nu_0,phi_0,n,nu_s,T])
print guess
popt, pcov = curve_fit(S_n,t,S, guess)
print popt
perr = sqrt(np.diag(pcov))
print perr
Gibt mir unendliche Fehler. Ich bin mir nicht sicher, ob ich das Tue, ist meine Vermutung richtig, weil in der Gleichung, es bleibt alles konstant außer t, so verlasse ich t aus meine Vermutung, da es nicht mehr ein array, denn t ist eine Sequenz. Wenn ich aus t aus der Vermutung, die ich hier mache erhalte ich Werte für jede variable, die weit von den Werten gebe ich zunächst mit unendlicher Fehler. Wenn ich t in die denke, dann bekomme ich eine Fehlermeldung.
InformationsquelleAutor GlassSeaHorse | 2015-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht die Reihenfolge der Parameter zu
curve_fit
berücksichtigt:Wenn Sie eine Funktion:
(beachten Sie die Reihenfolge der ersten 2 Parameter geändert hat)
und pass auf
curve_fit
ist, wird es funktionieren.Ist es wohl mehr pythonic zu reinigen, Ihre ursprüngliche Funktion aber:
Dann können Sie pass
S_n
zucurve_fit
unverändert, ebenso wieS
undguess
.Klar sein, der folgende code erzeugt die gewünschte Passform:
den letzten Teil: rufen Sie
curve_fit(Sm,t,S,guess)
und lassen Sie alles andere. Lassen Sie dieguess
ist als: es war in der richtigen Reihenfolge. Im Grundecurve_fit
rufen die Modell-FunktionSm
in diesem Fall, mit dem 2. parameter bereitgestelltt
, wie die Modell-Funktion das erste argument. Dieguess
, Hinzugefügt werden als zusätzliche Argumente in dem Aufruf zu der Modell-Funktion.Es ist immer noch, dass Sie mir das gleiche problem. Wenn ich es wie dass mit curve_fit(Sm,t,S,Vermutung) die Ausgabe [ 2.28727542 e+00 -8.16926439 e+01 4.39912861 e+03 1.04075178 e+06 1.00000000 e-03 5.00000000 e+02 1.00000000 e+03] [ inf inf inf inf inf inf inf].
begleiten Sie mich in chat
das ist, weil Ihr Modell hat 3 Parameter, die nicht überhaupt verwendet:
n, nu_s, T
. Dies erklärt sich hier zu (ich von Ihnen positiv bewertet werden). Wenn Sie loszuwerden, die 3 verwendeten Parameter (auch in derguess
) dann pcov zurück endliche Werte. Ich änderte meine Antwort entsprechend die Variablen, die Sie in verwenden, und geben Sie einen aussagekräftigeren Titel.InformationsquelleAutor Oliver W.