1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
def FIT_Sinus(self, dataX, dataY):
tX = dataX
tY = dataY
self.num_points = len(dataX)
Ty = scipy.linspace(numpy.min(dataX), numpy.max(dataX), self.num_points)
X0 = float(dataX[0])
Moyenne = numpy.mean(dataY)
Min = float(numpy.min(dataY))
Max = float(numpy.max(dataY))
Mod = float((Max - Min) / (Max + Min))
self.coef = numpy.zeros(5)
self.coefInit = numpy.zeros(6)
Phase = -0.001
Periode = 0.01
pente = 0.01
self.coefInit[0] = Moyenne
self.coefInit[1] = Mod
self.coefInit[2] = Phase
self.coefInit[3] = Periode
self.coefInit[4] = pente
self.coefInit[5] = X0
#1er partie
for i in range(30):
# Fit the first set
fitfunc = lambda p, x : Moyenne * (1 + Mod * sin(2*pi * (x + p[0] - X0) / p[1])) * (1 + p[2] * (x - X0))
errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function
#Moyenne / Modulo / Phase / Periode / pente
p0 = [Phase, Periode, pente, 1.]
p2, success = optimize.leastsq(errfunc, p0[:], args=(Ty, tY), Dfun = None, full_output=0, col_deriv=0.1, ftol = 1.49012e-10, xtol = 1.49012e-10, gtol=0.10, maxfev = 1000000)
Phase = p2[0]
Periode = p2[1]
pente = p2[2]
#2eme partie
fitfunc2 = lambda p, x : p[0] * (1 + p[1] * sin(2*pi * (x + p2[0] - X0) / p2[1])) * (1 + p2[2] * (x - X0))
errfunc2 = lambda p, x, y: fitfunc2(p, x) - y # Distance to the target function
p1 = [Moyenne, Mod, 1.]
p3,success = optimize.leastsq(errfunc2, p1[:], args=(Ty, tY), Dfun = None, full_output=0, col_deriv=0.1, ftol = 1.49012e-10, xtol = 1.49012e-10, gtol=0.10, maxfev = 1000000)
Moyenne = p3[0]
Mod = p3[1]
print Moyenne, Mod, Phase, Periode, pente
time = scipy.linspace(numpy.min(dataX), numpy.max(dataX), len(dataY))
self.coef[2] = p2[0]
self.coef[3] = p2[1]
self.coef[4] = p2[2]
self.coef[0] = p3[0]
self.coef[1] = p3[1]
return time, fitfunc2(p3, time) |
Partager