这个代码适用于我,只要你只适合两个高斯分布的组合的函数.
我刚刚做出了一个残差函数,增加了两个高斯函数,然后从真实数据中减去它们.
我传递给Numpy最小二乘函数的参数(p)包括:第一个高斯函数(m)的平均值,与第一和第二高斯函数(dm,即水平移位)的平均值,标准偏差的第一(sd1)和第二(sd2)的标准偏差.
import numpy as np
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
######################################
# Setting up test data
def norm(x, mean, sd):
norm = []
for i in range(x.size):
norm += [1.0/(sd*np.sqrt(2*np.pi))*np.exp(-(x[i] - mean)**2/(2*sd**2))]
return np.array(norm)
mean1, mean2 = 0, -2
std1, std2 = 0.5, 1
x = np.linspace(-20, 20, 500)
y_real = norm(x, mean1, std1) + norm(x, mean2, std2)
######################################
# Solving
m, dm, sd1, sd2 = [5, 10, 1, 1]
p = [m, dm, sd1, sd2] # Initial guesses for leastsq
y_init = nor