Bonjour,
Je vais avoir besoin de vos lumières car la je ne sais pas ce qui se passe.
Je développe un soft qui permet d'extraire une colonne d'une image, et d'avoir au final un fit sinus des ces données.
Mon gros problème est mon fit, il déconne et je n'arrive pas à comprendre pourquoi.
Voici mon code de ma fonction pour mon fit sinus:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Voici mes données:


Voici la courbe obtenue (Fit + Donnée à fitter)


Merci d'avance pour tous vos commentaires !!!