我在python中有一个直方图,我想计算总和的最小值(n [i] -gauss(x [i],sigma,mu))** 2其中x [i]是该值的值bins [i]对应于n [i],并且必须通过修改sigma和mu来获得最小值(我不想使用从拟合曲线获得的那些)。所以这是我的计划:
import numpy as np
from scipy.optimize import minimize
from random import gauss
from matplotlib import pyplot as plt
from scipy.stats import norm
import math
values = []
while len(values) < 10000:
value = gauss(0,20)
if -100 < value < 100:
values.append(value)
n, bins, patches = plt.hist(values, 10, facecolor='green',normed='1')
mu, std = norm.fit(values)
x=np.arange(-100,100,0.01)
y=1/(math.sqrt(2*math.pi)*std)*np.exp(-(x-mu)**2/(2*std**2))
plt.plot(x,y,"b-")
binWidth=bins[5]-bins[4]
def gauss(x):
f=0
for i in range(len(n)):
centre=(2*bins[i]+binWidth)/2
f=f+(n[i]-1/(x[1]*math.sqrt(2*math.pi))*np.exp(-(y[(centre+100)*100]-x[0])**2/(2*x[1]**2)))**2
return f
x0=np.array([0.01,0.01])
res = minimize (gauss,x0,method='nelder-mead',options={'xtol': 1e-8, 'disp': True})
print res.x
所以在运行之后我应该得到最小的函数和mu和sigma这个最小值(并且它适用于其他函数)。但我收到此警告:警告:已超出最大功能评估数。而且我得到了mu和sigma的一些值,但是每次运行它们都不同,所以出了点问题。我该怎么办?