Ich habe Daten, die ich gerne visualisieren würde. Hier ist mein Code:Fit Daten in Python (Sinus?)
import numpy as np
from scipy.optimize
import curve_fit
xdata = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
ydata = np.array([26.2, 27.2, 27.9, 27.9, 27.2, 26.2, 25.3, 24.5, 24.2, 24.4, 24.7, 25.4])
def func(x, p1,p2,p3):
return p1 + p3*np.sin(p2*x)
popt, pcov = curve_fit(func, xdata, ydata,p0=(25.931, 0.5629,1.8978))
import matplotlib.pylab as plt
plt.plot(xdata, ydata,'o')
plt.plot(xdata, func(xdata, popt[0], popt[1], popt[2]),linewidth=2, color = 'red')
plt.show()
Ich bin unzufrieden mit dem Ergebnis. Wie kann ich besser passen? Muss die von mir definierte Funktion komplexer sein? Brauche ich einen ganz anderen Ansatz, eine andere Methode?
Ich habe auch versucht, diesen Ansatz:
from scipy.interpolate import interp1d
f = interp1d(xdata, ydata, kind='cubic')
xnew = np.linspace(0, 11, num=100, endpoint=True)
plt.plot(xdata, ydata, 'o', xnew, f(xnew), '-', color = 'blue')
Das Ergebnis sieht viel schöner. Ich suche nach einer passenden Methode, die beim Plotten ein ähnliches Ergebnis liefert. Es tut mir leid, dass ich es nicht deutlicher ausdrücken konnte. Das ist wahrscheinlich schon Teil des Problems :(
Worüber sind Sie unglücklich? Wie erwarten Sie, dass wir raten? – Julien
Die Return-Anweisung Ihres 'func' sollte eingerückt werden. – Ian