Ajuste gaussiano a los datos de un histograma en python: Trust Region v / s Levenberg Marquardt

Mi diagrama de histograma muestra claramente dos picos. Pero mientras se ajusta a la curva con un doble gaussiano, muestra solo un pico. Seguí casi todas las respuestas que se muestran en stackoverflow. Pero no pudo obtener el resultado correcto. Anteriormente lo hizo mi maestro en Fortran y obtuvo dos picos. solíaleastsq de pitónscipy.optimize en un juicio ¿Debo dar mis datos también? Aquí está mi código.

binss = (max(x) - min(x))/0.05 #0.05 is my bin width
n, bins, patches = plt.hist(x, binss, color = 'grey') #gives the histogram

x_a = []
for item in range(len(bins)-1):
    b = (bins[item]+bins[item+1])/2
    x_a.append(b)

x_avg = np.array(x_a)
y_real = n

def gauss(x, A, mu, sigma):
    gaus = []
    for item in range(len(x)):
        gaus.append(A*e**(-(x[item]-mu)**2./(2.*sigma**2)))
    return np.array(gaus)
A1, A2, m1, m2, sd1, sd2 = [25, 30, 0.3, 0.6, -0.9, -0.9]

#Initial guesses for leastsq
p = [A1, A2, m1, m2, sd1, sd2]
y_init = gauss(x_avg, A1, m1, sd1) + gauss(x_avg, A2, m2, sd2)    #initially guessed y

def residual(p, x, y):
    A1, A2, m1, m2, sd1, sd2 = p
    y_fit = gauss(x, A1, m1, sd1) + gauss(x, A2, m2, sd2)
    err = y - y_fit
    return err

sf = leastsq(residual, p, args = (x_avg , y_real))

y_fitted1 = gauss(x_avg, sf[0][0], sf[0][2], sf[0][4])
y_fitted2 = gauss(x_avg, sf[0][1], sf[0][3], sf[0][5])

y_fitted = y_fitted1 + y_fitted2

plt.plot(x_avg, y_init, 'b', label='Starting Guess')
plt.plot(x_avg, y_fitted, color = 'red', label = 'Fitted Data')
plt.plot(x_avg, y_fitted1, color= 'black', label = 'Fitted1 Data')
plt.plot(x_avg, y_fitted2, color = 'green', label = 'Fitted2 Data')

Incluso la cifra que obtuve no es suave. Tiene solo 54 puntos enx_avg Por favor ayuda. Ni siquiera puedo publicar la figura aquí.

Al trazar en MATLAB, se obtuvieron resultados correctos. Motivo: MATLAB utiliza algo de la región de confianza en lugar de algo de Levenberg-Marquardt que no era adecuado para las restricciones vinculadas.

Los resultados correctos se obtienen solo cuando se muestra como una suma de 3 gaussianos individuales, no 2.

¿Cómo puedo decidir qué algo usar y cuándo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta