最小化python

时间:2016-02-17 15:24:15

标签: python numpy scipy

我在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的一些值,但是每次运行它们都不同,所以出了点问题。我该怎么办?

0 个答案:

没有答案