2014-10-22 8 views
1

Я выполняю гауссовскую подгонку по некоторым данным (из файла prplt). Я получаю следующие ошибки: RuntimeWarning: деление на ноль, возникающие в делят возврата (y1-FUNC (х2, р))/заблуждатьсяPython: Деление на нулевую ошибку с вычислением наименьших квадратов

И

RuntimeWarning: недействительное значение встречается в double_scalars г = р [ 0] * np.exp (- (x2-p [1]) ** 2/(2 * p [2] ** 2))

Сначала я думал, при начальных параметрах p0, но теперь я убежден, что это что-то другое. Вот мой код:

x1= np.linspace(1,len(prplt),len(prplt)) 
index=np.where(x1>340) 
x2= x1[index] 
y=prplt 
y1=y[index] 
def func(x2,p): 
    z=p[0]*np.exp(-(x2-p[1])**2/(2*p[2]**2)) 
    return z 
p0=[3500.,400.,50.] 
def errfunc(p,x2,y1,func,err): 
    return (y1-func(x2,p))/err 

plt.errorbar(x2, y1, np.sqrt(y1), ecolor='black', fmt=None) 
out=leastsq(errfunc, p0, args=(x2,y1,func,np.sqrt(y1)),full_output=1) 

Любое понимание будет оценено! Я очень расстроен новым программистом. Спасибо, что прочитали!

+0

в 'def func (x2, p):' добавлять инструкции печати перед математикой для распечатки x2 и p на отдельных строках. Убедитесь, что это то, что, по вашему мнению, должно быть. Например, кажется, что p должен быть массивом с не менее чем тремя элементами. – Paul

ответ

0

Очевидно, что ваш err - 0, что вызывает ошибку. Ваш код не предоставляет источник err, поэтому мы можем помочь. Но вы можете попытаться отследить его с помощью отладчика (или некоторых операторов печати, если вам это не нравится). Существует также значение, которое можно использовать в другом выражении (возможно, p2 == 0). Вы также должны отлаживать источник этого значения.

 Смежные вопросы

  • Нет связанных вопросов^_^