2014-11-24 4 views
1

Scipy curve_fit을 사용하여 Gaussian에 데이터를 저장하려고합니다. 불행히도 curve_fit은 1,1,1을 반환합니다.Scipy curve_fit을 잘 사용하지 않는 것 같습니다.

Kp4=fnamer4[615:645] 
xk=np.arange(0,1024,1)[615:645] 

def func(x, a, x0, sigma): 
return a*np.exp(-(x-x0)**2/(2*sigma**2)) 
popt, pcov = curve_fit(func, xk, Kp4) 
print (popt) 
Kp4_fit= func(xk, popt[0], popt[1], popt[2]) 
plt.plot(xk, Kp4_fit, 'r',xk, Kp4, 'bs') 

Kp4 인쇄 POPT의 출력은 내가 전에 많은 다른 데이터에 curve_fit을 시도 [ 1. 1. 1.] 입니다

>>> Kp4 
array([23, 27, 20, 26, 22, 22, 26, 29, 32, 19, 34, 26, 29, 24, 32, 41, 27, 
    39, 33, 30, 30, 30, 26, 39, 30, 21, 17, 16, 17, 14]) 

같고, 그것을 잘했다. 아마도 문제는 curve_fit이 데이터를 Gaussian 함수에 맞출 수 없다는 것입니다. 도움 주셔서 감사합니다.

나는 curve_fit을 위해 사용하고있는 개념은 노호 링크에서 예를 기반으로합니다 그렇지 않으면 적합로 시작, 당신은 POPT의 초기 추측을 통과해야 http://python4esac.github.io/fitting/examples1d.html

답변

1

[1,1,1] 귀하의 데이터 세트에 대해 매우 가난한 초기 추측으로!

다음은 나를 위해 합리적인 결과를 제공합니다 : 초기 추측, [np.mean(Kp4), np.mean(xk),5*(max(xk)-min(xk))/len(xk)] 될 수있는 일반적인 시작 지점을 가지고

popt, pcov = curve_fit(func, xk, Kp4, p0=[20,630,5]) 

.

plt.show() 또는 그와 비슷한 것을 잊지 마세요.

+0

답이 나와 있으면 [여기] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)에 설명 된대로 표시하십시오. 따라서 다른 사용자는 a) 문제가 해결되고 b) 솔루션이 어떻게 보이는지 알 수 있습니다. 고맙습니다! – jkalden

+0

도움 주셔서 감사합니다 jaklden – icypy

관련 문제